今天通过一个案例来学习一下 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() { } 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; } @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
|
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=root
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 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 class SpringbootMybatis01ApplicationTests {
@Autowired private UserMapper userMapper;
@Test public void testListUser(){ List<User> userList = userMapper.list(); 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
| <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.*;
@Data @NoArgsConstructor @AllArgsConstructor
public class User { private Integer id; private String username; private String name; private Short age; private String gender; }
|
3.3 测试运行
运行测试类里面的测试方法,OK!成功查询出所有数据。