沃梦达 / IT编程 / 数据库 / 正文

springboot2.3 整合mybatis-plus 高级功能(图文详解)

MyBatis-Plus 是一个 MyBatis 的增强工具,提供了许多实用且方便的功能,比如逆向工程、分页插件、自动填充等等。Spring Boot 2.3 是 Spring 家族中的一员,它提供了快捷而方便的开发方式。

Spring Boot 2.3 整合 Mybatis-Plus 高级功能

介绍

MyBatis-Plus 是一个 MyBatis 的增强工具,提供了许多实用且方便的功能,比如逆向工程、分页插件、自动填充等等。Spring Boot 2.3 是 Spring 家族中的一员,它提供了快捷而方便的开发方式。

本文将会讲解如何在 Spring Boot 2.3 中整合 Mybatis-Plus,以及如何使用 Mybatis-Plus 中的高级功能,例如分页插件和自动填充。

前置知识

在开始之前,我们先回顾一下一些必要的知识:

  • Spring Boot:快速构建 Spring 应用的一款框架。
  • MyBatis:一个优秀的持久层框架,支持自定义 SQL、存储过程等。
  • MyBatis-Plus:一个 MyBatis 的增强工具,提供了很多优秀实用的功能。

准备工作

我们需要准备以下环境:

  • JDK 8 或以上
  • Maven 3.0 或以上

项目搭建

首先,我们创建一个 Spring Boot 的项目。这里我们使用 Maven 构建。

在 pom.xml 中添加以下依赖:

<dependencies>
  <!-- Spring Boot 依赖 -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <!-- MyBatis 依赖 -->
  <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.1.3</version>
  </dependency>
  <!-- MyBatis-Plus 依赖 -->
  <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.4.0</version>
  </dependency>
  <!-- H2 数据库依赖 -->
  <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>1.4.200</version>
  </dependency>
</dependencies>

接着,我们需要创建一个 User 实体类:

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;

    // get/set 方法略
}

接下来,我们需要创建一个 UserMapper 接口:

public interface UserMapper extends BaseMapper<User> {
}

注意这里我们让 UserMapper 继承了一个 BaseMapper 类,这是 Mybatis-Plus 提供的一个接口,它包含了许多常用的 SQL 操作方法。

然后,我们需要在 application.yml 中配置 Mybatis 和 Mybatis-Plus:

spring:
  datasource:
    url: jdbc:h2:mem:test
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml

这里我们使用 In-Memory 数据库 H2。同时,我们指定了 Mybatis-Plus 的 Mapper 文件所在的路径。

分页插件

Mybatis-Plus 提供了一个优秀的分页插件,我们可以快捷地进行分页操作。

首先,我们需要在 UserMapper.java 中添加一个分页查询方法:

List<User> selectUserPage(Page<User> page, @Param("age") Integer age);

这里我们使用了 Mybatis-Plus 中的 Page 类,它表示分页相关的参数(当前页数、每页条数、总页数、总条数等)。

接下来,在 UserMapper.xml 中实现 selectUserPage 方法的 SQL:

<select id="selectUserPage" resultType="User">
    SELECT * FROM user
    WHERE age = #{age}
</select>

我们只查询年龄为指定数值的用户。

最后,在 UserService 中使用 selectUserPage 方法进行分页查询:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public IPage<User> selectUserPage(Page<User> page, Integer age) {
        return userMapper.selectUserPage(page, age);
    }
}

这里我们使用了 IPage 接口,它是 Mybatis-Plus 中的一个分页接口,实现了分页相关的方法,例如获取当前页码等。

下面是一个完整的分页查询示例:

@GetMapping("/users")
public IPage<User> selectUserPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                  @RequestParam(defaultValue = "10") Integer pageSize,
                                  @RequestParam(required = false) Integer age) {
    Page<User> page = new Page<>(pageNum, pageSize);
    return userService.selectUserPage(page, age);
}

这里我们使用了 @RequestParam 注解,方便接收客户端传来的请求参数。

自动填充

Mybatis-Plus 还提供了一个自动填充功能,它可以在插入或更新数据时自动填充某些字段,解放我们手动填充的工作量。

首先,我们需要一个自动填充的字段,例如创建时间和更新时间。我们可以在 User 实体类中添加两个字段:

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private Date createTime;
    private Date updateTime;

    // get/set 方法略
}

然后,我们需要创建一个自动填充的类,例如 UserMetaObjectHandler:

@Component
public class UserMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.fillStrategy(metaObject, "createTime", new Date());
        this.fillStrategy(metaObject, "updateTime", new Date());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.fillStrategy(metaObject, "updateTime", new Date());
    }
}

注意这里我们让 UserMetaObjectHandler 实现了 MetaObjectHandler 接口,这是 Mybatis-Plus 提供的一个接口,它包含了填充字段的方法。

接下来,我们需要在 UserMapper.java 中开启自动填充:

@Component
public interface UserMapper extends BaseMapper<User> {
}

在这里,我们使用了 @Component 注解,让 UserMapper 被 Spring 容器管理。

最后,在 UserService 中使用 UserMapper 进行插入或更新操作:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public int insertUser(User user) {
        return userMapper.insert(user);
    }

    public int updateUser(User user) {
        return userMapper.updateById(user);
    }
}

这里我们使用了 UserMapper 中提供的 insert 和 updateById 方法进行插入或更新操作。

下面是一个完整的自动填充示例:

@PostMapping("/users")
public int insertUser(@RequestBody User user) {
    return userService.insertUser(user);
}

@PutMapping("/users")
public int updateUser(@RequestBody User user) {
    return userService.updateUser(user);
}

这里我们使用了 @RequestBody 注解,方便接收客户端传来的 user 对象。

总结

至此,我们已经完成了 Spring Boot 2.3 集成 Mybatis-Plus 高级功能的攻略。在本文中,我们使用了两个 Mybatis-Plus 的高级功能,分别是分页插件和自动填充。希望能够对您有所帮助。

本文标题为:springboot2.3 整合mybatis-plus 高级功能(图文详解)