前面我们讲了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 的集成工作并且完成测试