Aop整合pagehelper插件
使用AOP编程解决分页代码重复的问题
@Around("execution(* *..*Service.*pager(..))")
public Object invoke(ProceedingJoinPoint args)
语法结构:execution(方法修饰符 方法返回值 方法所属类 匹配方法名 ( 方法中的形参表 ) 方法申明抛出的异常 )
"*" :代表一个任意类型的参数;
“..”:代表零个或多个任意类型的参数。
创建PageAspect.java类
package com.hsl.ssm.aspect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hsl.ssm.util.PageBean;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author water
* @site www.water.com
* @company xxx公司
* @create 2019-11-17 18:55
*/
@Component
@Aspect
public class PageAspect {
@Around("execution(* *..*Service.*pager(..))")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
Object[] args = joinPoint.getArgs();
PageBean pageBean=null;
for (Object arg : args) {
if(arg instanceof PageBean){
pageBean=(PageBean)arg;
break;
}
}
if(pageBean!=null&& pageBean.isPagination()){
PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
}
Object proceed = joinPoint.proceed(args);
if(pageBean!=null&& pageBean.isPagination()){
PageInfo pageInfo=new PageInfo((List) proceed);
pageBean.setTotal(pageInfo.getTotal()+"");
}
return proceed;
}
}
测试:
GoodsMapper.java
List<Map> listPage(Map map);
GoodsMapper.xml
<select id="listPage" resultType="java.util.Map" parameterType="java.util.Map" >
select * from goods
<where>
<if test="gName!=null and gName != ''">
g_name like #{gName}
</if>
</where>
</select>
GoodsService.java接口
List<Map> listPage(Map map, PageBean pageBean);
GoodsService.java实现类GoodsServiceImpl.java
@Override
public List<Map> listPage(Map map, PageBean pageBean) {
return goodsMapper.listPage(map);
}
测试类:
@Test
public void listPage() {
Map map = new HashMap();
map.put("gName", "%qq%");
PageBean pageBean = new PageBean();
List<Map> list = this.goodsService.listPage(map, pageBean);
for (Map map1 : list) {
System.out.println("信息:" + map1);
}
}
测试结果: