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

网友投稿 2351 2023-03-05

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

SpringBoot配置使Mybatis打印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.logginglknzhMwR.stdout.StdOutImpl

效果

配置后效果如下

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

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

查了下 这两个区别:

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

例如

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

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

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信电脑无法打开小程序(电脑上微信无法打开小程序)
下一篇:mybatis打印SQL,并显示参数的实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~