欢迎访问宙启技术站
智能推送

SpringBoot怎样整合mybatis-plus进阶的详解教程

发布时间:2023-05-14 04:23:39

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提供了很多强大的功能,可以大大提高开发效率,让开发人员可以更快地完成项目开发。