阅读 20

page personnel,pagehelper类型擦除

将maven添加到PageHelper取决于在Mybatis配置文件Mybatis-Config.xml中设置PageHelper插件的原理。 如果在使用默认坑PageHelp获取计数时过滤order by,则为、 总数不正确问题请注意在mybaits中使用PageHelper按对分页结果不正确处理方法在spring mvc mybatis项目中,使用PageHelper插件进行分页查询时例如一页询问10件,返回2件或3件。 结果图使用关联返回了复杂的属性。

maven依赖dependencygroupidcom.github.page helper/groupidartifactidpagehelper/artifactidversion5.1.8/version/dependen 在Mybatis配置文件Mybatis-Config.xml中配置PageHelper插件pluginsplugininterceptor=' com.github.page helper.page helper ' property name=' offsetaspagenum ' value=' false '/property name=' rowboundswithcount ' value=' false '/' roperty name=' rowboundswithcount ' value property name=' reasonable ' value=' false '/property name=' supportmethodsame property name plugin/plugins plugins插件配置在settings之后,在environments之前,是否在settings中打开Mybatis的其他运行参数,例如延迟加载,动态代理原理

pageHelper使用ThreadLocal获取同一线程中变量的信息。 各线程之间的ThreadLocal不会相互干扰。 这意味着,即使在Thread1的ThreadLocal1之后获取Tread1变量的信息,也无法获取Thread2的信息

因此,在多线程环境中,每个Threadlocal彼此隔离,不同的thread可以在不同的数据源或不同的thread上执行不同的SQL语句

因此,PageHelper利用它通过拦截器获取同一线程内的预编译的SQL语句,然后将SQL语句包装在具有分页功能的SQL语句中,并将其重新赋值给下一个操作,因此实际执行的SQL语句是页面

请注意,PageHelper只适用于紧接的第一条SQL语句。 因此,如果一种方法包含多个查询,则必须注意不要向不需要分页的内容添加分页,但真正需要分页的内容并不进行分页。

使用1 ),计数总数,)将SQL语句设置为selectcount(0) from xxx仅对简单的SQL语句有效,复杂的SQL语句需要自己写) ) Page? page=pagehelper.startpage(1,-1); long count=page.getTotal (; 2 )、分页符、第pageNum -页、第[pageSize]页m条,仅分页符不统计(每次仅执行分页符) pagehelper.startpage([pagenum]、[pageSize] List? pagelist=queryforlist (XXX.class,' queryAll ',param ); //Pagelist是指将分页后的结果b、分页和总计(每次2个句子、1个select count句子、1个分页句子)应用于查询的分页时,数据会发生变动,需要将实时的变动信息反映在分页结果中的page page=page helper.start page ([ pagenum ]、[pageSize]、[iscount] ); List? pagelist=queryforlist (XXX.class,' queryAll ',param );

long count = page.getTotal(); //也可以 List<?> pagelist = page.getList(); 获取分页后的结果集3)、使用PageHelper查全部(不分页) PageHelper.startPage(1,0); List<?> alllist = queryForList( xxx.class , "queryAll" , param);4)、PageHelper的其他API String orderBy = PageHelper.getOrderBy(); //获取orderBy语句 Page<?> page = PageHelper.startPage(Object params); Page<?> page = PageHelper.startPage(int pageNum, int pageSize); Page<?> page = PageHelper.startPage(int pageNum, int pageSize, boolean isCount); Page<?> page = PageHelper.startPage(pageNum, pageSize, orderBy); Page<?> page = PageHelper.startPage(pageNum, pageSize, isCount, isReasonable); //isReasonable分页合理化,null时用默认配置 Page<?> page = PageHelper.startPage(pageNum, pageSize, isCount, isReasonable, isPageSizeZero); //isPageSizeZero是否支持PageSize为0,true且pageSize=0时返回全部结果,false时分页,null时用默认配置 默认值 //RowBounds参数offset作为PageNum使用 - 默认不使用 private boolean offsetAsPageNum = false; //RowBounds是否进行count查询 - 默认不查询 private boolean rowBoundsWithCount = false; //当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果 private boolean pageSizeZero = false; //分页合理化 private boolean reasonable = false; //是否支持接口参数来传递分页参数,默认false private boolean supportMethodsArguments = false; 坑 PageHelp 在获取 count 的时候 过滤 order by 导致 总数不正确问题

pageHelp 获取count的时候会默认把order by 过滤掉,有可能会导致实际总数与查出来的总数不一样的情况。只要在需要不过滤的order by 前面添加 /keep orderby/ 注解后,pageHelp 就会忽略不过滤order by。

mybaits中使用pageHelper 进行一对都分页时结果不对的处理方式 pageHelper遇到resultMap的collection后,分页总数不对。

由于PageHelper分页总数是根据count(0)来计算出来的(即自动生成一条SQL select count(0) from xx where 筛选条件),而collection会把结果集合并(一对多的情况),计算总数在合并结果集之前,所以计算的总数不对。

pageHelper遇到resultMap的collection后,分页结果集不对。

同计数的原理一样,分页实际是在合并结果集之前进行的(即直接在查询SQL语句后面加了limit x,x),这就导致了存在一对多情况时,实际返回的结果集个数与分页要求的每页结果集个数不一致,且如果最后一条记录也涉及一对多时,结果集内容也不一定准确。

解决方法

需要使用pageHelper分页时,resultMap不要用嵌套结果的方式,可以使用嵌套查询的方式

spring mvc+mybatis项目中,当使用PageHelper插件进行分页查询时,查到的总数据量值是正确的,但是查询当前页返回的列表个数不对。比如每页查询10条,返回2条或者3条。resultMap使用了association返回复杂属性。 原因 是当resultMap使用<result /> <association/>返回,当<result />对应的属性有重复值时,只加载一个。是当resultMap使用<result /> <association/>返回,当<result/>对应的属性有重复值时,只加载一个。 解决方法: resultMap中增加<id />的返回,保证数据的唯一性。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐