SpringBoot怎样整合mybatis-plus进阶的详解教程
SpringBoot是目前非常流行的一款Java开发框架,在开发过程中,数据库操作占据了非常重要的位置。而MyBatis-Plus是一个优秀的ORM框架,集成了MyBatis的所有特性,并提供了很多增强功能,能够大大提高开发效率。本文将介绍如何在SpringBoot项目中整合MyBatis-Plus并进行进阶操作。
一、搭建SpringBoot项目
在开始整合MyBatis-Plus之前,需要先搭建一个SpringBoot的项目。可以使用Spring Initializr来快速生成一个空的SpringBoot项目,也可以手动创建一个SpringBoot项目。
二、添加MyBatis-Plus依赖
在pom.xml文件中添加MyBatis-Plus的依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
三、配置MyBatis-Plus
在SpringBoot项目中,可以使用application.yml或application.properties文件来配置MyBatis-Plus。以下是一个示例配置:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
# MyBatis-Plus配置
mybatis-plus:
# mapper文件路径
mapper-locations: classpath:/mapper/**/*.xml
# 打印SQL
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
在这个配置中,要配置数据源,包括数据库的驱动、连接地址、用户名、密码等信息。然后配置MyBatis-Plus的一些属性,比如Mapper文件的加载路径、SQL的打印等。
四、创建实体类
在使用MyBatis-Plus进行数据操作时,需要先定义实体类。这里我们以一个user表为例,创建一个User实体类:
public class User {
private Long id;
private String name;
private Integer age;
private String email;
// getter、setter、toString
}
该实体类中的属性名必须与user表中的字段名一致,否则需要在Mapper文件中进行映射。
五、创建Mapper接口
在使用MyBatis-Plus进行数据操作时,需要创建一个Mapper接口。这里我们需要继承BaseMapper接口,然后就可以使用MyBatis-Plus提供的大量方法,比如insert、select、update、delete等。以下是一个UserMapper接口的示例:
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
其中,@Mapper注解用来指定该接口是一个Mapper接口。
六、测试MyBatis-Plus
完成前面的步骤之后,就可以测试MyBatis-Plus是否正常工作了。以下是一个测试示例:
@Autowired
private UserMapper userMapper;
@Test
public void testMyBatisPlus() {
User user = new User();
user.setName("test");
user.setAge(20);
user.setEmail("test@test.com");
userMapper.insert(user);
System.out.println("插入成功:" + user.toString());
User user2 = userMapper.selectById(user.getId());
System.out.println("查询成功:" + user2.toString());
}
该测试示例中,使用@Autowired注解注入了UserMapper接口,在方法中通过UserMapper接口使用MyBatis-Plus提供的insert和selectById方法来进行数据操作。
七、进阶操作
除了基础的增删改查操作,MyBatis-Plus还提供了很多强大的功能,以下是几个进阶操作的示例:
1. 分页查询
MyBatis-Plus提供了一个Page类来实现分页功能。以下是一个分页查询的示例:
Page<User> page = new Page<>(1, 2);
IPage<User> userIPage = userMapper.selectPage(page, null);
System.out.println("总页数:" + userIPage.getTotal());
System.out.println("每页显示记录数:" + userIPage.getSize());
System.out.println("当前页码:" + userIPage.getCurrent());
System.out.println("数据列表:" + userIPage.getRecords());
2. 逻辑删除
MyBatis-Plus提供了逻辑删除的功能,只需要在实体类中添加@TableLogic注解和对应的字段即可。以下是一个示例:
@TableLogic private Integer deleted;
然后在进行数据删除时,MyBatis-Plus会自动将该字段赋值为1。
3. 乐观锁
MyBatis-Plus提供了乐观锁的功能,只需要在实体类中添加@Version注解和对应的字段即可。以下是一个示例:
@Version private Integer version;
在进行数据更新时,MyBatis-Plus会在SQL的where条件中自动加上对应字段的验证。如果更新失败,则会抛出OptimisticLockingException异常。
4. 自动填充
MyBatis-Plus提供了自动填充的功能,可以在实体类中添加@TableField注解和对应的字段,并在配置中指定对应的处理类。以下是一个示例:
@TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;
在配置中添加相应的处理类:
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 注册自动填充处理器
List<ISqlParser> sqlParserList = new ArrayList<>();
sqlParserList.add(new CustomMetaObjectHandler());
interceptor.addInnerInterceptor(new MetaObjectHandlerInterceptor(sqlParserList));
return interceptor;
}
}
public class CustomMetaObjectHandler extends DefaultMetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
这里采用了自定义的处理类CustomMetaObjectHandler,来实现对createTime和updateTime字段自动填充。
八、总结
本文介绍了如何在SpringBoot项目中整合MyBatis-Plus,并完成了基础的增删改查操作。同时,还介绍了一些MyBatis-Plus的进阶操作,比如分页查询、逻辑删除、乐观锁和自动填充等。MyBatis-Plus提供了很多强大的功能,可以大大提高开发效率,让开发人员可以更快地完成项目开发。
