tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现。
批量更新网上主要有2种方式:ca when方式、foreach方式
但是foreachzhe这种方式效率非常低下,不知道为何那多么帖子在流传,请看我另一个文章。
扩展tk.mybatis的批量更新,采用ca when方式,源码干货如下:
首先定义下mapper接口
import org.apache.ibatis.annotations.updateprovider;import java.util.list;/** * 批量update * * @param <t> 不能为空 */@tk.mybatis.mapper.annotation.registermapperpublic interface updatebatchbyprimarykeylectivemapper<t> { /** * 根据example条件批量更新实体`record`包含的不是null的属性值 * * @return */ @updateprovider(type = batchexampleprovider.class, method = "dynamicsql") int updatebatchbyprimarykeylective(list<? extends t> recordlist);}
实现updatepriupdateprovider,使用ca when方式拼写mapper动态语句,必须id为主键
import org.apache.ibatis.mapping.mappedstatement;import tk.mybatis.mapper.entity.entitycolumn;import tk.mybatis.mapper.mapperhelper.entityhelper;import tk.mybatis.mapper.mapperhelper.mapperhelper;import tk.mybatis.mapper.mapperhelper.sqlhelper;import tk.mybatis.mapper.provider.exampleprovider;import java.util.t;/** * 批量更新的sqlprovider 熊猫酒仙* @author sunchangtan */public class batchexampleprovider extends exampleprovider { public batchexampleprovider(class<?> mapperclass, mapperhelper mapperhelper) { super(mapperclass, mapperhelper); } /** * 拼update sql, 使用ca when方式,id为主键 * * @param ms * @return */ public string updatebatchbyprimarykeylective(mappedstatement ms) { final class<?> entityclass = getentityclass(ms); //开始拼sql stringbuilder sql = new stringbuilder(); sql.append(sqlhelper.updatetable(entityclass, tablename(entityclass))); sql.append("<trim prefix=\"t\" suffixoverrides=\",\">"); //获取全部列 t<entitycolumn> 艺考培训费用一般多少columnlist = entityhelper.getcolumns(entityclass); for (entitycolumn column : columnlist) { if (!column.isid() && column.isupdatable()) { sql.append(" <trim prefix=\""+column.getcolumn()+" =cas文翁兴学e\" suffix=\"end,\">张小娴的书;"); sql.append(" <foreach collection=\"list\" item=\"i\" index=\"index\">"); sql.append(" <if test=\"i."+column.getentityfield().getname()+"!=null\">"); sql.append(" 通识 when id=#{i.id} then #{i."+column.getentityfield().getname()+"}"); sql.append(" </if>"); sql.append(" </foreach>"); sql.append(" </trim>"); } } sql.append("</trim>"); sql.append("where"); sql.append(" id in "); sql.append("<trim prefix=\"(\" suffix=\")\">"); sql.append("<foreach collection=\"list\" parator=\", \" item=\"i\" index=\"index\" >"); sql.append("#{i.id}"); sql.append("</foreach>"); sql.append("</trim>"); return sql.tostring(); }}
统一定义批量操作接口
/** * 批量操作接口 * * @param <t> * @author sunchangtan */@tk.mybatis.mapper.annotation.registermapperpublic interface batchmapper<t> extends updatebatchbyprimarykeylectivemapper<t> {}
使用例子:
list<list<batchtest>> splitlist = listutils.splitlist(list, 100); splitlist.foreach(data -> { batchtestmapper.updatebatchbyprimarykeylective(data); });
到此这篇关于详解扩展tk.mybatis的批量更新的功能的文章就介绍到这了,更多相关tk.mybatis 批量更新内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-03 23:33:53,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/3c0b894a636cd60eef923845e38f8c0a.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:详解扩展tk.mybatis的批量更新的功能.doc
本文 PDF 下载地址:详解扩展tk.mybatis的批量更新的功能.pdf
留言与评论(共有 0 条评论) |