mybatis 分页插件.docx_第1页
mybatis 分页插件.docx_第2页
mybatis 分页插件.docx_第3页
mybatis 分页插件.docx_第4页
mybatis 分页插件.docx_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

山东大学苏州研究院mybatis分页插件配置使用手册秦 士 亚2016-4-6目录在代码中使用21). RowBounds方式的调用22). PageHelper.startPage静态方法调用2例一:3例二:4例三,使用PageInfo的用法:5配置方法6Spring配置方法6Mybatis配置xml中配置:7参数说明:81. 增加dialect属性,82. 增加offsetAsPageNum属性,83. 增加rowBoundsWithCount属性,84. 增加pageSizeZero属性,85. 增加reasonable属性,96. params97. supportMethodsArguments98. returnPageInfo99. 重要提示:9重要提示10PageHelper.startPage方法重要提示10请不要配置多个分页插件10reasonable参数说明10分页插件不支持关联的嵌套结果11在代码中使用/第一种,RowBounds方式的调用List list = sqlSession.selectList(x.y.selectIf, null, new RowBounds(1, 10);/第二种,Mapper接口方式的调用,推荐这种使用方式。PageHelper.startPage(1, 10);List list = countryMapper.selectIf(1);1). RowBounds方式的调用List list = sqlSession.selectList(x.y.selectIf, null, new RowBounds(1, 10);使用这种调用方式时,你可以使用RowBounds参数进行分页,这种方式侵入性最小,我们可以看到,通过RowBounds方式调用只是使用了这个参数,并没有增加其他任何内容。分页插件检测到使用了RowBounds参数时,就会对该查询进行物理分页。关于这种方式的调用,有两个特殊的参数是针对RowBounds的,你可以参看上面的场景一和场景二注:不只有命名空间方式可以用RowBounds,使用接口的时候也可以增加RowBounds参数,例如:/这种情况下也会进行物理分页查询List selectAll(RowBounds rowBounds); 2). PageHelper.startPage静态方法调用在你需要进行分页的Mybatis方法前调用PageHelper.startPage静态方法即可,紧跟在这个方法后的第一个Mybatis查询方法会被进行分页。例一:SqlSession sqlSession = MybatisHelper.getSqlSession();CountryMapper countryMapper = sqlSession.getMapper(CountryMapper.class);try /获取第1页,10条内容,默认查询总数count PageHelper.startPage(1, 10); /紧跟着的第一个select方法会被分页 List list = countryMapper.selectIf(1); assertEquals(2, list.get(0).getId(); assertEquals(10, list.size(); /分页时,实际返回的结果list类型是Page,如果想取出分页信息,需要强制转换为Page, /或者使用PageInfo类(下面的例子有介绍) assertEquals(182, (Page) list).getTotal(); finally sqlSession.close();例二:SqlSession sqlSession = MybatisHelper.getSqlSession();CountryMapper countryMapper = sqlSession.getMapper(CountryMapper.class);try /获取第1页,10条内容,默认查询总数count PageHelper.startPage(1, 10); /紧跟着的第一个select方法会被分页 List list = countryMapper.selectIf(1); /后面的不会被分页,除非再次调用PageHelper.startPage List list2 = countryMapper.selectIf(null); /list1 assertEquals(2, list.get(0).getId(); assertEquals(10, list.size(); /分页时,实际返回的结果list类型是Page,如果想取出分页信息,需要强制转换为Page, /或者使用PageInfo类(下面的例子有介绍) assertEquals(182, (Page) list).getTotal(); /list2 assertEquals(1, list2.get(0).getId(); assertEquals(182, list2.size(); finally sqlSession.close();例三,使用PageInfo的用法:/获取第1页,10条内容,默认查询总数countPageHelper.startPage(1, 10);List list = countryMapper.selectAll();/用PageInfo对结果进行包装PageInfo page = new PageInfo(list);/测试PageInfo全部属性/PageInfo包含了非常全面的分页属性assertEquals(1, page.getPageNum();assertEquals(10, page.getPageSize();assertEquals(1, page.getStartRow();assertEquals(10, page.getEndRow();assertEquals(183, page.getTotal();assertEquals(19, page.getPages();assertEquals(1, page.getFirstPage();assertEquals(8, page.getLastPage();assertEquals(true, page.isFirstPage();assertEquals(false, page.isLastPage();assertEquals(false, page.isHasPreviousPage();assertEquals(true, page.isHasNextPage();spring mybatis配置方法只能选其中一种配置方法首先需要在Spring中配置org.mybatis.spring.SqlSessionFactoryBean。然后配置配置Mybatis的具体配置有两种方式,一种是用mybatis默认的xml配置,另一种就是完全使用spring的属性配置方式。Spring配置方法注意:请不用同时使用spring配置方式和mybatis-config.xml配置方式,只需要选择其中一个就行。配置多个分页插件时,会抛出异常提示。分页插件配置错误:请不要在系统中配置多个分页插件(使用Spring时,mybatis-config.xml和Spring配置方式,请选择其中一种,不要同时配置多个分页插件)!使用spring的属性配置方式,可以使用plugins属性像下面这样配置: classpath:mapper/*.xml dialect=hsqldb 属性配置按照上面的方式配置,每个配置独立一行即可。Mybatis配置xml中配置:配置configLocation属性指向上面的mybatis-config.xml文件。有关分页插件的配置都在mybatis-config.xml,具体配置内容参考上面的mybatis-config.xml。 !- 启用合理化时,如果pageNumpages会查询最后一页 - !- 禁用合理化时,如果pageNumpages会返回空数据 - 这里的com.github.pagehelper.PageHelper使用完整的类路径。参数说明:1. 增加dialect属性,使用时可以指定该属性(不指定的情况下,分页插件会自动判断),可选值为oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012。2. 增加offsetAsPageNum属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。当该参数设置为true时,使用RowBounds分页时,会将offset参数当成pageNum使用,可以用页码和页面大小两个参数进行分页。3. 增加rowBoundsWithCount属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。当该参数设置为true时,使用RowBounds分页会进行count查询。4. 增加pageSizeZero属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。当该参数设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是Page类型)。5. 增加reasonable属性,默认值为false,使用默认值时不需要增加该配置,需要设为true时,需要配置该参数。具体作用请看上面配置文件中的注释内容。6. params为了支持startPage(Object params)方法,增加了一个params参数来配置参数映射,用于从Map或ServletRequest中取值,可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值。7. supportMethodsArguments支持通过Mapper接口参数来传递分页参数,默认值false,具体用法参考com.github.pagehelper.test.basic包下的ArgumentsMapTest和ArgumentsObjTest测试类。8. returnPageInfo用来支持直接返回PageInfo类型,默认值none,可选参数always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page(List)类型。用法和配置参考com.github.pagehelper.test.basic包下的PageInfoTest,特别要注意接口的返回值和xml中的resultType类型。9. 重要提示:当offsetAsPageNum=false的时候,由于PageNum问题,RowBounds查询的时候reasonable会强制为false。使用PageHelper.startPage方法不受影响。另外使用RowBounds在这种情况下返回的Page对象由于没有正确的pageNum属性,所以也不能使用PageInfo处理。如果你不理解为什么,可以看这样一个例子:查询offset=7,limit=10,这个时候pageNum=?,这种情况没法计算pageNum,没法判断当前是第几页。重要提示PageHelper.startPage方法重要提示只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询(Select方法)方法会被分页。请不要配置多个分页插件请不要在系统中配置多个分页插件(使用Spring时,mybatis-config.xml和Spring配置方式,请选择其中一种,不要同时配置多个分页插件)!分页插件不支持带有for update语句的分页对于带有for update的sql,会抛出运行时异常,对于这样的sql建议手动分页,毕竟这样的sql需要重视。reasonable参数说明由于许多人直接复制文档中的配置,没有仔细看该参数的含义,导致查询莫名其妙。如果你配置了该参数为true,那么如果你的数据一共有12条,当你查询PageHelper.startPage(7,5)的时候。以mysql为例,你认为应该是limit 35,5,实际上是limit 10,5,为什么会这样呢?因为你只有12条数据,每页5条的时候不可能存在第7页,只

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论