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

Mybatis分页查询

发布时间:2019-07-25 08:37 来源:未知 编辑:admin

  分页查询作为数据库交互最常用的几种操作之一,在日常开发中是非常常见的,比如前段请求需要一个分页的列表,往往有两种方式,一是把所有的数据都给到前段,前段分页。另外一种方式是前端通过传分页信息给后端,后端查询时进行分页,并将相应页的数据返给前端。第一种方式如果数据规模比较小的情况下可以使用,如果数据量较大,对内存、网络传输的消耗都是非常大的,所以实际开发中一般很少使用。第二种方式是后端进行分页,后端分页的实现又可以分为逻辑分页和物理分页,逻辑分页就是在进行数据库查询时一次性将数据查出来,然后将相应页的数据挑出返回,物理分页就是通过在查询时就查询相应的页的数据(比如直接在mysql查询语句添加limit)。很明显逻辑分页跟第一种前端分页的方式有着相同的弊端。

  之前写了好几篇关于Mybatis的文章了,其实mybatis原生也是支持分页的,但为了与数据库语法解耦,实现的是逻辑分页,首先将所有结果查询出来,然后通过计算offset和limit,只返回部分结果,操作在内存中进行,所以也叫内存分页,Mybatis逻辑分页是通过RowBounds实现的。而物理分页一般是通过为sql添加limit实现的,具体可以通过在对其后的第一个执行sql进行拦截,并自动拼接上分页的sql语句,也可以直接改造mapper.xml文件添加limit的方式实现。本文会分别介绍一下RowBounds逻辑分页、物理分页、改造mapper.xml这三种分页方式的使用方法。

  通过RowBounds类可以实现Mybatis逻辑分页,原理是首先将所有结果查询出来,然后通过计算offset和limit,只返回部分结果,操作在内存中进行,所以也叫内存分页。弊端很明显,当数据量比较大的时候,肯定是不行的,所以一般不会去使用RowBounds进行分页查询,这里仅展示一下RowBounds用法。Mybatis Generator原生支持RowBounds查询,生成的Mapper接口中存在一个方法selectByExampleWithRowbounds就是通过RowBounds进行分页查询。

  sql查询时并没有添加limit,也验证了之前讲的RowBounds分页原理是首先将所有结果查询出来,然后通过计算offset和limit,只返回部分结果,是一种逻辑分页。至于Mybatis RowBounds分页原理,请查看Mybatis逻辑分页原理解析RowBounds,写的挺明白的。

  如果可以在查询时直接在sql中指定limit,name肯定是只查询相应页的数据。所以就有一种直观的现象,比如使用mybatis,如果可以在mapper.xml中添加limit属性,那生成的sql肯定是可以直接查询到相应页的数据的。结合之前使用的Mybatis Generator,可以这样实现:首先在生成的XxxExample中加入两个属性limit和offset,同时加上set和get方法,然后在XxxMapper.xml中在通过selectByExample查询时,添加limit,大概就是这种样子:

  其实手动去加工作量也不大,但是如果表比较多,添加起来还是有一定工作量的。而且加入下次表结构变更,重新通过Mybatis Generator生成的话,这些信息也要重新加入。为了避免这些麻烦,有大神写了一个Mybatis Generator插件MySQLLimitPlugin,可以在Mybatis Generator生成文件的时候自动生成上述信息,本片文章就使用MySQLLimitPlugin插件进行生成。

  数据源定义跟RowBounds数据源定义一致,这里不单独放出来了,直接看一下limit在respository的使用:

  可以看到sql查询时,limit参数是固定的,也就是说通过Example成功将limit参数添加到生成的sql中,这种方式的分页是一种物理分页,有些情况也是必须要这么做的。比如我之前做过一个使用Zebra进行分库分表的项目,在使用进行分页时,并不起作用,原因不明,到最后只好通过这种方式实现分库分表的分页查询。至于原因,一直没来及查清楚,回头有时间的话,我会用一篇文章讲述。

  项目结构跟RowBounds一致,这里不单独放出来了,首先来看一下pom.xml配置

  可以看到,respository层没有任何分页相关的信息,使用Rowbounds要传入一个RowBounds参数,使用MySQLLimitPlugin要把pageNum和pageSize作为参数传入。所以可以很明显看到一个好处是,使用PageHelper是非侵入的,假如respository层有N个查询方法,在做分页时,不用改造respository层代码,使方法的通用性更高。

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

  最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了!    开发人员:1111    开发软件:Myeclipse ...博文来自:穆雄雄的博客

  Mybatis的一个插件,PageHelper,非常方便mybatis分页查询。国内牛人的一个开源项目,有兴趣的可以去看源码,都有中文注释(ps:某些源码一大堆英文,痛哭流涕!)在github上仓库地...博文来自:maoyuanming0806的博客

  今天我们就来进行基于mybatis和MySql进行分页功能的实现。常见的数据分页有哪几种实现??基于数组的分页实现?基于sql语句的分页实现?还是通过进行数据分页功能?还是通过RowBounds...博文来自:为谁伫立在风中

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

  今天让我们来学习一下MyBatisPlus的分页查询。让我们来接着上一篇博客继续往下写。线.配置分页类fig;importc...博文来自:lp840312696的博客

  以前用的是hibernate来对数据库进行处理,现在换了架构了,改用mybatis,我感觉用起来还是挺顺手的,现在正在理解他的实现过程,现在遇到分页这个难题了,就大神帮忙解释下 接口中的方法是这样的论坛

  Mybatis实现真正分页查询MyBatis本身是有分页查询的但是并不是真正的分页查询。它是先把数据查出来放在内存里面你要什么给你什么。和真正的分页查询还是不一样的。如果数据太多的话。内存肯定会溢出的...博文来自:DemoWM

  前言:学习hibernateamp;amp;mybatis等持久层框架的时候,不外乎对数据库的增删改查操作。而使用最多的当是数据库的查找操作,而当数据库数据过多时,符合查找条件的数据可能也会...博文来自:sunny潘先生的博客

  背景我们在使用Mybatis分页查询数据列表时,在用户的一个请求中常常需要同时返回当前页的列表数据以及满足条件的数据总条数。以下介绍了三种常见方案。具体使用哪种,具体场景具体分析。实现方案1)执行两次...博文来自:Saintyyu的博客

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

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

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

  前言:学习hibernate&mybatis等持久层框架的时候,不外乎对数据库的增删改查操作。而使用最多的当是数据库的查找操作,而当数据库数据过多时,符合查找条件的数据可能也会是很庞大的数据。往往在这...博文来自:白哥哥的博客

  mybatis分页多表查询我们常遇到一种情况,数据量比较大,如果使用前台分页,在前台如果有权限,有逻辑判断,都会大大降低页面加载的速度,我们需要分页,单表查询的网上方法很多,这里就不赘余了,多表关联查...博文来自:linbyte的博客

  一、优点:相对于hibernate,mybatis在sql的自由度上显得更加灵活,无论是在sql优化还是返回对象方面(hibernate貌似也有直接执行sql的方法,不是很清楚。。。)相对于jdbc,...博文来自:一只仰望天空的菜鸟

  一、前言最近在加强ITAEM团队的一个app项目,人员配备:安卓+前端+后台后台DAO层借鉴了华工其他软件开发团队,使用了新颖强大的MyBatisPlus框架,里边有一个类似百度贴吧的发帖子的功能:而...博文来自:larger5的博客

  新项目用的springmvc和mybatis分页。研究了一下,集众家之长然后形成现在的项目。我把分页部分剥离出来与大家分享。如有不妥的地方欢迎交流拍砖。单独做了一个小项目,放到了下载区,如果有用到的朋...博文来自:泯梦幽思的专栏

  很多人在开发中用mysql或是oracle数据库用习惯了(我就是其中之一,初次接触sqlserver),在分页问题上sqlserver和前边说的两个数据库有很大的区别话不多说,直接上代码//end和s...博文来自:weixin_42401867的博客

  前几天刚学习了mybatis,之后就在我写的某个列子中加上一层mybatis来访问oracle数据库,一般的增删改查经过测试都没有问题,唯一留下oracle的分页查询,一开始自然而然的就想当然的把or...博文来自:Efforts to advance

  步骤一:导入相关jar包步骤二:在src下配置mybatis.xml配置文件。其中对数据库连接,映射文件的加载进行配置。(简写配置可选)步骤三:建立实体类Student步骤四:配置映射文件,其中配置好...博文来自:sinat_35821285的博客

  [一步是咫尺,一步即天涯]前文,我们演示了物理分页的Sql实现方式,这种方式使得我们每次在编写查询服务时,不断的重复造轮子。这样的代码实现方式就显得十分的笨拙了。本文是Mybatis分页查询的最后一片...博文来自:y-yg的博客

  中实现动态的SQL语句,分页以及mybatis的常用的配置原创...博文来自:ww598260073的博客

  记tkMybatis查询出一个 List集合该集合已经做好了一层分页Page封装即查询出的list使用类型判断instanceofPage为true但是,中途不明白这是一个带分页的集合,把查询出的结果...博文来自:冉野 、

  [一步是咫尺,一步即天涯]到目前位置,我们介绍的Mybatis种种查询都是一次性的查询出所有结果并返回给上层。但是,在实际开发过程中,在大量数据存在的情况下,是很少这么做的。本文,我们将从逻辑分页,物...博文来自:y-yg的博客

  这两两天由于工作需要,对mybatis分页进行研究,现进行记录,主要从一下两个方面阐述。博主用的数据库是oracle,所以以下分页都是针对oracle的,mybatis版本是3.3.0 一.myba...博文来自:mzl1989325的博客

  com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方分页插件。使用的时候,只要简单配置,就可以在查询语句之后得到所需的分页信息。1:在pom.xm...博文来自:倪默遥

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

  Mybatis的plugin实现原理下图黑色部分为之前方式,红色部分为使用插件后实现通用分页组件如果想要将现有的select语句改为支持分页功能的查询语句该怎么做呢?最简单的一种做法就是将所有的sel...博文来自:邢宇超的博客

  1.了解过程:在数据库服务器中,sql语句实现分页便要每个查询语句都要写上limit(开始,结束),并且不能灵活的随前端变化,为此使用的方法,过程:拦截请求的sql语句(根据需要拦截的ID...博文来自:菜鸟升职记的专栏

  weixin_37256351:请问一下,重复提交时,除了抛异常还有没有其他处理方式,这种异常量可能会很大,影响查看日志

  weixin_41835612:[reply]sgllight[/reply] key有唯一性标志一次请求的作用,我的理解是在请求A到达未处理完成前,一摸一样的请求B(A、B生成的key一致)如果被处理了就是重复提交,但是如果A处理完了,那么请求B就应该允许被处理了,所以在finally中解锁

  sgllight:大佬,finally 代码块放开,还会起到拦截作用吗?这个地方我有点看不懂,麻烦回复下

  :楼主请问下,删除key的时候 为什么根据value来删除 为什么不直接删除key

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