Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

com.github.dreamroute:sqlprinter-spring-boot-starter

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

com.github.dreamroute:sqlprinter-spring-boot-starter

print sql use real value replace '?' in sql fragment.

  • 2.3.19-RELEASE
  • Source
  • Maven
  • Socket score

Version published
Maintainers
1
Source

sqlprinter SQL打印插件

MyBatis Simple SQL Print Plugin

mybatis

Get Start...

<dependency>
    <groupId>com.github.dreamroute</groupId>
    <artifactId>sqlprinter-spring-boot-starter</artifactId>
    <version>latest version</version>
</dependency>

最新版本:点击查看


描述:本插件主要是为了解决输出的sql中参数是问号'?'形式不易观察,而使用真实值替换掉问号'?'。生产环境如果不需要此插件(设置成false即可)。
如果应用中使用了mybatis plus,那么打印sql没问题,但是格式化可能不成功,不影响业务,这是由于mybatis plus操蛋的改动了mybatis的插件接口


兼容性

如果你项目中使用了类似mybatis plus这种框架,优先使用mybatis plus依赖的mybatis,排除本插件的依赖,如下:

<dependency>
   <groupId>com.github.dreamroute</groupId>
   <artifactId>sqlprinter-spring-boot-starter</artifactId>
   <version>xxx.version</version>
   <exclusions>
       <exclusion>
           <artifactId>mybatis</artifactId>
           <groupId>org.mybatis</groupId>
       </exclusion>
   </exclusions>
</dependency>

使用方式,Spring Boot项目:

  1. 版本2.0.0之后:在启动类上使用@EnableSQLPrinter即可开起(如果生产环境不希望显示sql,在application.yml/properties中配置sqlprinter.show=false即可)
  2. 是否格式化SQL,默认不格式化,可以配置(sqlprinter.format = true)来格式化SQL,对于一些比较特殊的SQL,如果格式化失败,那么会打印未被格式化时的sql,这时候会打印错误日志, 但是不会对业务造成任何影响,如果在乎错误日志,觉得错误日志不好看,那么可以关闭格式化功能

    格式化的好处:1. 系统打印的SQL很整齐,风格一致;2. 由于mybatis使用动态标签,如果不格式化,那么打印的SQL会移除不满足条件的动态标签,显得SQL很凌乱

  3. 过滤功能:对于有一些sql打印比较频繁,不希望展示在日志中,那么可以在application.yml/properties中配置中配置sqlprinter.filter数组(数组内容就是Mapper接口的方法名),如下:
    sqlprinter:
      show: true
      filter:
        - com.github.dreamroute.sqlprinter.boot.mapper.UserMapper.selectById
        - com.github.dreamroute.sqlprinter.boot.mapper.UserMapper.selectAll
    
    那么selectById和selectAll方法就不会打印sql了。
  4. 对于查询sql,显示查询结果,整条效果如下:
==> com.github.dreamroute.sqlprinter.boot.mapper.UserMapper.selectUserByIds
SELECT *
FROM smart_user
WHERE id IN (1, 2)
  1. 配置项:
sqlprinter.show-result = true/false(是否显示查询结果,默认true)
|==========================================================|
| id | name       | password | version | birthday | gender |
|==========================================================|
| 1  | w.dehai    | null     | 0       | null     | null   |
| 2  | Dreamroute | null     | 0       | null     | null   |
|==========================================================|

2. 效果:

之前:insert into xxx (name, password) values (?, ?)

之后:insert into xxx (name, password) values ('tom', '123456')


2.1. 自定义显示内容

  1. 在插件打印SQL的时候,对于有些特殊数据类型,可能插件默认打印方式不符合你的要求,比如日期类型Date默认打印的就是Date类型 调用toString方法的结果,类似这样Tue Sep 07 16:25:28 CST 2021,而你需要的是2021-09-07 16:25:028.673,如果从控制台或者日志文件中直接复制带有这种Tue Sep 07 16:25:28 CST 2021时间的sql去数据库执行,很有可能会报错, 这时你就可以自定义日期类型的打印格式,打印成2021-09-07 16:25:028.673这种易读并且可以直接用于执行的格式。
  2. 对于Date参数,希望打印yyyy-MM-dd HH:mm:ss.SSS类型的日期
  3. 创建日期转换器类,实现ValueConverter接口:
public class DateConverter implements ValueConverter {
    @Override
    public Object convert(Object value) {
        if (value instanceof Date) {
            value = DateUtil.format((Date) value, "yyyy-MM-dd HH:mm:ss");
        }
        return value;
    }
}
  1. @EnableSQLPrinter的属性converters中加入即可,比如@EnableSQLPrinter(converters = {DateConverter.class, EnumConverter.class})
  2. 此时你的属性为Date的字段打印的就是2021-09-07 16:25:028.673这种格式的了
  3. 框架已经内置提供了两个现成的转换工具,你可以直接使用,分别是日期枚举值转换工具,如果满足你的需求就用,不满足就自定义,在def包下:
    1. com.github.dreamroute.sqlprinter.starter.converter.def.DateConverter
    2. com.github.dreamroute.sqlprinter.starter.converter.def.EnumConverter

3.插件说明:

1. 本插件是为了方便程序员观察真实sql的打印情况(问号'?'已经被真实值替换),特别是参数较多的sql,很直观清晰,可以直接复制sql在数据库中执行,非常友好。<br>
2. 本插件仅仅是打印sql,插件内部不会破坏mybatis的任何核心,也不会和任何其他插件造成冲突,可以放心使用。

4.关于插件:

如果您有什么建议或者意见,欢迎留言,也欢迎pull request,作者会将你优秀的思想加入到插件里面来,为其他人更好的解决问题。

5.Demo

本项目可以直接pull到本地执行单元测试观察效果

7.关于作者:

作者QQ:342252328
作者邮箱:342252328@qq.com

FAQs

Package last updated on 06 Aug 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc