前面我们讲了SpringBoot集成Mybatis及 SpringBoot 与 Mybatis的逆向工程,可以使的我们编译程序更加的简单,今天主要讲解下 SpringBoot 与 TkMybatis 的集成
SpringBoot 单单集成Mybatis 需要我们编写大量的Sql语句,我们可以通过MyBatis的逆向工程生成大量的实体类及mapper文件进行服务开发,TkMybatis 可以让我们更加简单的实现数据的持久化,而不需要编写大量的SQL语句,TkMybatis已经继承了常用的mapper接口提供给我们是使用。当然如果TkMaytis不能满足我们的要求,我们也可以配置mapper xml文件实现我们自己的接口实现。
下面就来讲一讲 TkMybatis 的集成步骤。
 1. 数据库配置信息及构建表数据
 2. 创建SpringBoot工程
 3. 配置pom.xml文件
 4. 配置application.yml 文件
 5. 新建Entity实体类(可以通过Mymatis逆向工程构建)
 6. 新建Mapper基础接口类
 7. 新建实体对应的Mapper接口类
 8. 新建Service接口
 9. 新建RestControler接口(也可以通过Test进行测试)
 10. 启动测试
 
1. 数据库配置信息及构建表数据

mysql://10.10.34.28:3306/gaea  root/123456
    
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
 
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
`id` int(32) NOT NULL AUTO_INCREMENT,
`userName` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`passWord` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`realName` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
 
SET FOREIGN_KEY_CHECKS = 1;

2. 创建SpringBoot工程
通过IDEA创建Spring Boot工程,选择Web,DevOpt,MySql,JDBC,MyBatis,lombok 等模块,本工程需要使用swagger插件,增加swagger配置文件及pom.xml 依赖文件,关于swagger的配置,前面有专门章节介绍,请出门左拐,这里不作过多解释。

  配置代码结构:
    在Applicaiton同级目录下新建 config,entity,mapper,rest,service 包(package)
    在Resouces 目录下建 mapper目录

3. 配置pom.xml文件

<dependency>
      <groupId>tk.mybatis</groupId>
      <artifactId>mapper</artifactId>
      <version>${tk.mybatis.mapper.version}</version>
    </dependency>
    <dependency>
      <groupId>tk.mybatis</groupId>
      <artifactId>mapper-spring-boot-starter</artifactId>
      <version>${tk.mybatis.version}</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
      <groupId>com.zaxxer</groupId>
      <artifactId>HikariCP</artifactId>
    </dependency>

注意:此处必须包含mybatis,tkmybatis,mysql-connector 等jar包

4. 配置application.yml 文件

server:
  port: 8080

spring:
  datasource:
    username: root
    password: 123456
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://10.1.3.38:3306/datagaea?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      # 连接只读数据库时配置为true, 保证安全
      readOnly: false
      # 测试连接的有效性
      connection-test-query: select 1 from dual
      # 连接池名称
      pool-name: springHikariCP
      # 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
      idleTimeout: 600000
      # 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';)
      maxLifetime: 1800000
      # 连接池中允许的最大连接数,缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)
      maximumPoolSize: 12
      # 空闲时保持的最小连接数
      minimumIdle: 4

mybatis:
  mapper-locations: classpath*:mapper/*.xml

注意:1. 此处需要注意mybatis.mapper-locations 的配置路径

            2. 还需要注意 datasource.type,url,user,password,driver-class-name

5. 新建Entity实体类(可以通过Mymatis逆向工程构建)

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Data
@Table(name = "user_info")
public class User implements Serializable {

  @Id
  private long id;
  @Column(name = "name")
  private String name;
  @Column(name = "sex")
  private String sex;
  @Column(name = "age")
  private int age;


}

注意:此处必须指明@Table,@Id,@Column ,否则数据库不知道字段的对应关系

6. 新建Mapper基础接口类

import tk.mybatis.mapper.common.Mapper;

public interface BaseMapper<T> extends Mapper<T> {

}

注意:此处集成Mapper继承的接口为  tk.mybatis.mapper.common.Mapper;

7. 新建实体对应的Mapper接口类

import com.tudou.datagaeatkbatis.BaseMapper;
import com.tudou.datagaeatkbatis.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {

}

注意:此处@Mapper 注解的接口为 import org.apache.ibatis.annotations.Mapper, 和上面的 tk.mybatis.mapper.common.Mapper 不一样

7.1 新建UserMapper.xml (可选)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tudou.datagaeatkbatis.entity.User">
</mapper>

注意:此处namespace 必须对应到 entity的实体user类应用路径

8. 新建BaseService接口

import com.tudou.datagaeatkbatis.entity.User;
import java.util.List;

public interface BaseUserService {

  List<User> selectByEntity(User customer);

  int insertSelective(User customer);

  int updateSelectiveById(User record);
}

9. 新建UserBaseService接口

import com.tudou.datagaeatkbatis.entity.User;
import com.tudou.datagaeatkbatis.mapper.UserMapper;
import com.tudou.datagaeatkbatis.repo.BaseUserService;
import java.util.List;
import java.util.Objects;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria;

@Service
@Transactional
public class BaseUserServiceImpl implements BaseUserService {

  @Autowired
  private UserMapper customerMapper;

  @Override
  public List<User> selectByEntity(User customer) {
    if(Objects.isNull(customer)) {
      customer = new User();
    }
    Example example = new Example(User.class);
    Criteria criteria = example.createCriteria();
    criteria.andEqualTo(customer);
    return customerMapper.selectByExample(example);
  }

  @Override
  public int insertSelective(User customer) {
    return customerMapper.insertSelective(customer);
  }

  @Override
  public int updateSelectiveById(User record) {
    return customerMapper.updateByPrimaryKeySelective(record);
  }
}

注意:此处@Service, @Autowired 注解

9. 新建RestControler接口(也可以通过Test进行测试),此处通过Test进行测试

import com.tudou.datagaeatkbatis.entity.User;
import com.tudou.datagaeatkbatis.repo.BaseUserService;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DatagaeatkbatisApplicationTests {

  @Autowired
  private BaseUserService userRoleService;

  @Test
  void contextLoads() {
    User userRole = new User();
    int icount = userRoleService.insertSelective(userRole);
  }

}

注意:此处 @Autowired,@Test注解

10. 启动测试

 

到此为止,通过以上10步即可完成TKMybatis 的集成工作并且完成测试