网站每天点击量多少好,网站头部导航代码,中铁十六局个人门户网,高端网站建设免费分析2019独角兽企业重金招聘Python工程师标准 如果你也在用Mybatis#xff0c;建议尝试该分页插件#xff0c;这一定是最方便使用的分页插件。 分页插件支持任何复杂的单表、多表分页#xff0c;部分特殊情况请看重要提示。 想要使用分页插件#xff1f;请看如何… 2019独角兽企业重金招聘Python工程师标准 如果你也在用Mybatis建议尝试该分页插件这一定是最方便使用的分页插件。 分页插件支持任何复杂的单表、多表分页部分特殊情况请看重要提示。 想要使用分页插件请看如何使用分页插件。 物理分页 该插件目前支持以下数据库的物理分页: OracleMysqlMariaDBSQLiteHsqldbPostgreSQLDB2SqlServer(2005,2008)InformixH2SqlServer2012配置dialect属性时可以使用小写形式 oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012 在4.0.0版本以后dialect参数可以不配置系统能自动识别这里提到的所有数据库。 对于不支持的数据库可以实现com.github.pagehelper.parser.Parser接口然后配置到dialect参数中(4.0.2版本增加)。 特别注意使用SqlServer2012数据库时需要手动指定sqlserver2012否则会使用2005的方式进行分页。 MyBatis工具网站:http://mybatis.tk 分页插件支持MyBatis3.2.0~3.3.0(包含) 分页插件最新版本为4.1.6 Maven坐标 dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion4.1.6/version
/dependency 下载JAR包 分页插件pagehelper.jar https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/ http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/ 由于使用了sql解析工具你还需要下载jsqlparser.jar 使用方法 1. 引入分页插件 引入分页插件一共有下面2种方式推荐使用Maven方式这种方式方便更新。 1). 引入Jar包 如果你想使用本项目的jar包而不是直接引入类你可以在这里下载各个版本的jar包点击Download下的jar即可下载 https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/ http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/ 由于使用了sql解析工具你还需要下载jsqlparser.jar这个文件完全独立不依赖其他 http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.1/ http://git.oschina.net/free/Mybatis_PageHelper/attach_files 2). 使用maven 添加如下依赖 dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion4.1.6/version
/dependency 当使用maven中央库中的快照版带-SNAPSHOT的版本时需要在pom.xml中添加如下配置 repositoriesrepositoryidsonatype-nexus-snapshots/idnameSonatype Nexus Snapshots/nameurlhttp://oss.sonatype.org/content/repositories/snapshots/urlreleasesenabledfalse/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repository
/repositories 2. 在Mybatis配置xml中配置拦截器插件: !-- plugins在配置文件中的位置必须符合要求否则会报错顺序如下: properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers? --
plugins!-- com.github.pagehelper为PageHelper类所在包名 --plugin interceptorcom.github.pagehelper.PageHelper!-- 4.0.0以后版本可以不设置该参数 --property namedialect valuemysql/!-- 该参数默认为false --!-- 设置为true时会将RowBounds第一个参数offset当成pageNum页码使用 --!-- 和startPage中的pageNum效果一样--property nameoffsetAsPageNum valuetrue/!-- 该参数默认为false --!-- 设置为true时使用RowBounds分页会进行count查询 --property namerowBoundsWithCount valuetrue/!-- 设置为true时如果pageSize0或者RowBounds.limit 0就会查询出全部的结果 --!-- 相当于没有执行分页查询但是返回结果仍然是Page类型--property namepageSizeZero valuetrue/!-- 3.3.0版本可用 - 分页参数合理化默认false禁用 --!-- 启用合理化时如果pageNum1会查询第一页如果pageNumpages会查询最后一页 --!-- 禁用合理化时如果pageNum1或pageNumpages会返回空数据 --property namereasonable valuefalse/!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 --!-- 增加了一个params参数来配置参数映射用于从Map或ServletRequest中取值 --!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 --!-- 不理解该含义的前提下不要随便复制该配置 --property nameparams valuepageNumpageHelperStart;pageSizepageHelperRows;/!-- 支持通过Mapper接口参数来传递分页参数 --property namesupportMethodsArguments valuefalse/!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page --property namereturnPageInfo valuenone//plugin
/plugins 这里的com.github.pagehelper.PageHelper使用完整的类路径。 其他五个参数说明 增加dialect属性使用时可以指定该属性不指定的情况下分页插件会自动判断可选值为oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012。 增加offsetAsPageNum属性默认值为false使用默认值时不需要增加该配置需要设为true时需要配置该参数。当该参数设置为true时使用RowBounds分页时会将offset参数当成pageNum使用可以用页码和页面大小两个参数进行分页。 增加rowBoundsWithCount属性默认值为false使用默认值时不需要增加该配置需要设为true时需要配置该参数。当该参数设置为true时使用RowBounds分页会进行count查询。 增加pageSizeZero属性默认值为false使用默认值时不需要增加该配置需要设为true时需要配置该参数。当该参数设置为true时如果pageSize0或者RowBounds.limit 0就会查询出全部的结果相当于没有执行分页查询但是返回结果仍然是Page类型。 增加reasonable属性默认值为false使用默认值时不需要增加该配置需要设为true时需要配置该参数。具体作用请看上面配置文件中的注释内容。 为了支持startPage(Object params)方法增加了一个params参数来配置参数映射用于从Map或ServletRequest中取值可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值。 supportMethodsArguments支持通过Mapper接口参数来传递分页参数默认值false具体用法参考com.github.pagehelper.test.basic包下的ArgumentsMapTest和ArgumentsObjTest测试类。 returnPageInfo用来支持直接返回PageInfo类型默认值none可选参数always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page(List)类型。用法和配置参考com.github.pagehelper.test.basic包下的PageInfoTest特别要注意接口的返回值和xml中的resultType类型。 增加closeConn属性当使用动态数据源或没有设置dialect属性自动获取数据库类型时会自动获取一个数据库连接通过该属性来设置是否关闭获取的这个连接默认true关闭。 重要提示 当offsetAsPageNumfalse的时候由于PageNum问题RowBounds查询的时候reasonable会强制为false。使用PageHelper.startPage方法不受影响。 另外使用RowBounds在这种情况下返回的Page对象由于没有正确的pageNum属性所以也不能使用PageInfo处理。 如果你不理解为什么可以看这样一个例子查询offset7,limit10这个时候pageNum?这种情况没法计算pageNum没法判断当前是第几页。 3. 如何选择配置这些参数 单独看每个参数的说明可能是一件让人不爽的事情这里列举一些可能会用到某些参数的情况。 首先dialect属性是必须的不需要解释。其他的参数一般情况下我们都不必去管如果想了解何时使用合适你可以参考以下场景 场景一 如果你仍然在用类似ibatis式的命名空间调用方式你也许会用到rowBoundsWithCount分页插件对RowBounds支持和Mybatis默认的方式是一致默认情况下不会进行count查询如果你想在分页查询时进行count查询以及使用更强大的PageInfo类你需要设置该参数为true。 场景二 如果你仍然在用类似ibatis式的命名空间调用方式你觉得RowBounds中的两个参数offset,limit不如pageNum,pageSize容易理解你可以使用offsetAsPageNum参数将该参数设置为true后offset会当成pageNum使用limit和pageSize含义相同。 场景三 如果觉得某个地方使用分页后你仍然想通过控制参数查询全部的结果你可以配置pageSizeZero为true配置后如可以通过设置pageSize0或者RowBounds.limit 0就会查询出全部的结果。 场景四 如果你分页插件使用于类似分页查看列表式的数据如新闻列表软件列表你希望用户输入的页数不在合法范围第一页到最后一页之外时能够正确的响应到正确的结果页面那么你可以配置reasonable为true这时如果pageNum1会查询第一页如果pageNum总页数会查询最后一页。 4. Spring配置方法 首先需要在Spring中配置org.mybatis.spring.SqlSessionFactoryBean。然后配置配置Mybatis的具体配置有两种方式一种是用mybatis默认的xml配置另一种就是完全使用spring的属性配置方式。 1.mybatis默认的xml配置 配置configLocation属性指向上面的mybatis-config.xml文件。有关分页插件的配置都在mybatis-config.xml具体配置内容参考上面的mybatis-config.xml。 2.使用spring的属性配置方式 注意请不用同时使用spring配置方式和mybatis-config.xml配置方式只需要选择其中一个就行。配置多个分页插件时会抛出异常提示。 分页插件配置错误:请不要在系统中配置多个分页插件(使用Spring时,mybatis-config.xml和Spring配置方式请选择其中一种不要同时配置多个分页插件) 使用spring的属性配置方式可以使用plugins属性像下面这样配置 bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property namemapperLocationsarrayvalueclasspath:mapper/*.xml/value/array/propertyproperty nametypeAliasesPackage valuecom.isea533.ssm.model/property namepluginsarraybean classcom.github.pagehelper.PageHelperproperty namepropertiesvaluedialecthsqldb/value/property/bean/array/property
/bean 属性配置按照上面的方式配置每个配置独立一行即可。 5. 如何在代码中使用 阅读前后请注意看重要提示 首先该分页插件支持以下两种调用方式 //第一种RowBounds方式的调用
ListCountry list sqlSession.selectList(x.y.selectIf, null, new RowBounds(1, 10));//第二种Mapper接口方式的调用推荐这种使用方式。
PageHelper.startPage(1, 10);
ListCountry list countryMapper.selectIf(1); 下面分别对这两种方式进行详细介绍 1). RowBounds方式的调用 ListCountry list sqlSession.selectList(x.y.selectIf, null, new RowBounds(1, 10)); 使用这种调用方式时你可以使用RowBounds参数进行分页这种方式侵入性最小我们可以看到通过RowBounds方式调用只是使用了这个参数并没有增加其他任何内容。 分页插件检测到使用了RowBounds参数时就会对该查询进行物理分页。 关于这种方式的调用有两个特殊的参数是针对RowBounds的你可以参看上面的场景一和场景二 注不只有命名空间方式可以用RowBounds使用接口的时候也可以增加RowBounds参数例如 //这种情况下也会进行物理分页查询
ListCountry selectAll(RowBounds rowBounds); 2). PageHelper.startPage静态方法调用 在你需要进行分页的Mybatis方法前调用PageHelper.startPage静态方法即可紧跟在这个方法后的第一个Mybatis查询方法会被进行分页。 例一 SqlSession sqlSession MybatisHelper.getSqlSession();
CountryMapper countryMapper sqlSession.getMapper(CountryMapper.class);
try {//获取第1页10条内容默认查询总数countPageHelper.startPage(1, 10);//紧跟着的第一个select方法会被分页ListCountry list countryMapper.selectIf(1);assertEquals(2, list.get(0).getId());assertEquals(10, list.size());//分页时实际返回的结果list类型是PageE如果想取出分页信息需要强制转换为PageE//或者使用PageInfo类下面的例子有介绍assertEquals(182, ((Page) list).getTotal());
} finally {sqlSession.close();
} 例二 SqlSession sqlSession MybatisHelper.getSqlSession();
CountryMapper countryMapper sqlSession.getMapper(CountryMapper.class);
try {//获取第1页10条内容默认查询总数countPageHelper.startPage(1, 10);//紧跟着的第一个select方法会被分页ListCountry list countryMapper.selectIf(1);//后面的不会被分页除非再次调用PageHelper.startPageListCountry list2 countryMapper.selectIf(null);//list1assertEquals(2, list.get(0).getId());assertEquals(10, list.size());//分页时实际返回的结果list类型是PageE如果想取出分页信息需要强制转换为PageE//或者使用PageInfo类下面的例子有介绍assertEquals(182, ((Page) list).getTotal());//list2assertEquals(1, list2.get(0).getId());assertEquals(182, list2.size());
} finally {sqlSession.close();
} 例三使用PageInfo的用法 //获取第1页10条内容默认查询总数count
PageHelper.startPage(1, 10);
ListCountry 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()); 本项目中包含大量测试您可以通过查看测试代码了解使用方法。 测试代码地址http://git.oschina.net/free/Mybatis_PageHelper/tree/master/src/test/java/com/github/pagehelper/test MyBatis和Spring集成示例 如果和Spring集成不熟悉可以参考下面两个 只有基础的配置信息没有任何现成的功能作为新手入门搭建框架的基础 集成Spring3.x 集成Spring4.x 这两个集成框架集成了MyBatis分页插件和MyBatis通用Mapper。 转载于:https://my.oschina.net/zhanghaiyang/blog/725672