记mybatis分页开启未关闭,数据丢失问题

写代码,真是个耗时间的活,尤其在出现bug的时候,简直了,找不到问题,问了百度,问谷歌,最后知道真相以后,发现自己给自己挖的坑,自己跳到坑里,就是找不到坑在拿,身在其中不知其意,记录一下。
在这里插入图片描述
PageHelper.startPage();这个方法说的是我要开始分页了哈,全部数据听我号令,没错,这个东东就是干这个的,并且还很挑位置,他就喜欢在最开始的位置,你放错位置你的结果就不是你想要的了,我要说的重点是假如你确定要使用这个方法了,那就善始善终,用完它,不然的话,哼哼,你会发现你代码里所有的查询方法都会出现问题,不管是有分页还是没分页,都会出现数据要么正常,要么就少了,然后就和我一样,还不知道哪里出问题了,心累

划重点:在你使用PageHelper.startPage(),但是在执行完.startPage()后,没有查询数据库操作,并且此次查询请求响应结束,线程空闲时,又有新的别的查询请求进来,此时线程复用,myBaits通过自身的拦截器拦截,导致给新的查询自动添加了Limit?,?,从而报错,没错就是这个问题,用我的话说就是,你既然选择我了,就要对我有始有终,不然后果自负。

当然我们都是对待人和事物有始有终的好男儿,出现这种问题是因为想用人家myBaits的分页功能,还要自己去实现,问题就出现了,想要自己去分页,不使用PageHelper.startPage(),我们自己去分,我自己封装了分页工具类,拿去。

  /**
     * 分页
     *
     * @param pageSize 当前页面大小
     * @param pageNo   当前页码
     * @param list     需要分页的集合
     * @param page
     * @return
     */
    public static List<Map<String, Object>> subListPager(int pageSize, int pageNo, List list, PageBean page)
            throws IndexOutOfBoundsException {
        // 使用list 中的sublist方法分页
        List<Map<String, Object>> dataList = null;
        // 每页显示多少条记录
        int currentPage; // 当前第几页数据
        int totalRecord = list.size(); // 一共多少条记录
        int totalPage = totalRecord % pageSize; // 一共多少页
        if (totalPage > 0) {
            totalPage = totalRecord / pageSize + 1;
        } else {
            totalPage = totalRecord / pageSize;
        }
        page.setTotalPage(totalPage);
        // 当前第几页数据
        currentPage = totalPage < pageNo ? pageNo : totalPage;
        // 起始索引
        int fromIndex = pageSize * (currentPage - 1);
        // 结束索引
        int toIndex = pageSize * currentPage > totalRecord ? totalRecord : pageSize * currentPage;
        if (fromIndex == 0 && toIndex == 0) {
            return dataList;
        }
        try {
            dataList = list.subList(fromIndex, toIndex);
        } catch (IndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        return dataList;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis是一个Java持久层框架,可以与关系数据库进行交互。在MyBatis中实现分页功能可以通过使用其提供的分页插件来实现。 以下是使用MyBatis分页的步骤: 1. 添加MyBatis分页插件依赖:在项目的pom.xml文件中添加以下依赖(以Maven为例): ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>版本号</version> </dependency> ``` 2. 在MyBatis的配置文件中配置分页插件:在mybatis-config.xml文件中添加以下配置: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 其他配置参数 --> </plugin> </plugins> ``` 3. 在需要进行分页查询的Mapper接口中添加相应的方法:例如,假设有一个UserMapper接口,可以在该接口中添加一个带有分页参数的查询方法。 ```java List<User> getUsersByPage(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize); ``` 4. 在对应的Mapper XML文件中实现分页查询:使用PageHelper.startPage方法设置分页参数,并在查询语句中使用PageHelper提供的插件语法来实现分页查询。 ```xml <select id="getUsersByPage" resultType="User"> <!-- 设置分页参数 --> <script> SELECT * FROM users WHERE 1=1 <if test="pageNum != null and pageSize != null"> LIMIT #{pageNum}, #{pageSize} </if> </script> </select> ``` 在上述示例中,使用了PageHelper.startPage方法设置了分页参数,然后在查询语句中使用了PageHelper提供的插件语法来实现分页查询。 这是一个简单的使用MyBatis实现分页的示例,你可以根据实际需求进行调整和扩展。希望对你有所帮助!如有更多问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭优秀的笔记

你的支持就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值