PageHelper的使用及不同层之间的转换

4 篇文章 0 订阅
2 篇文章 0 订阅

1.Pagehelper分页插件实现自动分页功能

Step1:配置pom文件

<dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>4.1.6</version>
</dependency>

Step2:配置application.yml文件

pagehelper:
  helper-dialect: postgresql
  reasonable: true
  support-methods-arguments: true
  params: countSql

Step3:配置运行类 Application 添加pagehelp插件,在main方法之后被加载
 

// mapper 接口类扫描包配置
@MapperScan(basePackages = "com.xxx.springbootdemo.mapper")
@SpringBootApplication
public class SpringBootDemoApplication {

	public static void main(String[] args) {

		SpringApplication.run(SpringBootDemoApplication.class, args);
		System.out.println("start success");
	}

	//配置mybatis的分页插件pageHelper
	@Bean
	public PageHelper pageHelper(){
		PageHelper pageHelper = new PageHelper();
		Properties properties = new Properties();
		properties.setProperty("offsetAsPageNum","true");
		properties.setProperty("rowBoundsWithCount","true");
		properties.setProperty("reasonable","true");
		properties.setProperty("dialect","postgresql");    //配置postgresql数据库的方言支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库
		pageHelper.setProperties(properties);
		return pageHelper;
	}

}

Step4:可以使用了!

Controller层:(PageRequest中的属性是page和row)

/**
     * 分页查询所有图书信息
     * @param request
     * @return
     */
    @RequestMapping(value = "/getAllBooks", method = RequestMethod.POST)
    public Result getAllBooks(@Valid @RequestBody PageRequest request) {
        PageInfo<BookPO> pageInfo = null;
        pageInfo = bookService.getAllBooks(request.getPage(), request.getRow());
        logger.info("获取图书列表成功, param page:{}, row:{}", request.getPage(), request.getRow());
        return Result.isSuccess(MessageEnum.GET_ALL_BOOK_SUCCESS, pageInfo);
    }

Service层:

public PageInfo<BookPO> getAllBooks(int page, int row) {
        PageHelper.startPage(page, row, true);
        PageHelper.orderBy("card");//根据card字段排序
        List<BookPO> listPO = bookPOMapper.findAllBooks();
        PageInfo<BookPO> pageInfo = new PageInfo<>(listPO);
        logger.info("service getAllBooks param page:{}, row:{}", page, row);
        return pageInfo;
    }

Mapper:

<select id="findAllBooks" resultMap="BaseResultMap">
     select * from book_table
</select>

2.PageHelper在不同层之间的转换

        如果传给前端的PageInfo的List中的数据类型为BookVO,则需要将BookPO转换为BookVO再放入pageInfo。

        如果将先BookPO转换为BookVO,再把List<BookVO>放入pageInfo,就会丢失pageInfo的一些信息,比如数据总条数等

        所以应该将dao获取到的数据直接传递给PageInfo对象中就不会出现该问题。

Service层代码如下:

public PageInfo<BookVO> getAllBooks(int page, int row) {
        PageHelper.startPage(page, row, true);
        PageHelper.orderBy("card");
        List<BookPO> listPO = bookPOMapper.findAllBooks();

        PageInfo<BookVO> pageInfo = new PageInfo<>();
        BeanUtils.copyProperties(new PageInfo<>(listPO), pageInfo);

        pageInfo.setList(listPO.stream().map(bookPO -> new BookVO().convertBookPO(bookPO)).collect(Collectors.toList()));
        logger.info("service getAllBooks param page:{}, row:{}", page, row);
        return pageInfo;
    }

BookVO.convertBookPO(BookPO po):

public BookVO convertBookPO(BookPO bookPO){
        BookVO bookVO = new BookVO();
        BeanUtils.copyProperties(bookPO, bookVO);
        return bookVO;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值