当前位置 : 主页 > 编程语言 > java >

SpringBoot配置使Mybatis打印SQL执行时的实际参数值操

来源:互联网 收集:自由互联 发布时间:2021-04-03
问题描述 在开发过程中,默认配置下SpringBoot和Mybatis正常结合运行,但在打印的日志中动态sql中的参数位置显示的是,当sql执行违背预期时不免是因为传到Mapper中sql参数值不正确所导致

问题描述

在开发过程中,默认配置下SpringBoot和Mybatis正常结合运行,但在打印的日志中动态sql中的参数位置显示的是?,当sql执行违背预期时不免是因为传到Mapper中sql参数值不正确所导致,这时候如果调试能查看sql执行时占位符处的值,这无疑能让问题展示得更加直观,如何在SpringBoot、Mybatis的框架下使日志中打印出sql执行时获得的实际参数呢?

问题表现

解决办法

在SpringBoot项目中的配置文件application.properties或者bootstrap.properties添加如下内容

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

如果如果文件为yml的格式则在application.yml或者bootstrap.yml文件中添加如下内容

mybatis:

configuration:

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

效果

配置后效果如下

补充知识:mybatis 显示参数${} #{},${}适用场景 miniui sortField sortOrder

最近配合miniui 排序,发现用${} 可以直接使用 sortField、sortOrder 里面的值进行排序,而用#{} 就不行了

查了下 这两个区别:

1.#{} 传参,sql语句解析会加上"",

例如

select * from report where orgname= #{orgname}, 结果会是 select * fromreport whereorgname= ‘花果山'

2.${} 传参,mybatis不会修改或转义字符串,

select * from report order by ${sortField}, 结果会是 select * fromreport order by orgname.

#{}传参能防止sql注入,mybatis会创建preparedstatement 并以它为背景设置安全的值

使用${field}不应该允许用户输入这些field,或者通常自行转义并检查。

以上这篇SpringBoot配置使Mybatis打印SQL执行时的实际参数值操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

网友评论