使用mybatis-plus实现分页查询

第一步,在maven中导入mybatis-plus依赖。

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.4.2</version>
</dependency>

第二步,在application.yml中添加如下配置:

mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID

第二步,创建mybatis-plus配置类并添加@Configuration注解,然后在MybatisPlusInterceptor拦截器对象中添加分页拦截器,返回对象并注入到bean容器中。
以下是具体代码:

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页查询拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

第三步,在controller层接收前端传来的分页信息,包括当前页号(page)、页大小(pageSize)、查询关键字(name)等。根据分页信息创建Page类对象和查询条件构造器LambdaQueryWrapper类对象,然后使用mybatis-plus提供的service层对象中的page(IPage<T> page, Wrapper<T> queryWrapper)方法,该方法会将查询结果赋值给传入的第一个参数page对象,之后我们就可以直接给前端返回查询结果pageInfo对象。
下面来看代码:

@GetMapping("/page")
    public R<Page> page(int page, int pageSize, String name) {
        log.info("page: {}, pageSize: {}, name: {}", page,pageSize,name);
        // 创建Page类对象
        Page<Employee> pageInfo = new Page(page, pageSize);
        // 创建查询条件构造器LambdaQueryWrapper类对象
        LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
		// 根据条件查询
        queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName, name);

        queryWrapper.orderByDesc(Employee::getUpdateTime);
        // 查询结果返回到pageInfo中的records属性中
        employeeService.page(pageInfo, queryWrapper);
        // 返回查询结果pageInfo对象给前端
        return R.success(pageInfo);
    }

这里我们需要注意一下为什么可以直接返回pageInfo这个对象作为结果,我们来查看Page类中的属性以及service层的page方法:

Page类:

public class Page<T> implements IPage<T> {
    private static final long serialVersionUID = 8545996863226528798L;
    protected List<T> records;		// 查询结果
    protected long total;			// 总页数
    protected long size;			// 页大小
    protected long current;			 // 当前页
    protected List<OrderItem> orders;
    protected boolean optimizeCountSql;
    protected boolean isSearchCount;
    protected boolean hitCount;
    protected String countId;
    protected Long maxLimit;
}

当执行完service层的page方法后会将查询结果封装到Page类对象中的records属性中。

下面看一下service层page方法是如何实现该操作的:
service层的page方法将调用mapper层的selectPage方法,并且将查询结果封装到IPage对象中返回。
以下是selectPage方法法定义:

IPage<T> selectPage(IPage<T> page, @Nullable Wrapper<T> queryWrapper);

其中,IPage 是 Mybatis-Plus 提供的分页对象接口,T 表示实体类类型,page 参数是分页对象,queryWrapper 参数是查询条件。
调用 selectPage 方法时,需要传入一个分页对象,该对象包含了分页信息(当前页码、每页显示数量等)以及查询结果。同时,还可以传入一个查询条件,用于过滤查询结果。
在执行 selectPage 方法时,Mybatis-Plus 会根据传入的分页对象进行分页查询,并将查询结果封装到分页对象中返回。具体的 SQL 查询语句由 Mybatis-Plus 自动生成,无需手动编写。

以上就是使用mybatis-plus实现分页查询的步骤,实际上我们只需配置分页拦截器并提供分页信息及查询条件,剩下的SQL操作都由mybatis-plus框架帮我们实现好了。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus是一个基于MyBatis的增强工具,提供了许多便捷的功能来简化开发。其中,MyBatis-Plus-join是MyBatis-Plus的一个扩展模块,用于支持关联查询。 在使用MyBatis-join的依赖。可以在项目的pom.xml文件中添加如下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.4.3.1</version> </dependency> ``` 2. 在实体类中定义关联关系。使用MyBatis-Plus-join时,需要在实体类中定义关联关系,可以使用`@TableField`注解来指定关联字段。例如: ```java public class User { private Long id; private String name; @TableField(exist = false) private List<Role> roles; // getter and setter } public class Role { private Long id; private String roleName; // getter and setter } ``` 3. 编写Mapper接口。在Mapper接口中,可以使用`@Select`注解来编写关联查询的SQL语句。例如: ```java @Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT u.*, r.* FROM user u LEFT JOIN user_role ur ON u.id = ur.user_id LEFT JOIN role r ON ur.role_id = r.id") @Results({ @Result(property = "id", column = "id"), @Result(property = "name", column = "name"), @Result(property = "roles", column = "id", many = @Many(select = "com.example.mapper.RoleMapper.selectByUserId")) }) List<User> selectUserWithRoles(Page<User> page); } ``` 4. 编写关联查询的子查询。在上面的例子中,使用了`@Many`注解来指定关联查询的子查询方法。例如: ```java @Mapper public interface RoleMapper extends BaseMapper<Role> { @Select("SELECT r.* FROM role r LEFT JOIN user_role ur ON r.id = ur.role_id WHERE ur.user_id = #{userId}") List<Role> selectByUserId(Long userId); } ``` 5. 调用分页查询方法。在Service层或者Controller层中,可以调用Mapper接口中定义的分页查询方法来进行查询。例如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> getUserWithRoles(Page<User> page) { return userMapper.selectUserWithRoles(page); } } ``` 以上就是使用MyBatis-Plus-join进行分页查询的基本步骤。通过定义关联关系和编写关联查询的SQL语句,可以方便地进行关联查询并实现分页功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值