您好、欢迎来到现金彩票网!
当前位置:打鱼棋牌游戏平台 > 物理分页 >

mybais分页

发布时间:2019-07-31 06:59 来源:未知 编辑:admin

  我在最近的项目中开发了这个通用分页器,过程中参考了站内不少好文章,新年第一天,特此发文回馈网站。

  项目框架是 SpringMVC+Mybatis, 需求是想采用自定义的分页标签,同时,要尽量少的影响业务程序开发的。

  如果你已经使用了JS框架( 如:Ext,EasyUi等)自带的分页机能,是属于前端分页,不在本文讨论范围。

  (如果需要用在其他数据库可参考 paginator的Dialect部分,改动都不大)

  首先是Page类,比较简单,保存分页相关的所有信息,涉及到分页算法。虽然“其貌不扬”,但很重要。后面会看到这个page类对象会以“信使”的身份出现在全部与分页相关的地方。

  然后是最核心的了。涉及到了mybatis的核心功能,期间阅读大量mybatis源码几经修改重构,辛苦自不必说。

  核心思想是将拦截到的select语句,改装成select count(*)语句,执行之得到,总数据数。再根据page中的当前页号算出limit值,拼接到select语句后。

  首先是后台代码的修改,Controller层由于涉及到查询条件,需要修改的内容较多。

  4)Service层的方法需要带着page这个对象(最终目的是传递到sql执行的入参,让识别出该sql需要分页,同时传递页号)

  注意pageSize的缺省值决定该分页的每页数据行数 ,实际项目更通用的方式是使用配置文件指定。

  如果使用Bean需要在里面增加一个page项目,Map则比较简单,以下是例子。

  顺便提一下,例子中没有涉及参数是Bean的情况,实际应用中应该比较常见。简单的方法是将Bean转换层Map后加入到params。

  回答:利用Mybatis提供了 Interceptor 接口,拦截后改头换面去的件数并计算limit值,自然能神不知鬼不觉。

  回答:这个自认为本方案做的还不够好,主要是Controller层改造上,感觉代码量还比较大。如果有有识者知道更好的方案还请多指教。

  1)一个“明显”的性能问题,是每次检索前都要去 select count(*)一次。在很多时候(数据变化不是特别敏感的场景)是不必要的。调整也不难,先Controller参数增加一个 totalRecord 总记录数 ,在稍加修改一下Page相关代码即可。

  2)要排序怎么办?本文并未讨论排序,但是方法是类似的。以上面代码为基础,可以较容易地实现一个通用的排序标签。

  对于Controller层需要将入参传入Page对象的问题已经进行了改善,思路是自动从HttpServletRequest 类中提取入残,减低了分页代码的侵入性,详细参看文章

  再次改善,使用ThreadLocal类封装Page对象,让Service层等无需传Page对象,减小了侵入性。也省去了查找Page对象的动作,性能也同时改善。整体代码改动不大。

  今天比较闲,顺便聊下这个分页的最终版,当然从来只有不断变化的需求,没有完美的方案,这里所说的最终版其实是一个优化后的“零侵入”的方案。为避免代码混乱还是只介绍思路。在上一个版本(1/23版)基础上有两点改动:

  一是增加一个配置文件,按Url 配置初始的每页行数。如下面这样(pagesize 指的是每页行数):

  二是增加一个过滤器,并将剩下的位于Control类中 唯一侵入性的分页相关代码移入过滤器。发现当前的 Url 在配置文件中有匹配是就构造Page对象,并加入到Response中。

  使用最终版后,对于开发者需要分页时,只要在配置文件中加一行,并在前端页面上加一个分页标签即可,其他代码,SQL等都不需要任何改动,可以说简化到了极限。

  时下比较成熟的 JPA 的分页方案,(主要应用在 Hibernate + Spring Data 的场合),主要切入点在DAO层,而Controller等各层接口依然需要带着pageNumber,pageSize 这些的参数,另外框架开发者还要掌握一些必须的辅助类,如:

  比较来看 本方案 做到了分页与业务逻辑的完全解耦,开发者无需关注分页,全部通过配置实现。通过这个例子也可以反映出Mybatis在底层开发上有其独特的优势。

  最后再闲扯下,上面的最终案是基于 Url 配置的,其实也可以基于方法加自定义注解来做。这样配置文件省了,但是要增加一个注解解析类。注解中参数 为初始的每页行数。估计注解fans会喜欢,如下面的样子:

  关键字:Mybatis物理分页插件(目前mybatis下最好的物理分页)使用方式:项目git地址:博文来自:赵士杰的博客

  框架介绍jqGrid:是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信。支持json和xml数据和服务器交互,有很多自定义的功能,具体可以去看文档:博文来自:的博客

  为了简化开发,会根据数据库表生成一些文件,自带一些简单的CRUD操作:pojo,mapper.java,mapper.xml。这里使用idea工具和mysql数据库的操作。一.新建数据库表user二....博文来自:鸦教授的博客

  关于分页这个,基本上在后台查询数据的时候都会用到,这里介绍一个非常简单的插件工具PageHelper,实现三行代码实现分页(其实也不是三行代码,还有一个实体类和mybatis的配置文件需要做一个简单的...博文来自:忘却世俗的人

  一、前言上一文中说到在springBoot环境下快速应用Mybatisplus,篇幅中我们使用了BaseMapper,从而可以直接使用selectPage这样的分页,但如果你够细心的话,返回的数据确实...博文来自:无情的你,无情的雨!

  近两天一直再研究MyBatis的分页问题,看了别人的处理方式,自己总结优化了一下,写了两个拦截类,给有需要的人使用和参考,源码请下载附件。主要有3个类:Page,MybatisPageIntercep...博文来自:b_l_east的博客

  Mybatis的物理分页是应用中的一个难点,特别是配合检索和排序功能叠加时更是如此。我在最近的项目中开发了这个通用分页器,过程中参考了站内不少好文章,新年第一天,特此发文回馈网站。特别鸣谢pagina...博文来自:duanhengbin的专栏

  最近自己在学习ssm框架,在进行针对数据库表的CURD操作时候,想到了分页这个知识点,然后就开始查阅资料准备用ssm框架进行简单的分页操作。首先我的这个分页呢,是借助外来jar包中的类进行实现的,需要...博文来自:的博客

  关于mybatis的逆向工程中分页配置因为在使用PageHelper插件的时候出现了异常的问题,所以考虑在数据库查询的时候直接进行分页操作,也就是在配置中添加limit,首先把我遇到的分页问题描述一下...博文来自:rico_rico的博客

  MyBatis使用分页插件时并且查询条件包含foreach时,分页插件在执行count语句时会抛出异常,报参数为空异常。项目中使用到了MyBatisPlus,分页也是用的它的PaginationInt...博文来自:无趣的码农

  文章属于入门级水平,重要事情说三遍,入门级,入门级,入门级Mybatis:对JDBC是一个轻量级的封装。一个持久层一个框架支持普通SQL查询,存储过程和高级映射的优秀持久层框架可以使用简单的XML或注...博文来自:fei641327936的博客

  提示:如果对性能要求较高的话,不建议使用分页插件,建议自己手写分页逻辑。准备工作在pom.ml中引入依赖lt;!--博文来自:JustryDeng

  一般MyBatis作为ORM框架,需要做分页一般会选择使用PageHelper。PageHelper非常强大的分页插件,和mybatis整合也非常方便。PageHelper对单表分页或者整体结果集分页...博文来自:Gogym的博客

  PageHelper是实现后台分页,如果需要前台分页,可以看我的另外一篇博客,完美对接哦!Jquery分页插件,带你一步一步接入后台数据1.先下载pageinfo需要用到的包,可自行网上下载,也可直接...博文来自:weidong_y的博客

  关于MyBatisMyBatis支持普通sql查询,MyBatis是一个持久层框架,支持定制化(按开发需求编写)SQL,支持存储及高级映射。MyBatis不像JDBC代码,手动设置参数及获取结果集...博文来自:小小渔夫

  写在前面:这套数据结构在spring+hibernate的框架上已经成熟运行多时,可直接将web前端的table查询插件生成的查询条件通过组件自动转换为CommonReqInqBean实例,然后...博文来自:rocklee的专栏

  基本的步骤就是(1)查询总共有多少条(2)分页查询,当前页,一页查多少,一共多少页(3)外围需要循环调用,获取所有页的数据,或者分页展示首先写一个分页的基础类publicclassPagination...博文来自:红豆和绿豆的博客

  闲来无事,特地整理了一下MyBatis实现分页的原理。地球人应该都知道要利用JDBC对数据库进行操作,就需要一个statement对象,MyBatis也是如此。MyBatis在执行sql语句前会...博文来自:jant的博客

http://lotusyogacenter.com/wulifenye/425.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有