1. 程式人生 > 程式設計 >SpringBoot配置使Mybatis列印SQL執行時的實際引數值操作

SpringBoot配置使Mybatis列印SQL執行時的實際引數值操作

問題描述

在開發過程中,預設配置下SpringBoot和Mybatis正常結合執行,但在列印的日誌中動態sql中的引數位置顯示的是?,當sql執行違背預期時不免是因為傳到Mapper中sql引數值不正確所導致,這時候如果除錯能檢視sql執行時佔位符處的值,這無疑能讓問題展示得更加直觀,如何在SpringBoot、Mybatis的框架下使日誌中打印出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

效果

配置後效果如下

SpringBoot配置使Mybatis列印SQL執行時的實際引數值操作

補充知識: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執行時的實際引數值操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。