最近项目用上了mybatis, 但是想像hibernate那样能打印sql, 于是写了个基于mybatis拦截器的sql打印, 参考这个https://blog.22xcode.com/post/78
然后, 碰到了问题, 拦截器会重复输出一句sql
mybatis sql: SELECT id, name FROM user
mybatis sql: SELECT id, name FROM user
排查下, 项目里跟mybatis有关的就只有pagehelper了, 猜测可能是pagehelper 为了分页再发了一条算总数count的sql, 而打印sql的拦截器没有获取到count查询的完整sql, 所以看上去发了两遍一样的sql
网上找了下拦截器的资料, 发现基本都是这个样子
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Th2xecl-1656070640683)(/storage/thumbnails/_signature/3PUPLE2S14QE5OG0JJL7RED3FL.png)]
大概意思就是后定义/加载的拦截器会先执行.
于是更改配置, 将sql打印拦截器在pagehelper的拦截器之后执行
@Autowired
private List<SqlSessionFactory> sqlSessionFactoryList;
/**
* 在分页拦截器后加载
*/
@Autowired
PageHelperAutoConfiguration pageHelperAutoConfiguration;
@PostConstruct
public void registerInterceptor() {
if (enableSqlLog) {
MybatisS