本文主要介绍 SpringBoot 整合 MyBatis-Plus 的方法,对其中容易出现的问题进行记录
MyBatis-Plus 官网介绍文档地址:https://baomidou.com/
1. 下载 MyBatisX 插件
MyBatisX 能让我们更轻松的使用 MyBatis,如实现 Mapper 快速跳转 SQL 映射文件 等功能。
下载方法: 在 File - Settings - Plugins 搜索 MyBatisX 安装即可
2. 创建数据库表并添加几条字段
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
附录:通过 Navicat 设置主键自动递增方法
1. 引入 mybatis-plus-boot-starter
依赖
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.1version>
dependency>
依赖分析:mybatis-plus-boot-starter 帮助我们引入了 jdbc 包、MyBatis 包,因此这两个包都不用单独引入了。
自动配置分析:
mybatis-plus
classpath*:/mapper/**/*.xml
。表示任意包的类路径下的 mapper 文件夹下的任意路径下的 xml 文件都解析为 SQL 映射文件。总结: Mybatis-Plus 将所有我们需要的一切都配置好了,我们只要开发就行了
2. 配置数据源
spring:
datasource: # 配置数据库属性
url: jdbc:mysql://localhost:3306/practice
username: root
password: 5201314love
driver-class-name: com.mysql.jdbc.Driver
3. 在 SpringBoot 启动类中添加 @MapperScan
注释
`@MapperScan 用于扫描 Mapper 接口所在文件夹,其实现批量扫描,省的每个接口都需要写 @Mapper 注释
@SpringBootApplication
@MapperScan("com.wanqing.admin.mapper") // 接口上上不需要标注 Mapper
public class DemoAdminApplication {
public static void main(String[] args) {
SpringApplication.run(DemoAdminApplication.class, args);
}
}
4. 准备 User 类
@Data // Lombok 简化开发
public class User {
@TableField(exist = false)
private String userName;
@TableField(exist = false)
private String password;
private Long id;
private String name;
private Integer age;
private String email;
}
注: MyBatis-Plus 要求操作实体类的每条属性都要在数据库中存在,对数据库中不存在的临时属性,要通过 @TableField(exist = false)
注释。
5. 编写 Mapper 接口
接口需要继承MyBatis-Plus 提供的 BaseMapper 类, BaseMapper 类为我们提供了基础的增删改查功能 (crud) ,使得我们不需要书写 SQL 映射 xml 文件,不需要再编写 sql 语句,除非我们要实现的操作数据库功能特别复杂。
public interface UserMapper extends BaseMapper<User> {
}
BaseMapper为我们提供了大部分的数据库操作方法,如下:
6. 测试是否整合成功
在 SpringBoot 为我们提供的自动测试类中,添加如下方法,测试通过指定 id 查找用户信息:
@Autowired // 自动注入 userMapper
UserMapper userMapper;
@Test
void testUserMapper(){
User user = userMapper.selectById(1L);
log.info("用户信息: {}", user);
}