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