springboot2.0 使用aop实现PageHelper分页
参考:
https://blog.csdn.net/qq_24076135/article/details/85212081
https://www.jianshu.com/p/036d31ae77d3
一、编写分页实体类
/**
* 此类用于返回分页结果集
* @param <T>
*/
public class PageResult<T> { private Long total;
private Integer totalPage;
private List<T> rows; public PageResult() {
} public PageResult(List<T> rows) {
this.rows = rows;
PageInfo pageInfo = new PageInfo(rows);
this.total = pageInfo.getTotal();
} public PageResult(Long total, List<T> rows) {
this.total = total;
this.rows = rows;
} public PageResult(Long total, Integer totalPage, List<T> rows) {
this.total = total;
this.totalPage = totalPage;
this.rows = rows;
} public Long getTotal() {
return total;
} public void setTotal(Long total) {
this.total = total;
} public Integer getTotalPage() {
return totalPage;
} public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
} public List<T> getRows() {
return rows;
} public void setRows(List<T> rows) {
this.rows = rows;
}
}
二、未使用aop时,编写service层
public PageResult<Device> selectList(Map<String,Object> map) {
this.page = Integer.parseInt((String) map.get("page"));
this.size = Integer.parseInt((String) map.get("size"));
PageHelper.startPage(this.page,this.size);
List<Device> devices = this.deviceMapper.selectList(map);
PageInfo<Device> pageInfo = new PageInfo<>(devices);
return new PageResult<>(pageInfo.getTotal(),pageInfo.getList());
}
使用aop后:
public PageResult<Device> selectList(Map<String,Object> map) {
List<Device> devices = this.deviceMapper.selectList(map);
return new PageResult<Device>(devices);
}
分离的部分:
this.page = Integer.parseInt((String) map.get("page"));
this.size = Integer.parseInt((String) map.get("size"));
PageHelper.startPage(this.page,this.size);
PageInfo<Device> pageInfo = new PageInfo<>(devices);
三、dao层(即mapper)
public interface DeviceMapper { public List<Device> selectList(Map<String,Object> map);
}
四、Controller层(有待优化)
@GetMapping("/list")
public ResponseEntity<PageResult<Device>> selectList(@RequestParam Map<String,Object> map){
PageResult<Device> result = this.deviceService.selectList(map);
if(CollectionUtils.isEmpty(result.getRows())){
result = null;
return ResponseEntity.ok(result);
}
return ResponseEntity.ok(result);
}
五、重点:编写aop切面类
@Component
@Aspect
@Slf4j
public class PageHelperAspect { @Pointcut("execution(* cn.factory.service.impl.*.*(..))")
public void pageFunction(){}; @Around("pageFunction()")
public Object serviceImplAop(ProceedingJoinPoint pjp){
try {
log.info("进入pagehelper aop"); //获取连接点方法运行时的入参列表
Object[] args = pjp.getArgs(); Map<String,Object> map = (Map<String,Object>)args[0]; // 获取连接点的方法签名对象
Signature signature = pjp.getSignature(); // 获取连接点所在的类的对象(实例)
Object target = pjp.getTarget(); PageHelper.startPage(Integer.parseInt((String) map.get("page")),Integer.parseInt((String) map.get("size"))); log.info("方法[{}]开始执行.....",signature.getName());
// 调用业务层方法,执行sql语句
Object object = pjp.proceed();
log.info("方法[{}]执行结束....",signature.getName());
// if (object instanceof List) {
// List objList = (List) object;
// PageInfo pageInfo = new PageInfo<>(objList);
// return pageInfo;
// }
return object;
} catch (Throwable throwable) {
log.info("pageInfo aop执行失败....");
throw new RuntimeException(throwable);
} finally {
log.info("serviceImplAop执行结束.....");
}
}
}
附上所需的依赖:如果依赖版本不匹配或者错误可能会出现net.sf.jsqlparser.statement.select.PlainSelect.getGroupByColumnReferences()Ljava/util/List;] with root cause此类错误
<!-- web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- mybatis的启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- 通用mapper启动器 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
</dependency> <!-- mybatis的分页插件 -->
<!--pageHelper基本依赖 -->
<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.5</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
<!-- jdbc启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- springboot检测服务启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.19</version>
</dependency> <!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<!--加密-->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
springboot2.0 使用aop实现PageHelper分页的更多相关文章
- SpringBoot2.0 使用AOP统一处理Web请求日志(完整版)
一,加入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- pageHelper分页
引入jar包 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pag ...
- spring-boot-2.0.3源码篇 - pageHelper分页,绝对有值得你看的地方
前言 开心一刻 说实话,作为一个宅男,每次被淘宝上的雄性店主追着喊亲,亲,亲,这感觉真是恶心透顶,好像被强吻一样.........更烦的是我每次为了省钱,还得用个女号,跟那些店主说:“哥哥包邮嘛么叽. ...
- SpringBoot2.0 基础案例(10):整合Mybatis框架,集成分页助手插件
一.Mybatis框架 1.mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获 ...
- SpringBoot2.0之五 优雅整合SpringBoot2.0+MyBatis+druid+PageHelper
上篇文章我们介绍了SpringBoot和MyBatis的整合,可以说非常简单快捷的就搭建了一个web项目,但是在一个真正的企业级项目中,可能我们还需要更多的更加完善的框架才能开始真正的开发,比如连接池 ...
- SpringBoot2.0+Mybatis+PageHelper+Redis实现缓存
1.在maven引入相关的依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactI ...
- SpringBoot2.0 基础案例(11):配置AOP切面编程,解决日志记录业务
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.AOP切面编程 1.什么是AOP编程 在软件业,AOP为Asp ...
- spring-boot-2.0.3应用篇 - shiro集成
前言 上一篇:spring-boot-2.0.3源码篇 - 国际化,讲了如何实现国际化,实际上我工作用的模版引擎是freemaker,而不是thymeleaf,不过原理都是相通的. 接着上一篇,这一篇 ...
- spring-boot-2.0.3之quartz集成,不是你想的那样哦!
前言 开心一刻 晚上回家,爸妈正在吵架,见我回来就都不说话了,看见我妈坐在那里瞪着我爸,我就问老爸“你干什么了惹我妈生这么大气?” 我爸说“没有什么啊,倒是你,这么大了还没有媳妇,要是你有媳妇给我们 ...
随机推荐
- eclipse如何实现智能提示功能
一直时候用idea很久没有使用eclipse了,idead的ctrl+鼠标滚轮是可以调节字体大小,这项功能是我的最爱. 早就忘记eclipse的智能助手设置,今天翻下以前的笔记,觉得还是做个博客方便今 ...
- ST表 (模板) 洛谷3865
题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1) O(1) 题目描述 给定一个长度为 N N 的数列,和 M M ...
- 暑假集训test-8-28
大概是从我一年以来做过的最傻逼的一套题了.. 一个半小时打完三个程序三个暴力拍完以为自己AK了,开心地耍了两个小时. 结果T3要写高精,LL炸了后4个点,中间还有个点是啥都不选的,我没用0去更新又炸了 ...
- KiFastCallEntry() 机制分析
1. 概述 从 windows xp 和 windows 2003 开始使用了快速切入内核的方式提供系统服务例程的调用. KiFastCallEntry() 的实现是直接使用汇编语言,C 语言不能直接 ...
- 关于“回归自然”onepage的总结
(1)消除li 前面的点 使用 ul {list-style:none; } 并且ul之外会有一个容器,nav等 利用margin值保持和其他元素的等高度. (2) <h1>回归自然< ...
- sql语句中----删除表数据drop、truncate和delete的用法(转)
转载于:http://www.cr173.com/html/40708_1.html 说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟 ...
- 2D转换中的translate里调用matrix()的用法
一开始,经常看到大佬们用matrix的方法,当时完全不会,不知道如何写.到后面,发现都是这样用,导致只能去认真看一下这个东西怎么用,要不然完全跟不上的节奏啊.因此建议大家去看下这篇文章,写的挺不错的, ...
- boost库之pool编译错误
1,编译错误截图 2,解决方法 这是由于没有链接对应的库导致的错误,在编译命令中加上 -lboost_system选项即可.
- 《DSP using MATLAB》Problem 8.44
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- 12-FileZilla-响应:550 Permission denied
window系统安装FileZilla与虚拟机上的Ubuntu传输文件: 状态:连接正常 问题:传输文件失败 报错:550 Permission denied 解决方法: 这是由于ftp服务器配置的问 ...