mybatis批量数据分页查询

简介: mybatis批量数据分页查询

当数据量很大时,我们需要按照分页处理,介绍接种分页方法

@Service
public class Demo {
    @Autowired
    private UserMapper userMapper;
 
 
    /**
     * 方法1:原始mysql limit分页
     *  currentPage:当前页
     *  pageSize:每页记录数
     *  sql: select * from student limit(currentPage-1)*pageSize,pageSize;
     */
    public void service1(){
        int currentPage = 1;
        int pageSize = 10;
        List<User> list ;
        do{
            list = userMapper.selectPage((currentPage-1)*pageSize,pageSize);
            currentPage++;
            handleList(list);
        }while (list.size() == pageSize);
    }
 
    /**方法2:
     * 当查询的表唯一列,并且此列有大小顺序的
     * 利用此列查询
     */
    public void service2(){
        int id = 0;
        int pageSize = 10;
        List<User> list;
        do{
            list = userMapper.getPage(id, pageSize);
            if(list.size() >0){
                id = list.get(list.size()-1).getId();
                handleList(list);
            }
        }while (list.size() == pageSize);
    }
 
 
    /**
     *方法3:
     * 使用mybatis提供的 ResultContext 流处理
     * 注:此方法并不是分页查询,只是讲一次查询的数据逐条处理
     */
    public void service3(){
        final List<User> list = new ArrayList<>();
        userMapper.queryIncreaseFetch(resultContext->{
            // 这里查询出来多条数据
            list.add(resultContext.getResultObject());
            if(list.size()==3){
                handleList(list);
                list.clear();
            }
        });
        if(list.size() > 0){
            handleList(list);
        }
    }
    
    //业务模拟
    public void handleList( List<User> users){
        // 业务处理 可以结合多线程处理
        users.forEach(System.out::println);
    }
}
@Mapper
public interface UserMapper {
 
    void queryIncreaseFetch(ResultHandler<User> userResultHandler);
 
    List<User>  getPage(@Param("id")int id, @Param("pageSize")int pageSize);
 
    List<User> selectPage(@Param("currentPage") int currentPage,@Param("pageSize") int pageSize);
}

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.test.springboottest.dao.UserMapper">
    <select id="queryIncreaseFetch" resultType="com.test.springboottest.entity.User">
        select * from device_info limit 10
    </select>
    <select id="getPage" resultType="com.test.springboottest.entity.User">
        select *
        from device_info
        where id > #{id}
        order by id
        limit #{pageSize}
    </select>
    <select id="selectPage" resultType="com.test.springboottest.entity.User">
        select * from device_info limit #{currentPage},#{pageSize};
    </select>
</mapper>

除了上面几种方法外,可以使用 pagehelper 插件



相关文章
|
2月前
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
135 8
|
19天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
36 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
7天前
|
SQL Java 数据库连接
mybatis如何实现分页查询?
【10月更文挑战第19天】mybatis如何实现分页查询?
29 3
|
3月前
|
Java 数据库连接 测试技术
SpringBoot 3.3.2 + ShardingSphere 5.5 + Mybatis-plus:轻松搞定数据加解密,支持字段级!
【8月更文挑战第30天】在数据驱动的时代,数据的安全性显得尤为重要。特别是在涉及用户隐私或敏感信息的应用中,如何确保数据在存储和传输过程中的安全性成为了开发者必须面对的问题。今天,我们将围绕SpringBoot 3.3.2、ShardingSphere 5.5以及Mybatis-plus的组合,探讨如何轻松实现数据的字段级加解密,为数据安全保驾护航。
209 1
|
3月前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
3月前
|
SQL Java 关系型数据库
MyBatis-Plus 分页魅力绽放!紧跟技术热点,带你领略数据分页的高效与便捷
【8月更文挑战第29天】在 Java 开发中,数据处理至关重要,尤其在大量数据查询与展示时,分页功能尤为重要。MyBatis-Plus 作为一款强大的持久层框架,提供了便捷高效的分页解决方案。通过封装数据库分页查询语句,开发者能轻松实现分页功能。在实际应用中,只需创建 `Page` 对象并设置页码和每页条数,再通过 `QueryWrapper` 构建查询条件,调用 `selectPage` 方法即可完成分页查询。MyBatis-Plus 不仅生成分页 SQL 语句,还自动处理参数合法性检查,并支持条件查询和排序等功能,极大地提升了系统性能和稳定性。
50 0
|
3月前
|
存储 SQL Java
MyBatis batchInsert 批量插入数据
MyBatis batchInsert 批量插入数据
67 0
|
3月前
|
前端开发 JavaScript Java
解决springboot+vue+mybatis中,将后台数据分页显示在前台,并且根据页码自动跳转对应页码信息
该博客文章讲述了如何在Spring Boot + Vue + MyBatis的项目中实现后台数据的分页查询,并在前端进行显示和页码跳转,包括后端的分页查询实现、前端与后端的交互以及使用Element UI进行分页展示的方法。
|
4月前
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
|
5月前
|
Java 关系型数据库 MySQL
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
47 4