前段时间一个项目用MyBatis做DAO,遇到了一些问题记录一下,希望可以帮助遇到同样问题的朋友。
1. org.apache.ibatis.binding.BindingException异常
原本代码没问题,升级MyBatis版本后遇到。原因是在较新版本中,如果参数多于一个的时候,没处理好会报这样的错误。处理方法是添加@Param参数指定参数名称
void insertData(@Param("id")String id, @Param("title")String title);
使用Map和Entity作为参数时没这个问题,建议尽量这样使用。
// 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在控制台打印MyBatis sql语句
团队同事甚至还在代码中直接打印sql,这样既杂乱又无法反应出绑定变量的值。只需要在application.properties文件中添加:
logging.level.com.kian.mapper=debug
其中com.kian.mapper是我mapper的包路径
debug应用的时候就能看到如下的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