前言:
今天姐妹们对“springboot集成tkmybatis”都比较重视,大家都想要了解一些“springboot集成tkmybatis”的相关知识。那么小编也在网摘上搜集了一些有关“springboot集成tkmybatis””的相关文章,希望咱们能喜欢,朋友们一起来了解一下吧!一、初始tkMybatis
(1)简化sql语句,取消使用mapper.xml文件。
(2)方便统一管理,简化代码,取消臃肿的代码。
二、springboot集成tkMybatis步骤
(1)、引入TkMybatis的Maven依赖。
(2)、配置对应实体类(表对应的实体)。
(3)、Mapper集成tkMybatis的Mapper接口。
(4)、启动类注解@MapperScan扫描Mapper接口。
(5)、在application.yml配置文件,指定mapper.xml文件路径。(可省略)
(6)、使用TkMybatis提供的sql执行方法。
三、接入TkMybatis
(1)、导入maven
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.0</version></dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.0.3</version> </dependency>
(2)、表对应的实体类
package com.cloud.user.entity;import lombok.Builder;import lombok.Data;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;import java.io.Serializable;@Data@Builder/** * 表名称和实体类名驼峰名称一直时可以不适用@Table * 如:表面 user_info ---> 实体类 UserInfo */@Table(name = "user_info")public class UserInfo implements Serializable { /** * 表主键 @Id :表示该字段是表主键 * @GeneratedValue : 主键生成策略 * generator="jdbc" :会自动将主键id填充到实体类中.类似普通mapper.xml中配置的selectKey标签 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY,generator = "jdbc") private Long uid; private String account; private String password; private String salt; private Integer accountType; private Integer sex; private String phone;}
注:
1.1、@GeneratedValue:strategy主键生成策略。
1.1.1、GenerationType.TABLE:使用表生产主键,即使用另外一张表单独维护主键。使用如下:
@Table(name = "user_info")public class UserInfo implements Serializable { /** * 表主键 @Id :表示该字段是表主键 * @GeneratedValue : 主键生成策略 * strategy = GenerationType.TABLE : 自定义主键表,必须结合@TableGenerator使用 * TableGenerator : 主键表相关参数配置 */ @Id @GeneratedValue(strategy = GenerationType.TABLE,generator = "userSeq") @TableGenerator(name = "userSeq" ,allocationSize = 1,table = "user_seq_table",pkColumnName = "user_seq_id",valueColumnName = "seq_value") private Long uid;
1.1.2、GenerationType.SEQUENCE:序列化对象成主键,多用于不支持主键自增或者自动生成主键的数据库(Oracle)。使用如下:
@Table(name = "user_info")public class UserInfo implements Serializable { /** * 表主键 @Id :表示该字段是表主键 * @GeneratedValue : 主键生成策略 * strategy = GenerationType.SEQUENCE : 序列化生成主键,必须结合@SequenceGenerator使用 * SequenceGenerator : 序列化生成主键方式 */ @Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "userSeq") @SequenceGenerator(name = "userSeq" ,initialValue = 1,allocationSize = 1,sequenceName = "user_seq") private Long uid;
1.1.3、GenerationType.IDENTITY: 主键自增
@Table(name = "user_info")public class UserInfo implements Serializable { /** * 表主键 @Id :表示该字段是表主键 * strategy = GenerationType.IDENTITY : 主键自增 mysql 中的 auto_increment */ @Id @GeneratedValue(strategy =GenerationType.IDENTITY ) private Long uid;
1.1.4、GenerationType.AUTO:自动创建主键(以上三种策略任选一种)
@Table(name = "user_info")public class UserInfo implements Serializable { /** * 表主键 @Id :表示该字段是表主键 * strategy = GenerationType.AUTO : 主键生成策略交给持久化引擎自动处理, * 持久化引擎会根据数据库在以上三种生成策略中任选一个 */ @Id @GeneratedValue(strategy =GenerationType.AUTO ) private Long uid;
(3)、集成tkMybatis的Mapper接口
import com.cloud.user.entity.UserInfo;import tk.mybatis.mapper.common.Mapper;/** * 接入 tk-mybatis * */public interface UserInfoMapper extends Mapper<UserInfo> {}
(4)、启动类注解@MapperScan扫描Mapper接口
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.openfeign.EnableFeignClients;import tk.mybatis.spring.annotation.MapperScan;/** * * 2020-05-06 * */@EnableDiscoveryClient@EnableFeignClients@MapperScan(basePackages = {"com.cloud.user.mapper"})@SpringBootApplicationpublic class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); }}
(5)、在application.yml配置文件,指定mapper.xml文件路径。(可省略)
# mybatis mybatis: configLocation: classpath:mybatis-config.xml mapperLocations: classpath:mappers/*.xml
(6)、业务层调用
/** * 业务层 * 2020-05-06 * */public class UserInfoServiceImpl implements UserInfoService { @Autowired private UserInfoMapper userInfoMapper; @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class,timeout = 10) @Override public UserInfo getUserInfo(Long uid) { return userInfoMapper.selectByPrimaryKey(uid); }}
总结:
(1)接入比较方便,常见CRUD 都已经封装完成。接入即可使用。
(2)无需再去维护xml 。不需要关注sql的使用。
(3)提升开发效率。