之前做项目,一般会有一张,用户操作记录的数据表,里面主要包括一些,用户请求的URL和请求参数,用以记录用户做过哪些事情。并没有以文件的形式来做记录,当然只适合于一些用户量特别少的系统。
而Mybatis打印SQL这个就比较常见了,但是还要保存SQL到数据库就不那么常见了,最近我遇到了一个这样的需求(当然我是为了操作方便,具体业务就不叙说了),主要实现的就是一个把打印的sql给保存起来
其中保存的sql是最终的sql,也就是说,这个sql拿出来是可以直接在数据库客户端执行的!目前这种方式只适合 使用Druid数据库连接池配置的打印SQL的方式
首先上配置
上图 是一个简单的Druid连接池的配置,终点看logFilter 里面的属性的值表示打印sql,我们随便操作一下就会打印许多sql
如图
可以发现一条数据库操作会打印多条sql,但其中只有青色的框是我们想要的保存的SQL,同时后面还跟着Log4jFilter.java:137,然后找到Log4jFilter.java ,使用IDE可以直接在Druid配置文件中,点进Log4jFilter class文件中,
然后你会发现,这个类并没有137行,总共才130行代码
同时,发现这个类继承了LogFilter 类 且实现了Log4jFilterMBean的接口
我们先进LogFilter 类看一看:
通过之前打印的SQL 我们可以看到 在我们想要的SQL前面,打印了如下字符
应该可以想到其中executed. 是硬编码进去的,所以我们在这个类中搜索这个字符串,找到了好几个,
但是只有两个是比较相符的,
那么究竟是第一个还是第二个呢,实际上这个时候从字面上就可以看出来了,第一个是没有参数的打印SQL语句,第二个是有参数的打印SQL语句
所以当是有条件的查询,