TKMybatis的介绍和使用详解

目录
  • 一、什么是 TKMybatis
  • 二、TKMybatis 使用
    • 2.1 Springboot 项目中加入依赖
    • 2.2 使用讲解
    • 2.3 实际案例
  • 三、扩展介绍
    • 泛型(实体类)的类型必须符合要求
    • 所有的mapper继承此类将具有以下通用方法

一、什么是 TKMybatis

TKMybatis 是基于 Mybatis 框架开发的一个工具,内部实现了对单表的基本数据操作,只需要简单继承 TKMybatis 提供的接口,就能够实现无需编写任何 sql 即能完成单表操作。

二、TKMybatis 使用

2.1 Springboot 项目中加入依赖

<!--通用mapper起步依赖-->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.0.4</version>
</dependency>

在 POJO 类中加入依赖

<!--每个工程都有Pojo,都需要用到该包对应的注解-->
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0</version>
    <scope>compile</scope>
</dependency>

在启动类中配置 @MapperScan 扫描

@SpringBootApplication
@MapperScan(basePackages = {"com.tom.order.mapper"})
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

2.2 使用讲解

2.2.1 实体类中使用

在实体类中,常用的注解和意义为:

@Table:描述数据库表信息,主要属性有name(表名)、schema、catalog、uniqueConstraints等。

@Id:指定表主键字段,无属性值。

@Column:描述数据库字段信息,主要属性有name(字段名)、columnDefinition、insertable、length、nullable(是否可为空)、precision、scale、table、unique、updatable等。

@ColumnType:描述数据库字段类型,可对一些特殊类型作配置,进行特殊处理,主要属性有jdbcType、column、typeHandler等。

其他注解如:@Transient、@ColumnResult、@JoinColumn、@OrderBy、@Embeddable等暂不描述

2.2.2 dao中使用

单表操作,只需要继承 tk.mybatis 下的 Mapper 接口即可使用

import tk.mybatis.mapper.common.Mapper;

@Repository
public interface BrandMapper extends Mapper<Brand> {
}

查看具体使用:内部都已经封装了基本的单表操作

 2.2.3 Service 层中使用

操作 类型 介绍
增加 Mapper.insert(record); 保存一个实体,null的属性也会保存,不会使用数据库默认值
Mapper.insertSelective(record); 保存一个实体,忽略空值,即没提交的值会使用使用数据库默认值
删除 Mapper.delete(record); 根据实体属性作为条件进行删除,查询条件使用等号
Mapper.deleteByExample(example) 根据Example条件删除数据
Mapper.deleteByPrimaryKey(key) 根据主键字段进行删除,方法参数必须包含完整的主键属性
修改 Mapper.updateByExample(record,example) 根据Example条件更新实体`record`包含的全部属性,null值会被更新
Mapper.updateByExampleSelective(record, example) 根据Example条件更新实体`record`包含的不是null的属性值
Mapper.updateByPrimaryKey(record) 根据主键更新实体全部字段,null值会被更新
Mapper.updateByPrimaryKeySelective(record) 根据主键更新属性不为null的值
查询 Mapper.select(record) 根据实体中的属性值进行查询,查询条件使用等号
Mapper.selectAll() 查询全部结果
Mapper.selectByExample(example) 根据Example条件进行查询
Mapper.selectByPrimaryKey(key) 根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
Mapper.selectCount(record) 根据实体中的属性查询总数,查询条件使用等号
Mapper.selectCountByExample(example) 根据Example条件进行查询总数
Mapper.selectOne(record)
根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号。

但是如果存在某个属性为int,则会初始化为0。可能影响到实际使用

2.3 实际案例

2.3.1 dao 层使用


import tk.mybatis.mapper.common.Mapper;

/**
 * DAO 使用通用Mapper
 * DSO接口需要继承 tk.mybatis.mapper.common.Mapper
 */
@Repository
public interface BrandMapper extends Mapper<Brand> {

}

2.3.2 service 层使用

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

@Service
public class BrandServiceImpl implements BrandService {

    @Autowired
    private BrandMapper brandMapper;

    public Example createExample(Brand brand) {
        // 自定义条件搜索对象 Example
        Example example = new Example(Brand.class);
        Example.Criteria criteria = example.createCriteria(); //条件构造器

        if (brand != null) {
            if (!StringUtils.isEmpty(brand.getName())) {
                criteria.andLike("name", '%' + brand.getName() + '%');
            }

            if (!StringUtils.isEmpty(brand.getLetter())) {
                criteria.andEqualTo("letter", brand.getLetter());
            }
        }
        return example;
    }

    @Override
    public List<Brand> findAll() {
        return brandMapper.selectAll();
    }

    @Override
    public List<Brand> findList(Brand brand) {
        Example example = createExample(brand);
        return brandMapper.selectByExample(example);
    }

    @Override
    public Brand findById(Integer id) {
        return brandMapper.selectByPrimaryKey(id);
    }

    /**
     * 分页查询
     * @param page  当前页
     * @param size  每页显示的条数
     * @return
     */
    @Override
    public PageInfo<Brand> pageSearch(Integer page, Integer size) {
        // 分页实现
        // 后面的查询必须是紧跟集合查询
        PageHelper.startPage(page, size);
        // 查询集合
        List<Brand> brands = brandMapper.selectAll();
        return new PageInfo<Brand>(brands);
    }

    @Override
    public PageInfo<Brand> pageSearchAndCondition(Brand brand, Integer page, Integer size) {
        // 开始分页
        PageHelper.startPage(page, size);
        // 搜索数据
        Example example = createExample(brand);
        List<Brand> list = brandMapper.selectByExample(example);
        return new PageInfo<Brand>(list);
    }

    /**
     * 增加品牌
     * @param brand
     */
    @Override
    public void add(Brand brand) {
        // 使用通用 Mapper.insertSelective
        // 方法中但凡带有selective就会忽略空值
        int i = brandMapper.insertSelective(brand);
    }

    /**
     * 根据id修改品牌
     * @param brand
     */
    @Override
    public void update(Brand brand) {
        // 使用通用mapper.update();
        brandMapper.updateByPrimaryKeySelective(brand);
    }

    /**
     * 根据id删除
     * @param id
     */
    @Override
    public void del(Integer id) {
        brandMapper.deleteByPrimaryKey(id);
    }
}

三、扩展介绍

使用

public interface BaseMapper<T> extends tk.mybatis.mapper.common.BaseMapper<T>, IdsMapper<T>, MySqlMapper<T>, OracleMapper<T> {
}

pom.xml引入
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>

注:为了演示所以同时引用了MySqlMapper和OracleMapper 正常情况是只能引用一种因为他们有一个相同的方法insertList(List list)

泛型(实体类)的类型必须符合要求

实体类按照如下规则和数据库表进行转换,注解全部是JPA中的注解:

  • 表名默认使用类名,驼峰转下划线(只对大写字母进行处理),如UserInfo默认对应的表名为user_info。
  • 表名可以使用@Table(name = “tableName”)进行指定,对不符合第一条默认规则的可以通过这种方式指定表名。
  • 字段默认和@Column一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式。
  • 可以使用@Column(name = “fieldName”)指定不符合第3条规则的字段名。
  • 使用@Transient注解可以忽略字段,添加该注解的字段不会作为表字段使用。
  • 建议一定是有一个@Id注解作为主键的字段,可以有多个@Id注解的字段作为联合主键。

所有的mapper继承此类将具有以下通用方法

查询方法

BaseSelectMapper下的通用方法

方法名称 作用
List selectAll(); 查询全部数据
T selectByPrimaryKey(Object key); 通过主键查询
T selectOne(T record); 通过实体查询单个数据
List select(T record); 通过实体查询多个数据
int selectCount(T record); 通过实体查询实体数量
boolean existsWithPrimaryKey(Object key); 通过主键查询此主键是否存在

SelectByIdsMapper下的通用方法

方法名称 作用
List selectByIds(String var1); 通过多个主键查询数据

添加方法
BaseInsertMapper下的通用方法

 

方法名称 作用
int insert(T record); 全部添加
int insertSelective(T record); 选择性(不为null)的添加

MySqlMapper下的通用方法

方法名称 作用
int insertList(List list); 批量插入
int insertUseGeneratedKeys(T record); 如果主键为自增可使用此方法获取添加成功的主键

OracleMapper下的通用方法

方法名称 作用
int insertList(List list); 批量插入

修改方法

BaseUpdateMapper下的通用方法

方法名称 作用
int updateByPrimaryKey(T record); 按照实体进行修改
int updateByPrimaryKeySelective(T record); 按照实体进行有选择的修改

删除方法
BaseDeleteMapper下的通用方法

方法名称 作用
int delete(T record); 按照实体进行删除
int deleteByPrimaryKey(Object o); 按照主键进行删除

IdsMapper下的通用方法

方法名称 作用
int deleteByIds(String var1); 按照主键批量删除

到此这篇关于TKMybatis的介绍和使用详解的文章就介绍到这了,更多相关TKMybatis 使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • TKmybatis的框架介绍和原理解析

    一.TkMybatis Tkmybatis 是基于 Mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,不需要写任何 sql 语句,这极大地提高了项目开发效率. 二.怎么用? 1. 引用 在 pom.xml 中引入 tk.mybatis 的引用. <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifact

  • Spring Boot 整合 TKMybatis 二次简化持久层代码的实现

    经常用 MyBatis 的的都知道,使用这个框架存在一个非常不友善的问题就是,就是每操作一个单表就需要自己手写一个 xml 文件,虽然说可以用工具生成 xml 和实体类可以解决这个问题,但是二次开发的时候对某个表字段进行修改的时候,生成 xml 文件就不现实啦.最近发现 tk.mybatis 就非常好的解决了这个问题.tk.mybatis 整合了 MyBatis 框架,在其基础上提供了很多工具,封装了常用的增删改查 SQL 语句,可以让我们的开发效率更高.在这里和大家分享一下. 引入依赖 在 p

  • TKMybatis的介绍和使用详解

    目录 一.什么是 TKMybatis 二.TKMybatis 使用 2.1 Springboot 项目中加入依赖 2.2 使用讲解 2.3 实际案例 三.扩展介绍 泛型(实体类)的类型必须符合要求 所有的mapper继承此类将具有以下通用方法 一.什么是 TKMybatis TKMybatis 是基于 Mybatis 框架开发的一个工具,内部实现了对单表的基本数据操作,只需要简单继承 TKMybatis 提供的接口,就能够实现无需编写任何 sql 即能完成单表操作. 二.TKMybatis 使用

  • Maven build 命令介绍的使用详解

    常用命令: 打包:mvn package 编译:mvn compile 清空:mvn clean(清除编译后目录,默认是target目录) 运行测试:mvn test 安装jar包到本地仓库中:mvn install 跳过测试:mvn xxx -DskipTests 1.创建 Maven 工程 ①.在 src/main/java 新建包 com.ys.maven,然后在这个包中创建类 HelloMaven.java package com.ys.maven; public class Hello

  • Python JWT 介绍和使用详解

    1. JWT 介绍 ​jwt( JSON Web Tokens ),是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明.目前,jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目 ​jwt认证流程: ​在项目开发中,一般会按照上图所示的过程进行认证,即:用户登录成功之后,服务端给用户浏览器返回一个 token,以后用户浏览器要携带 token 再去向服务端发送请求,服务端校验 token 的合法性,合法则给用户看数据,否则,返回一些错误信息 ​传统token方式和jw

  • React Fragment介绍与使用详解

    目录 前言 Fragments出现动机 React Fragment介绍与使用 <React.Fragment> 与 <>区别 前言 在向 DOM 树批量添加元素时,一个好的实践是创建一个document.createDocumentFragment,先将元素批量添加到 DocumentFragment 上,再把 DocumentFragment 添加到 DOM 树,减少了 DOM操作次数的同时也不会创建一个新元素. 和 DocumentFragment 类似,React 也存在

  • Shell AWK编程的基本介绍和使用详解

    目录 1.AWK介绍 (1)AWK概述 (2)printf格式化输出 (3)printf命令说明 2.AWK的基本使用 (1)AWK命令说明 (2)AWK命令使用 1.AWK介绍 (1)AWK概述 AWK是一种处理文本文件的语言,是一个强大的文本分析工具. AWK可以看成一门独立的语言,它拥有语言的基本特征,换句话说AWK可以写出极其繁琐和复杂的程序,AWK的语法比Shell的语法还难以接收.但绝大多数情况下,我们并不需要用AWK写过于复杂的东西,建议能用Shell处理的需求就不用AWK来解决.

  • C# 守护进程的介绍及实现详解

    目录 1.为什么需要守护进程 2.守护进程有哪几种方式 3.监听系统事件 和 WMI查询事件代码实现 1) 系统事件监听进程的关闭 2)WMI监听进程的启动和关闭 1.为什么需要守护进程 一般是为了保护我们的程序/服务的正常运行,当程序被关闭.异常退出等时再次启动程序/恢复服务 2.守护进程有哪几种方式 常见的守护进程的方式:1.轮询(轮询最简单也最low,这里不再作说明)2.监听系统事件3.WMI查询事件 3.监听系统事件 和 WMI查询事件代码实现 1) 系统事件监听进程的关闭 需要引入 S

  • Python Ast抽象语法树的介绍及应用详解

    目录 引言 1. AST简介 2. 创建AST 2.1 Compile函数 2.2 生成ast 3. 遍历AST 3.1 ast.NodeTransfer 3.2 ast.NodeTransformer 4.AST应用 4.1 汉字检测 4.2 Closure 检查 引言 Abstract Syntax Trees即抽象语法树.Ast是python源码到字节码的一种中间产物,借助ast模块可以从语法树的角度分析源码结构. 此外,我们不仅可以修改和执行语法树,还可以将Source生成的语法树unp

  • C/C++指针介绍与使用详解

    目录 什么是指针 定义指针变量 间接引用指针 常or常常 指向指针的指针 指针与数组 指针的运算 堆内存分配 C语言 C++语言 指针与函数 数组名作为函数的入口参数 函数名作为参数传入其他函数 使用指针修改函数参数 变量的引用作为函数的参数 两个常用的字符串函数 总结 什么是指针 C/C++语言拥有在程序运行时获得变量的地址和操作地址的能力,这种用来操作地址的特殊类型变量被称作指针. 翻译翻译什么tmd叫tmd指针! 变量或常量的指针存储的数据是 :对应的变量或常量在内存中的地址. 图解: 此

  • Vue中mixins混入的介绍与使用详解

    目录 一.来自官网的描述 二.如何创建Mixins 三.项目中如何使用混入 四.与vuex的区别 五.与公共组件的区别 一.来自官网的描述 混入 (mixins): 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 二.如何创建Mixins 在src目录下创建一个mixins文件夹,文件夹下新建一个myMixins.js文件.前面我们说了mixins是一个js对象,所以应该以对象的形式来定义my

  • Javascript ES6中对象类型Sets的介绍与使用详解

    介绍 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. Sets 是ES6(ES2015)中一个新的对象类型,用来创建一系列唯一值的集合.集合中的值可以是简单的原始类型如字符串(strings)或整数(integers),也可以是更复杂的对象类型如对象字面量或者数组. 基本方法 下面是基本的set及其方法(add, size, has, forEach, delete, clear

随机推荐