程序员子龙(Java面试 + Java学习) 程序员子龙(Java面试 + Java学习)
首页
学习指南
工具
开源项目
技术书籍

程序员子龙

Java 开发从业者
首页
学习指南
工具
开源项目
技术书籍
  • 基础

  • JVM

  • Spring

  • 并发编程

  • Mybatis

    • mybatis-plus超详细讲解
    • MyBatis-Plus 流式查询
    • MyBatis-Plus 分页查询以及自定义sql分页
      • 配置分页查询
      • 默认分页方式
      • 自定义分页查询
      • 多表分页查询
    • 使用mybatis逆向生成项目
    • SpringBoot整合Mybatis-plus
    • SpringBoot 集成 mybatis-plus,报:Invalid bound statement (not found) 异常,详细解决方案
    • Springboot、MyBatis-Plus 多数据源支持
    • Mybatis Plus官方分库分表神器,一个依赖轻松搞定!
    • MyBatis 动态 SQL 最全教程,这样写 SQL 太优雅了!
  • 网络编程

  • 数据库

  • 缓存

  • 设计模式

  • 分布式

  • 高并发

  • SpringBoot

  • SpringCloudAlibaba

  • Nginx

  • 面试

  • 生产问题

  • 系统设计

  • 消息中间件

  • Java
  • Mybatis
xugaoyi
2024-01-29
目录

MyBatis-Plus 分页查询以及自定义sql分页

# 配置分页查询

@Configuration
public class MybatisPlusConfig {

    /**
     * 分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        paginationInnerInterceptor.setOverflow(true);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }


}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 默认分页方式

    /**
     * 根据 entity 条件,查询全部记录(并翻页)
     *
     * @param page         分页查询条件(可以为 RowBounds.DEFAULT)
     * @param queryWrapper 实体对象封装操作类(可以为 null)
     */
    IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
 
    /**
     * 根据 Wrapper 条件,查询全部记录(并翻页)
     *
     * @param page         分页查询条件
     * @param queryWrapper 实体对象封装操作类
     */
    IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

方法调用:

Page<User> page = new Page<>(1,2);
IPage<User> userIPage = userMapper.selectPage(page, wrapper);
System.out.println("总页数"+userIPage.getPages());
System.out.println("总记录数"+userIPage.getTotal());
1
2
3
4

分页查询执行sql如下,先是查询了一次总记录数,然后在查询的数据。执行结果:

[ main] c.d.m.UserMapper.selectPage_mpCount : ==> Preparing: SELECT COUNT(*) AS total FROM users [ main] c.d.m.UserMapper.selectPage_mpCount : ==> Parameters: [ main] c.d.m.UserMapper.selectPage_mpCount : <== Total: 1 [ main] com.demo.mapper.UserMapper.selectPage : ==> Preparing: SELECT id,user_name,pass_word,nick_name,user_sex FROM users LIMIT ? [ main] com.demo.mapper.UserMapper.selectPage : ==> Parameters: 2(Long) [ main] com.demo.mapper.UserMapper.selectPage : <== Total: 2

# 自定义分页查询

多表查询需要我们自己写sql来进行分页查询。

定义分页查询接口

@Mapper
public interface UserMapper extends BaseMapper<User> {

 IPage<User> selectPageVo(IPage<User> page, @Param(Constants.WRAPPER) Wrapper<User> queryWrapper);

}
1
2
3
4
5
6

定义查询语句

<mapper namespace="com.demo.mapper.UserMapper">

    <select id="selectPageVo" resultType="com.demo.domain.User">
        SELECT id FROM users  ${ew.customSqlSegment}
    </select>

</mapper>
1
2
3
4
5
6
7

方法调用:

 LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>();
 IPage<User> page = new Page<>(1,10);
 userMapper.selectPageVo(page,wrapper);
1
2
3

# 多表分页查询

多表联合查询和单表查询都是一样的

IPage<User> selectUserInfoList(IPage<User> page);
1
<select id="selectUserInfoList" resultType="com.demo.domain.User">

    SELECT * from users u ,account c where u.user_name = c.`name`
</select>
1
2
3
4
上次更新: 2024/01/30, 15:08:57
MyBatis-Plus 流式查询
使用mybatis逆向生成项目

← MyBatis-Plus 流式查询 使用mybatis逆向生成项目→

最近更新
01
一个注解,优雅的实现接口幂等性
11-17
02
MySQL事务(超详细!!!)
10-14
03
阿里二面:Kafka中如何保证消息的顺序性?这周被问到两次了
10-09
更多文章>
Theme by Vdoing | Copyright © 2024-2024

    辽ICP备2023001503号-2

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式