Mybatis批量插入方式有哪些

这篇具有很好参考价值的文章主要介绍了Mybatis批量插入方式有哪些。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MyBatis批量插入有多种写法,最后博主总结一些常见的批量插入写法供大家参考文章来源地址https://www.toymoban.com/news/detail-669676.html

方式列表

  1. 使用XML配置文件进行批量插入:在XML映射文件中使用<insert>标签,并通过foreach标签迭代批量数据,然后在SQL语句中使用VALUES关键字。
  2. 使用Java注解进行批量插入:在实体类上使用@Insert注解,并通过@Param注解传入批量数据的参数。
  3. 使用Java编程语言提供的数据绑定进行批量插入:在Java代码中使用List<Entity>类型的参数,通过SqlSession.insert()方法进行批量插入。
  4. 使用MyBatis Plus的LambdaUpdate进行批量插入:在实体类上使用@LambdaUpdate注解,并通过Lambda表达式定义批量插入的SQL语句。
  5. 使用MyBatis Plus的UpdateProvider进行批量插入:在实体类上使用@UpdateProvider注解,并指定一个自定义的UpdateProvider类,该类通过反射生成批量插入的SQL语句。
  6. 使用Java编程语言提供的批处理机制进行批量插入:在Java代码中使用PreparedStatementaddBatchexecuteBatch方法,将多个插入操作添加到批处理队列中,然后一次性执行所有操作。
  7. 使用MyBatis Plus的BatchExecutor进行批量插入:在Java代码中使用BatchExecutor类,通过指定SQL语句和参数列表,执行批量插入操作。
  8. 使用MyBatis Plus的BatchInsertBuilder进行批量插入:在实体类上使用@AutoBatchInsert注解,并使用BatchInsert类提供的静态方法进行批量插入操作。
  9. 使用MyBatis的批量执行器BatchExecutor进行批量插入:在Java代码中使用ExecutorType.BATCH类型的执行器,通过SqlSessionFactory.getSqlSession()方法获取批量执行的SqlSession,然后使用SqlSession.insert()方法进行批量插入操作。
  10. 使用MyBatis Plus的Mapper批量插入:在Java代码中使用BaseMapper接口的insertList()方法,通过传入批量插入的数据列表进行操作。

主要的方式

XML方式

<insert id="insertBatch" parameterType="java.util.List">  
    INSERT INTO table_name (column1, column2, ...)  
    VALUES  
    <foreach collection="list" item="item" separator=",">  
        (#{item.column1}, #{item.column2}, ...)  
    </foreach>  
</insert>

注解方式

@LambdaUpdate({  
    @QuerySql("INSERT INTO table_name (column1, column2, ...) VALUES ",  
            "#{list,jdbcType=VARCHAR},#{list2,jdbcType=INTEGER}")  
})  
void insertBatch(List<Entity> list);

Plus方式

servicce.saveBatch(List<entity>,size)//size默认1000

Provider方式

@UpdateProvider(sql = "INSERT INTO table_name (column1, column2, ...) VALUES ",provider = BatchEntityProvider.class)  
void insertBatch(List<Entity> list);
public class BatchEntityProvider extends AbstractEntityProvider<Entity> {  
    public BatchEntityProvider() {  
        super(Entity.class);  
    }  
    @Override  
    public String createSql(Entity model, String sql, LambdaSqlContext ctx) {  
        StringBuilder sqlBuilder = new StringBuilder(sql);  
        List<Object> params = ctx.getParams();  
        sqlBuilder.append(" VALUES ");  
        for (int i = 0; i < params.size(); i++) {  
            sqlBuilder.append("(");  
            Object param = params.get(i);  
            if (param instanceof Map) { // 当参数是一个Map时,map的key对应属性名,value对应属性值。属性名顺序需要和Entity保持一致。  
                Map<String, Object> map = (Map<String, Object>) param;  
                for (Object key : map.keySet()) { // 遍历map的key,拼接sql。  
                    sqlBuilder.append("#{" + key + ",jdbcType=" + JdbcType.class.getName().replace(".", ",").replace("JdbcType", "").replace("}", "").replace("}", "") + "},"); // 去掉JdbcType后的所有括号以及.号拼接到sql中。  
                }  
            } else { // 当参数不是Map时,直接拼接sql。属性顺序需要和Entity保持一致。  
                for (int j = 0; j < model.getColumns().size(); j++) { // 遍历Entity的所有属性,拼接sql。  
                    sqlBuilder.append("#{" + model.getColumns().get(j) + "},"); // 拼接到sql中。  
                }  
            }  
            sqlBuilder.deleteCharAt(sqlBuilder.length() - 1); // 删除最后一个逗号。  
            if (i != params.size() - 1) { // 如果不是最后一个参数,需要添加逗号隔开每个子语句。  
                sqlBuilder.append(",");  
            } else { // 是最后一个参数,不需要添加逗号隔开每个子语句。  
                sqlBuilder.append(")"); // 需要添加括号结束子语句。  
            }  
            if (i != params.size() - 1) { // 如果不是最后一个参数,需要添加逗号隔开每个子语句的左括号。  
                sqlBuilder.append(",");  
            } else { // 是最后一个参数,不需要添加逗号隔开每个子语句的左括号。  
                sqlBuilder.append(" "); // 需要添加空格结束每个子语句的左括号。  
            }  
        }  
        return sqlBuilder.toString(); // 返回拼接好的SQL语句。  
    }  
}

鸣谢

  • 非常感谢你从头到尾阅读了这篇文章,希望其中的内容对你有所启发和帮助。如果你还有其他问题或需要进一步的了解,欢迎随时关注我的动态并留言
  • 最后可以给作者点个关注和小赞赞嘛,谢谢!
  • 觉得有收藏价值可以进行收藏

到了这里,关于Mybatis批量插入方式有哪些的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis批量插入

    使用Mybatis框架批量插入的3种方法:多次调用insert方法、foreach标签、batch模式 后端java代码:

    2024年02月12日
    浏览(50)
  • Mybatis批量插入、修改

            在 MyBatis 中, foreach 标签用于遍历集合类型的条件,并且可以将多个参数值拼接成为 SQL 语句的一个部分,通常被用于批量插入或更新等操作。  foreach属性及介绍          属性 介绍 collection 集合名称 item 字符别名 index 索引别名 open 循环前缀 close 循环后缀 separato

    2024年02月07日
    浏览(29)
  • Mybatis 中传入List实现 批量插入、批量更新、批量删除

    个人收藏使用 文章来自Mybatis 中传入List实现 批量插入、批量更新、批量删除 - chelsey3tsf - 博客园 (cnblogs.com) 1. 批量插入 : Mapper层: 对应的mapper.xml: 如果List数据量比较大,可以考虑将List分批次插入 2. 批量更新: 批量更新只提供更新单个字段的,因为更新多个字段无论哪种

    2024年02月11日
    浏览(48)
  • MyBatis的五种批量插入

    一.直接循环插入 最终耗时:14s多 二.关闭MySql自动提交,手动进行循环插入提交 平均:0.12s 第三种:用List集合的方式插入数据库(推荐) 第四种: MyBatis-Plus提供的SaveBatch方法 直接报错: 看报错信息: 长串:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw excep

    2024年03月15日
    浏览(37)
  • Mybatis批量插入/更新性能优化思路

            最近在做数据写入服务的性能优化,主要是基于Mybatis-Plus实现一套批量写数据的服务,不过该服务是支持整个平台所有需要持久化的业务实体。所以这种服务不仅仅有insert操作还有update的操作。根据以往的MySQL数据库写入经验,主要总结了两套批量插入、批量插入

    2024年04月25日
    浏览(28)
  • MyBatis 批量插入数据的 3 种方法!

    数据库的最终效果如下: 接下来我们将使用 Spring Boot 项目,批量插入 10W 条数据来分别测试各个方法的执行时间。​ 循环单次插入的(测试)核心代码如下: 运行以上程序,花费了 88574 毫秒,如下图所示: MP 批量插入功能核心实现类有三个:UserController(控制器)、UserS

    2024年02月07日
    浏览(32)
  • mybatis-plus 批量插入示例

    正常我们使用mybatis-plus插入的时候,首先想到的是  saveBatch 方法,不过看了下打印出来的sql和底层代码,才发现它并不是真正的批量插入。     实现层   ServiceImpl 中的代码为 通过监控控制台发现,它只是循环每1000条去插入,效率非常低。   参考网友的文章,找到一个支

    2024年02月15日
    浏览(29)
  • Mybatis-plus---的批量插入

    批量插入 一、继承IService(伪批量) 二、insertBatchSomeColumn Mybatis-plus很强,为我们诞生了极简CURD操作,但对于数据批量操作,显然默认提供的insert方法是不够看的了,于是它和它来了!!! Mybatis-plus提供的两种插入方式          继承IService(伪批量)         insertBatchSo

    2024年02月16日
    浏览(38)
  • mybatis批量插入数据list超过一定长度时报错的解决办法(批量插入数据,数据过多时报错解决和批量修改报错

    在使用MyBatis进行批量新增时,如果数据量较大,可以考虑分批次插入以减少数据库的负载压力。这里提供一种基于MyBatis的分批次插入的方法: 创建一个新的Mapper XML文件(例如:BatchInsertMapper.xml)来定义批量插入的SQL语句。在该XML文件中,添加如下内容:   请将上述代码中

    2024年02月16日
    浏览(38)
  • 批量插入或更新数据(MyBatis-plus框架)

    目录 1.场景说明 2.DUPLICATE 和REPLACE比较 3.批量插入或者更新(两种方式) 方式一:mybatis-plus的saveOrUpdateBatch方法 问题:如果操作类集成了基础类,比如封装了BaseEntity去集成,那么这样使用会出问题 方式二:on duplicate key (推荐) 4.注意 5.常见问题  插入数据时,我们经常会遇到这

    2024年02月04日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包