最近用MyBatis做开发的时候发现,MyBatis有个小小的缺点,不支持批量update?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最近用MyBatis做开发的时候发现,MyBatis有个小小的缺点,不支持批量update?相关的知识,希望对你有一定的参考价值。

这里的批量更新不是对一批数据只更改相同的状态,而是每条update语句均不一样。MyBatis可以做批量insert,把多个插入语句拼接成一条sql,Mybatis的驱动可以支持,但是,多个update拼接成一条update传给Mybatis的时候,就提示出现语法问题了。最后只能用JdbcTemplate来实现了。这个Mybatis究竟有没有批量的update?

参考技术A 有的
Configuration c= this.getSqlSession().getConfiguration();
ManagedTransactionFactory managedTransactionFactory = new ManagedTransactionFactory();
BatchExecutor batchExecutor=new BatchExecutor(c,managedTransactionFactory.newTransaction(this.getSqlSession().getConnection(),false));
int i = 0;
for (T entity : collection)
batchExecutor.doUpdate(c.getMappedStatement(sql), entity);
if (i++ > 0 && i % BATCH_SIZE == 0)
batchExecutor.doFlushStatements();


batchExecutor.doFlushStatements();本回答被提问者和网友采纳
参考技术B 你可以写存储过程的实现你那个批量update, 参考技术C 是更新一个表的数据吗?要是一张表的话、使用if应该可以吧

通过aop拦截mybatis接口dao

最近开发的客服系统遇到了这样一个问题:微信渠道发送消息时如果nickname带有emoji表情,后台则会报消息无法插入数据库的错误,导致微信端一直无法进入人工,错误如下:


经查证,是由于后台在使用mybatis插入数据库时没有对emoji做转换处理,导致无法插入数据库,故而报错


由于mybatis使用的接口的形式跟mysql映射的,刚开始还以为aop无法拦截接口,结果验证,aop是可以拦截mybatis接口(即mybatis只有接口而没有相应的实现类)的,

最终解决方案如下:

1、  新增一个aop切面类,该切面类拦截所有MessageInfoDao的insert(MessageInfomessageInfo)方法,拦截到之后对messageIn

以上是关于最近用MyBatis做开发的时候发现,MyBatis有个小小的缺点,不支持批量update?的主要内容,如果未能解决你的问题,请参考以下文章

通过aop拦截mybatis接口dao

通过aop拦截mybatis接口dao

mybatis实战教程(mybatis in action),mybatis入门到精通

一起了解Hibernate与Mybatis的区别优缺点对比

MyBatis3入门

MyBatis学习与使用