前段時(shí)間一個(gè)項(xiàng)目用MyBatis做DAO遣铝,遇到了一些問(wèn)題記錄一下,希望可以幫助遇到同樣問(wèn)題的朋友莉擒。
1. org.apache.ibatis.binding.BindingException異常
原本代碼沒(méi)問(wèn)題酿炸,升級(jí)MyBatis版本后遇到。原因是在較新版本中涨冀,如果參數(shù)多于一個(gè)的時(shí)候填硕,沒(méi)處理好會(huì)報(bào)這樣的錯(cuò)誤。處理方法是添加@Param參數(shù)指定參數(shù)名稱
void insertData(@Param("id")String id, @Param("title")String title);
使用Map和Entity作為參數(shù)時(shí)沒(méi)這個(gè)問(wèn)題鹿鳖,建議盡量這樣使用扁眯。
// 1. entity
// mapper
@InsertProvider(type = SalesOrderSqlProvider.class, method = "replace")
void save(SalesOrder salesOrder);
// SalesOrderSqlProvider.java
public String replace(SalesOrder salesOrder) {
// 2. map
// mapper
@SelectProvider(type = SalesOrderSqlProvider.class, method = "select")
List<Map> getList(Map<String, Object> param);
// SalesOrderSqlProvider.java
public String select(Map<String, Object> params) {
2. SpringBoot在控制臺(tái)打印MyBatis sql語(yǔ)句
團(tuán)隊(duì)同事甚至還在代碼中直接打印sql,這樣既雜亂又無(wú)法反應(yīng)出綁定變量的值翅帜。只需要在application.properties文件中添加:
logging.level.com.kian.mapper=debug
其中com.kian.mapper是我mapper的包路徑
debug應(yīng)用的時(shí)候就能看到如下的sql日志
2018-09-26 15:26:51.736 DEBUG 16696 --- [nio-9999-exec-4] c.n.c.w.d.m.LoginMapper.markInActive : ==> Preparing: update core_user_login set active = false, last_modified_date = current_timestamp where (wx_user_id = ? or email = ?) and active
2018-09-26 15:26:51.736 DEBUG 16696 --- [nio-9999-exec-4] c.n.c.w.d.m.LoginMapper.markInActive : ==> Parameters: test(String), test@test.com(String)
2018-09-26 15:26:51.745 DEBUG 16696 --- [nio-9999-exec-4] c.n.c.w.d.m.LoginMapper.markInActive : <== Updates: 1