前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pagehelper和通用mapper与springboot整合

pagehelper和通用mapper与springboot整合

作者头像
山行AI
发布2019-07-12 15:15:39
1.3K0
发布2019-07-12 15:15:39
举报
文章被收录于专栏:山行AI山行AI

网上有很多pagehelper、通用mapper这些与springboot整合的例子,这里结合自己使用的一些习惯进行整理。

1. pageHelper的使用

关于pageHelper的使用,其官方文档中介绍的比较清楚,地址为:https://pagehelper.github.io/docs/howtouse/

这里我只介绍一些比较容易忽略的点:

  • 分页信息是放在threadLocal中维护的:
代码语言:javascript
复制
 protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();    /**     * 设置 Page 参数     *     * @param page     */    protected static void setLocalPage(Page page) {        LOCAL_PAGE.set(page);    }
  • 需要使用pagehelper按照myibatis的拦截器规则实现的PageInterceptor:配置文件形式:

在拦截器中通过操作io处理线程的threadLocal变量来获取分页参数的,这里关于threadLocal的坑,在之前讲注入用户信息时有介绍过,在这就不再聊了,需要了解的自行翻阅历史文章查看。

  • 通常用的使用方式:
代码语言:javascript
复制
//支持 ServletRequest,Map,POJO 对象,需要配合 params 参数PageHelper.startPage(request);//紧跟着的第一个select方法会被分页// 可以使用((Page) list强转成Page类型List<Country> list = countryMapper.selectIf(1);//后面的不会被分页,除非再次调用PageHelper.startPage//这里返回的是Collection类型List<Country> list2 = countryMapper.selectIf(null);

Page类的介绍:

代码语言:javascript
复制
public class Page<E> extends ArrayList<E> implements Closeable 

在这里需要注意的一点是:Page是List的子类,在分页时,实际返回的结果list类型是Page,如果想取出分页信息,需要强制转换为Page或者使用PageInfo(内部也是转成Page来处理的)

  • PageInfo的使用,想通过分页返回的list获取分页信息的另一个方法是使用PageInfo:
代码语言:javascript
复制
//获取第1页,10条内容,默认查询总数countPageHelper.startPage(1, 10);List<Country> list = countryMapper.selectAll();//用PageInfo对结果进行包装PageInfo page = new PageInfo(list);//测试PageInfo全部属性//PageInfo包含了非常全面的分页属性

看下PageInfo的代码就一目了然了:

代码语言:javascript
复制
 /**     * 包装Page对象     *     * @param list          page结果     * @param navigatePages 页码数量     */    public PageInfo(List<T> list, int navigatePages) {        if (list instanceof Page) {            Page page = (Page) list;            this.pageNum = page.getPageNum();            this.pageSize = page.getPageSize();            this.pages = page.getPages();            this.list = page;            this.size = page.size();            this.total = page.getTotal();            //由于结果是>startRow的,所以实际的需要+1            if (this.size == 0) {                this.startRow = 0;                this.endRow = 0;            } else {                this.startRow = page.getStartRow() + 1;                //计算实际的endRow(最后一页的时候特殊)                this.endRow = this.startRow - 1 + this.size;            }        } else if (list instanceof Collection) {            this.pageNum = 1;            this.pageSize = list.size();            this.pages = this.pageSize > 0 ? 1 : 0;            this.list = list;            this.size = list.size();            this.total = list.size();            this.startRow = 0;            this.endRow = list.size() > 0 ? list.size() - 1 : 0;        }        if (list instanceof Collection) {            this.navigatePages = navigatePages;            //计算导航页            calcNavigatepageNums();            //计算前后页,第一页,最后一页            calcPage();            //判断页面边界            judgePageBoudary();        }    }

可以看到,在将list传入PageInfo时,会根据list的原始类型进行转变,从而获取分页信息。

2. pagehelper与springboot的整合

配置文件时代,pageHelper主要是在myibatis的配置文件中存在的。在springboot中,与pagehelper的整合方式如下:

引入maven:

代码语言:javascript
复制
 <dependency>    <groupId>com.github.pagehelper</groupId>    <artifactId>pagehelper</artifactId>    <version>5.1.2</version></dependency><dependency>    <groupId>com.github.pagehelper</groupId>    <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>    <version>1.2.3</version></dependency><dependency>    <groupId>com.github.pagehelper</groupId>    <artifactId>pagehelper-spring-boot-starter</artifactId>    <version>1.2.3</version></dependency>

application.yml配置:

代码语言:javascript
复制
pagehelper:    helperDialect: mysql    reasonable: true    supportMethodsArguments: true    params: count=countSql

使用方式:

代码语言:javascript
复制
PageHelper.startPage(1, 10);List<UserEntity> users=userMapper.getAll();PageInfo<UserEntity> pageInfo = new PageInfo<UserEntity>(users);

分析:

关于原因,看看下面这个类就清晰了:

3. 通用mapper

通用mapper与springboot的整合:

依赖:

代码语言:javascript
复制
<dependency>    <groupId>tk.mybatis</groupId>    <artifactId>mapper</artifactId>    <version>3.4.3</version></dependency><dependency>    <groupId>tk.mybatis</groupId>    <artifactId>mapper-spring-boot-starter</artifactId>    <version>1.2.3</version></dependency>

启动类上加上注解:

代码语言:javascript
复制
@MapperScan(value = "com.*.dao.mapper",markerInterface = BaseMapper.class)

然后就可以正常使用通用mapper了。

通用mapper的文档和代码生成工具

见官方文档:https://github.com/abel533/Mapper/wiki/1.integration

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发架构二三事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. pageHelper的使用
  • 2. pagehelper与springboot的整合
    • 引入maven:
      • application.yml配置:
        • 使用方式:
          • 分析:
          • 3. 通用mapper
            • 通用mapper与springboot的整合:
              • 通用mapper的文档和代码生成工具
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档