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

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

分页/虚拟内存能有助“大大地”降低整体及额外非必要的 I/O 次数,提高系统整体运作性能。因为这能有助提高 RAM 的读取命中率,也透过其内部的高效率算法来达到 I/O 数据流的预缓存工作,通过与之相关的等等手段也能很好地提高了 CPU 的使用效率,而拥有大物理内存的用户更可能考虑利用如RamdiskSupercacheSoftPerfect 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>


 

 

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SSM项目使用MyBatis的PageHelper分页插件,需要按照以下步骤进行配置: 1. 在项目的pom.xml文件引入PageHelper的依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> ``` 2. 在MyBatis的配置文件配置PageHelper插件: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> <property name="reasonable" value="true"/> <property name="supportMethodsArguments" value="true"/> <property name="params" value="pageNum=pageHelperStart;pageSize=pageHelperRows;"/> </plugin> </plugins> ``` 其helperDialect属性指定数据库类型,reasonable属性指定是否启用合理化查询(即当查询页码小于1或大于总页数时,自动修正为1或总页数),supportMethodsArguments属性指定是否支持接口参数来传递分页参数,params属性指定接口的参数名与PageHelper的参数名的对应关系。 3. 在接口方法添加分页参数: ```java public interface UserMapper { List<User> findUsers(@Param("name") String name, @Param("pageHelperStart") int pageHelperStart, @Param("pageHelperRows") int pageHelperRows); } ``` 其pageHelperStart和pageHelperRows分别对应PageHelper插件的pageNum和pageSize参数。 4. 在Service层调用分页方法: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public PageInfo<User> findUsers(String name, int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> userList = userMapper.findUsers(name, (pageNum - 1) * pageSize, pageSize); return new PageInfo<>(userList); } } ``` 其PageHelper.startPage()方法用于开启分页查询,第一个参数为当前页码,第二个参数为每页显示的记录数。在调用Mapper方法时,需要将分页参数传递给Mapper方法,这里通过计算得到分页查询的起始位置和记录数。最后,将查询结果封装成PageInfo对象返回即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值