文章目录
前言
本篇记录学习SpringBoot时,引入tk-mybatis(通用mybatis)的学习经验提示:以下是本篇文章正文内容,下面案例可供参考
一、整合tk-mybatis
1.1 启动器
tk_mybatis也是需要手动导入启动器坐标,然后再配置文件中配置Bean别名和映射配置文件的路径就可以使用了
<!-- tk-mybatis启动器坐标 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
# 别名
mybatis.type-aliases-package=com.kaikeba.entity
# 映射配置文件
mybatis.mapper-locations=com.kaikeba.mapper/*.xml
1.2 常用注解
1.2.1 @Table
@Table() 作用在实体类上,用来绑定java类和数据库表的关系,若是类名与数据库表明不一致,课使用name属性,指定数据库表名,
1.2.2 @Id
@Id指定是否是主键列
1.2.3 @GeneratedValue
@GeneratedValue字段的生成方式,如
自增长(GenerationType.IDENTITY)、
序列(GenerationType.SEQUENCE)、
特定表格存储(GenerationType.TABLE)
或者持久层引擎根据特性在前三种方式中选择一种生成(GenerationType.AUTO);
GenerationType.AUTO 是默认的方式,若是这种方式,就可以写成@GeneratedValue(strategy = GenerationType.AUTO)也可以直接@GeneratedValue
1.2.4 @Column
@Column绑定ava类中的属性与数据库表中的字段,若是属性名与字段名称不一致,课通过name属性指定。
1.2.5 @Transient
注释字段,表示该属性不与数据库字段绑定;
1.3 注意项
1.3.1 Mapper接口
tk-mybatis的Mapper接口需要在使用Mybatis中的@Mapper注解的同时,继承tk-mybatis中的的Mapper
@Mapper注解 是为了向SpringBoot中注册接口
继承tk-mybatis的Mapper接口是为了获取其中增强的相关能力
1.3.3 启动类
启动类同时同时要添加tkmybatis的@MapperScan注解;扫描tk-mybatis的接口
1.3.4 内置方法
继承 tk-mybatis 的Mapper之后,或得到其中的已经封装好的一些方法如selectAll(),selectByPrimaryKey()等,这里不做介绍,我们如果是使用这些方法,可以不用书写对应的映射配置文件,若是有自定义的sql语句,则再添加映射配置文件。
PS: 自定义的方法不能和tk-mybatis中的内置方法冲突。
二、使用步骤
1 pom文件坐标
在pom文件中引入所需要的依赖做标;
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kaikeba</groupId>
<artifactId>sb-tk-mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.3.11.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!-- tk-mybatis 非官方提供 手动控制版本 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
</dependencies>
</project>
2 配置文件
application.properties配置文件内容
server.port=8080
logging.level.com.kaikeba=debug
# 数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot-jdbc?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=root
# 别名
mybatis.type-aliases-package=com.kaikeba.entity
# 映射配置文件
mybatis.mapper-locations=com.kaikeba.mapper/*.xml
3 实体类User.java
package com.kaikeba.entity;
import javax.persistence.*;
import java.util.Date;
/**
* @author sunyang
* @date 2021/5/28 13:41
*/
@Table(name = "tbs_user")
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "user_name")
private String userName;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private Date created;
private Date updated;
private String note;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getUpdated() {
return updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
", birthday=" + birthday +
", created=" + created +
", updated=" + updated +
", note='" + note + '\'' +
'}';
}
}
4 接口UserMapper.java
package com.kaikeba.mapper;
import com.kaikeba.entity.Users;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author sunyang
* @date 2021/5/28 13:44
*/
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<Users> {
List<Users> findByParam(Users users);
}
5 SQL文件
<?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.kaikeba.mapper.UserMapper">
<select id="findByParam" resultType="Users">
<include refid="selectSql"></include>
<where>
<if test="name != null">
name like '%${name}%'
</if>
<if test="note != null">
and note like '%${note}%'
</if>
</where>
</select>
<sql id="selectSql">
select
id,
user_name as userName,
password,
name,
age,
sex,
birthday,
created,
updated,
note
from tbs_user
</sql>
</mapper>
6 启动类
package com.kaikeba;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
/**
* @author sunyang
* @date 2021/5/28 13:36
*/
@SpringBootApplication
@MapperScan("com.kaikeba.mapper")
public class TkMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(TkMybatisApplication.class);
}
}
7 测试方法UserMapperTest.java
package com.kaikeba;
import com.kaikeba.entity.Users;
import com.kaikeba.mapper.UserMapper;
import org.apache.catalina.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Resource
private UserMapper userMapper;
/**
* tk-mybatis内置方法
*/
@Test
public void findAll() {
userMapper.selectAll().stream().forEach(user -> System.out.println(user));
}
@Test
public void findById() {
Users byId = userMapper.selectByPrimaryKey(1);
System.out.println(byId);
}
/**
* 自定义方法
*/
@Test
public void findByParam() {
Users users = new Users();
users.setName("a");
List<Users> userss = userMapper.findByParam(users);
userss.stream().forEach(users1 -> System.out.println(users1));
}
}
8 测试结果
findAll
findById
自定义的findByParam