Python 官方文档:入门教程 => 点击学习
tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现。 批量更新网上主要有2种方式:case when方式、foreach方式 但是foreachzhe
tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现。
批量更新网上主要有2种方式:case when方式、foreach方式
但是foreachzhe这种方式效率非常低下,不知道为何那多么帖子在流传,请看我另一个文章。
扩展tk.mybatis的批量更新,采用case when方式,源码干货如下:
首先定义下mapper接口
import org.apache.ibatis.annotations.UpdateProvider;
import java.util.List;
@tk.mybatis.mapper.annotation.ReGISterMapper
public interface UpdateBatchByPrimaryKeySelectiveMapper<T> {
@UpdateProvider(type = BatchExampleProvider.class, method = "dynamicsql")
int updateBatchByPrimaryKeySelective(List<? extends T> recordList);
}
实现UpdatePriUpdateProvider,使用case 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.Set;
public class BatchExampleProvider extends ExampleProvider {
public BatchExampleProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
super(mapperClass, mapperHelper);
}
public String updateBatchByPrimaryKeySelective(MappedStatement ms) {
final Class<?> entityClass = getEntityClass(ms);
//开始拼sql
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.updateTable(entityClass, tableName(entityClass)));
sql.append("<trim prefix=\"set\" suffixOverrides=\",\">");
//获取全部列
Set<EntityColumn> columnList = EntityHelper.getColumns(entityClass);
for (EntityColumn column : columnList) {
if (!column.isId() && column.isUpdatable()) {
sql.append(" <trim prefix=\""+column.getColumn()+" =case\" 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\" separator=\", \" item=\"i\" index=\"index\" >");
sql.append("#{i.id}");
sql.append("</foreach>");
sql.append("</trim>");
return sql.toString();
}
}
统一定义批量操作接口
@tk.mybatis.mapper.annotation.RegisterMapper
public interface BatchMapper<T> extends
UpdateBatchByPrimaryKeySelectiveMapper<T> {
}
使用例子:
List<List<BatchTest>> splitList = ListUtils.splitList(list, 100);
splitList.forEach(data -> {
batchTestMapper.updateBatchByPrimaryKeySelective(data);
});
到此这篇关于详解扩展tk.mybatis的批量更新的功能的文章就介绍到这了,更多相关tk.mybatis 批量更新内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 详解扩展tk.mybatis的批量更新的功能
本文链接: https://www.lsjlt.com/news/158916.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0