首页 > 作文

详解扩展tk.mybatis的批量更新的功能

更新时间:2023-04-03 23:33:55 阅读: 评论:0

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图