今天通过一个案例来学习一下 SpringBoot整合 MyBatis,以及介绍一下 lombok工具。

一、整合

1、案例

以Mybatis查询所有用户数据为例。

1.1 准备

1)创建SpringBoot工程、数据库表user、实体类User


在数据库 db1下新建一个 tb_user表,并添加一些数据,查询该表数据如下。

建表对应的SQL语句如下

1
2
3
4
5
6
7
create table tb_user(
id int primary key auto_increment comment 'ID,唯一标识',
username varchar(20) not null unique comment '用户名',
name varchar(10) not null comment '姓名',
age int comment '年龄',
gender char(1) default '男' comment '性别'
) comment '用户表';

创建 User类(com.itweb.pojo.User)

注:以下代码除了属性需要手动进行封装外,其余直接右键用快捷方法生成。注意属性的类型要和数据库字段的类型对应,否则会报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.itweb.pojo;

public class User {
// 封装属性
private Integer id;
private String username;
private String name;
private Short age;
private String gender;
// 带全部参数的构造方法
public User(Integer id, String username, String name, Short age, String gender) {
this.id = id;
this.username = username;
this.name = name;
this.age = age;
this.gender = gender;
}
public User() { // 无参构造
}
// 提供对应的get和set方法
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 getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
// 提供对应的 toString方法
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}

2)引入Mybatis相关依赖(创建springboot工程时已经引入),配置Mybatis(数据库连接信息)–>在 application.properties配置文件中添加如下代码

1
2
3
4
5
6
7
8
9
# 配置数据库的连接信息-四要素
# 1.驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 2.数据库连接的url,这里数据库的名称要改为自己的
spring.datasource.url=jdbc:mysql://localhost:3306/db1
# 3.连接数据库的用户名
spring.datasource.username=root
# 4.连接数据库的密码,这里密码要改为自己的
spring.datasource.password=123456

3)编写SQL语句(注解/XML),这里使用注解
首先,创建一个 UserMapper接口(com.itweb.mapper.UserMapper)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.itweb.mapper;

import com.itweb.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper // 在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
public interface UserMapper {
// 查询全部用户信息
@Select("select * from tb_user")
public List<User> list();
}

1.2 测试

在 springboot整合单元测试的类中,编写测试方法进行测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.itweb;

import com.itweb.mapper.UserMapper;
import com.itweb.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest // springboot整合单元测试的注解
class SpringbootMybatis01ApplicationTests {

@Autowired
private UserMapper userMapper;

@Test
public void testListUser(){
List<User> userList = userMapper.list();
// 以 stream流的形式输出,遍历得到user
userList.stream().forEach(user ->{
System.out.println(user);
});
}
}

运行结果如下

注:控制台输出,出现中文乱码问题解决

点击 File ->Settings ->File Encodings,把编码格式都改为GBK,然后点击应用返回即可。重新运行测试类,发现控制台乱码问题已解决。

2、配置SQL提示

刚开始在mybatis中编写SQL语句是不会被IDEA识别的,这样当写错SQL时,不仅没有提示而且难以发现。可做如下配置让IDEA自动识别 mybatis中的SQL语句

并且如果IDEA没有与数据库建立连接的话,是不能识别表信息的。所以需要在IDEA中配置MySQL数据库连接,如下

完成上述两步后,再次在mybatis中编写SQL语句就能使用 IDEA强大的智能提示功能了,减少错误,提高效率。

二、lombok

1、引出

以上述创建 User实体类为例,除了属性需要手动进行封装外,其余可以直接右键用快捷方法生成。虽然也很快速,但是代码看起来非常冗长和臃肿。而使用 lombok就是一种更快速,更方便的方法。

2、lombok概述

Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。

主要注解如下,都是按名称来的,非常好理解和记忆。其中,@Data注解是使用频率较高的。

3、使用lombok

3.1 引入lombok依赖

在项目的pom.xml文件中添加如下lombok依赖

1
2
3
4
5
<!-- lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

3.2 改造 User实体类

删除之前快捷方法生成的get,set,toString,全参和无参构造方法,添加上相应的注解,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.itweb.pojo;

import lombok.*;

//@Getter
//@Setter
//@ToString
//@EqualsAndHashCode

@Data // 相当于上面4个
@NoArgsConstructor // 无参构造
@AllArgsConstructor // 全参构造

public class User {
// 封装属性
private Integer id;
private String username;
private String name;
private Short age;
private String gender;
}

3.3 测试运行

运行测试类里面的测试方法,OK!成功查询出所有数据。