测试环境:spring boot +mybatis
1.任意编写一个sql查询语句:
<select id="queryById" parameterType="String" resultMap="resultMap">
select a.* from gd_auths a join gd_role_auths b on
a.auth_id = b.auth_id
where b.role_id = #{role_id}
</select>
2.编写 @Mapper类
@Mapper
public interface AuthsMapper {
List<Auths> queryById(String id);
}
3.编写 @Service实现类
@Service
public class AuthsServiceImpl implements AuthsService {
@Autowired
private AuthsMapper authsMapper;
@Override
public List<Auths> queryById(String id) {
return authsMapper.queryById(id);
}
}
4.编写@controller类。
@RestController
@RequestMapping("/auths")
public class AuthsController {
@Autowired
private AuthsService authsService;
@GetMapping("/list")
public void getList(){
List<Auths> list = authsService.queryById("932935269877944320");
}
}
5.编写切片类
@Aspect
@Component
public class AspectAuthsService {
//定义切入点
@Pointcut("execution(* com.zhx.iptz.project.service.AuthsService.queryById(..))")
public void pc(){};
//环绕通知
@Around("pc()")
public void around(ProceedingJoinPoint pjp) throws Throwable {
//记录方法执行前系统时间
Long before = System.currentTimeMillis();
//执行方法
pjp.proceed();
//记录方法执行后系统时间
Long after = System.currentTimeMillis();
Signature pjpSignature = pjp.getSignature();
//获取执行方法所在的接口名
String declaringTypeName = pjpSignature.getDeclaringTypeName();
//获取执行的方法名
String name = pjpSignature.getName();
//打印输出
System.out.println(declaringTypeName+"."+name+" runtime:"+(after-before)+"ms");
}
}
这里使用的是环绕通知的方式,记录目标方法执行前后的系统时间,相减就能得到我们查询语句执行时间。
启动项目:访问controller中的url,在控制台查看打印输出。
com.project.service.impl.AuthsServiceImpl.queryById runtime:139ms
上述实现了应用spring AOP 实现对查询语句性能测试。