• 项目中PageHelper分页插件的使用实例(SSM)


    分页(英语:Paging),是一种操作系统里存储器管理的一种技术,可以使计算机的主存可以使用存储在辅助存储器中的数据。操作系统会将辅助存储器(通常是磁盘)中的数据分区成固定大小的区块,称为“页”(pages)。当不需要时,将分页由主存(通常是内存)移到辅助存储器;当需要时,再将数据取回,加载主存中。相对于分段,分页允许存储器存储于不连续的区块以维持文件系统的整齐。[1]分页是磁盘和内存间传输数据块的最小单位。

    分页/虚拟内存能有助“大大地”降低整体及额外非必要的 I/O 次数,提高系统整体运作性能。因为这能有助提高 RAM 的读取命中率,也透过其内部的高效率算法来达到 I/O 数据流的预缓存工作,通过与之相关的等等手段也能很好地提高了 CPU 的使用效率,而拥有大物理内存的用户更可能考虑利用如Ramdisk、Supercache、SoftPerfect RAM Disk等模拟出硬盘分区来同时将虚拟内存/系统临时文件等设置其上以进一步加强系统性能,及达至保障硬盘的措施。分页是虚拟内存技术中的重要部分。
    1 .分页原理

    这里写图片描述

    使用原理:

    pageHelper会使用ThreadLocal获取到同一线程中的变量信息,各个线程之间的Threadlocal不会相互干扰,也就是Thread1中的ThreadLocal1之后获取到Tread1中的变量的信息,不会获取到Thread2中的信息

    所以在多线程环境下,各个Threadlocal之间相互隔离,可以实现,不同thread使用不同的数据源或不同的Thread中执行不同的SQL语句

    所以,PageHelper利用这一点通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句

     
    2 .项目中引入分页插件

    插件叫做PageHelper,如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。
    该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。

    第一步:引入maven依赖

        //放置在dao层pom.xml配置中
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.0.0</version>
        </dependency>

     第二步:在spring-jdbc.xml文件中进行配置(数据源配置xml文件),引入插件

        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="typeAliasesPackage" value="相应包路劲,多个用逗号隔开"/>
            <property name="mapperLocations"
                      value="classpath*:/com/test/**/mapper/**/*Mapper.xml"></property>
            <!--在sqlSessionFactory中引入该插件-->
            <property name="plugins">
                <array>
                    <bean class="com.github.pagehelper.PageInterceptor">
                        <property name="properties">
                            <value>
                                helperDialect=mysql
                            </value>
                        </property>
                    </bean>
                </array>
            </property>
        </bean>

    第三步:获取分页参数和数据

        //pageNum展示哪一页,pageSize每一页展示的条数
        public PageInfo<DemoDO> getALLDemoInfo(int pageNum,int pageSize) {
                //使用时,先执行PageHelper.startPage(pageNum,pageSize)
                PageHelper.startPage(pageNum,pageSize);
                List<StaticDO> lists = staticDAO.getALLDemoInfo();
                //将获取的数据封装为 PageInfo对象即可
                PageInfo<DemoDO> pageInfo = new PageInfo<>(lists);
         
                return pageInfo;
            }

     第四步:前端展示

        //自定义一个分页参数对象,用于接收分页参数数据
        public class BasePageResult implements Serializable {
            //条数
            private int pageSize;
            //页数
            private int pages;
            //符合要求的数据条数
            private int total;
            //当前页,例如第一页,第二页。。。
            private int pageNum;
         
            public BasePageResult() {
            }
         
            public int getPageSize() {
                return this.pageSize;
            }
         
            public void setPageSize(int pageSize) {
                this.pageSize = pageSize;
            }
         
            public int getPages() {
                return this.pages;
            }
         
            public void setPages(int pages) {
                this.pages = pages;
            }
         
            public int getTotal() {
                return this.total;
            }
         
            public void setTotal(int total) {
                this.total = total;
            }
         
            public int getPageNum() {
                return this.pageNum;
            }
         
            public void setPageNum(int pageNum) {
                this.pageNum = pageNum;
            }
        }

     数据转换,参数接收:

        //使用lombook注解Data代替set和get
        @Data
        public class DemoVO extends BasePageResult implements Serializable {
            //数据集合
            private List<DemoItemVO> demoItemVOList;
         
        }

    实战:

    测试类:

        /**
         * @description: 测试类
         * @author: fengze
         * @create: 2018-09-14 14:45
         **/
        public class DemoServiceTest extends BaseTest {
            @Resource
            private DemoService demoService;
         
            @Test
            public void testGetDemoByPage(){
                PageInfo<DemoDO> info = demoService.getDemoByPage(1, 10);
                logger.info("body:{}", JSON.toJSON(info));
            }
         
          
        }
         
        /**
         * @description: service
         * @author: fengze
         * @create: 2018-09-13 15:21
         **/
        @Service("demoService")
        public class DemoServiceImpl extends BaseService implements DemoService{
         
            @Autowired
            private DemoDAO demoDAO;
         
         
            /*获取当前符合要求的分页数据*/
            @Override
            public PageInfo<DemoDO> getDemoByPage(int pageNum,int pageSize) {
                /*获取全量静态酒店*/
                PageHelper.startPage(pageNum,pageSize);
                List<DemoDO> lists = demoDAO.getDemoByPage();
                PageInfo<DemoDO> pageInfo = new PageInfo<>(lists);
         
                return pageInfo;
            }
        }
         
        /**持久层*/
         
        @Repository
        public interface DemoDAO {
         
            List<DemoDO> getDemoByPage();
         
            
        }
         
         
        <!--mapper配置,BaseResultMap自动映射,需要获取的字段-->
        <sql id="Base_Column_List">
            id, name, business, addr,  create_time, update_time, is_delete
          </sql>
         
         
        <select id="getDemoByPage" resultMap="BaseResultMap">
            select
            <include refid="Base_Column_List"/>
            from demo
          </select>
         

    ---------------------
    作者:狂丰
    来源:CSDN
    原文:https://blog.csdn.net/fz13768884254/article/details/82735863
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    .net中连接远程目录的解决方案
    VS2008+Window Mobile开发环境的搭建(转)
    安装任何版本ActiveSync都出错原因
    问题让人开始慢慢的思考
    [原创]EasyUI的TreeGrid查询功能实现
    听客户说然后再做开发
    EasyUI的DataGrid合击汇总页脚使用教程
    ASP.NET MVC 使用AderTemplate模板引擎进行视图显示
    C#的JSON数据格式转换方法
    Delphi使用ReportMachine制作小计和总计报表
  • 原文地址:https://www.cnblogs.com/yangshuyuan1009/p/10985115.html
Copyright © 2020-2023  润新知