`
doufuguolyl
  • 浏览: 20483 次
社区版块
存档分类
最新评论

Oracle使用Mybatis实现List批量插入数据

阅读更多

项目中会遇到这样的情况,一次性要插入多条数据到数据库中,下面就拿Data类来看看两种插入方法:

 

方法一:

  Mybatis本身只支持逐条插入,比较笨的方法,就是遍历一个List,循环中逐条插入,比如下面这段代码

 

for(Data d : ListData) {
    dataMapper.insertSelective(d);
}

  这样做的后果就是效率严重低下,因为每次循环都要向数据库提交一次,数据少的时候看不出来,但是如果上千条,花费的时间就相当多了

 

方法二:

  Mybatis本身是很灵活的,因为可以自己在XML文件中编写sql进行操作,那就可以一次性将插入到数据库中,这样只用向数据库提交一次,性能也可以提高不少。下面来看一个例子:


  首先,在DataMapper.java 接口类中加入接口:

int batchInsert(List<Data> datas);

 

  然后,在DataMapper.xml 中编写对应的实现sql,我使用的是oracle,如果是mysql或sqlserver,可能sql语句会略有区别吧:

<insert id="batchInsert" parameterType="java.util.List"> 
    insert into DATA (ID, TEXT, STAUTS) 
    <foreach close=")" collection="list" item="item" index="index" open="(" separator="union"> 
    select 
        #{item.id,jdbcType=VARCHAR}, 
        #{item.text,jdbcType=VARCHAR}, 
        #{item.stauts,jdbcType=VARCHAR} 
    from dual 
    </foreach> 
</insert>

 

  最后,在需要批量插入Data数据的地方调用接口:

dataMapper.batchInsert(ListData);

 

  说明一下xml文件的实现,使用foreach标签,是用来拼接内部的字符串,item就相当于一个指针,用来遍历list中的对象,将每一个item的属性值复制给内部sql之后,用union拼接起来,一次性执行一个长的sql语句。
  如果我们从后台打印sql执行语句的话,会看到这样的sql语句

insert into DATA (ID, TEXT, STAUTS) 
( 
select ?, ?, ? from dual union 
select ?, ?, ? from dual union 
select ?, ?, ? from dual 
) 

  相对于第一个方法,第二个方法的代码量要多出很多,但是从性能方面考虑,不管插入多少条数据,都只用向数据库提交一次,这样效率就会大幅提升。

 

 

 

 

分享到:
评论

相关推荐

    Java实现mybatis批量插入数据到Oracle

    本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...

    MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)

    在MyBatis中,可以使用INSERT ALL语句来批量插入数据到Oracle数据库。以下是示例代码: ```xml &lt;insert id="addList" parameterType="java.util.List" useGeneratedKeys="false"&gt; INSERT ALL ...

    mybatis foreach批量插入数据:Oracle与MySQL区别介绍

    但是,在不同的数据库管理系统中,foreach标签的使用有一些区别,今天我们主要介绍MyBatis foreach批量插入数据在Oracle和MySQL中的区别。 首先,让我们先了解一下foreach标签的基本使用方法。foreach标签是MyBatis...

    spring中使用mybatis实现批量插入的示例代码

    Spring 中使用 MyBatis 实现批量插入的示例代码 一、前言 在实际开发中,批量插入数据是非常常见的需求。使用 Spring 框架结合 MyBatis 框架,可以实现高效的批量插入操作。本文将详细介绍 Spring 中使用 MyBatis ...

    Oracle+Mybatis的foreach insert批量插入报错的快速解决办法

    在Oracle数据库中使用MyBatis的`&lt;foreach&gt;`标签进行批量插入时,可能会遇到“SQL命令未正确结束”的错误。这个问题通常由于Oracle数据库对批量插入语句的语法要求与MySQL等其他数据库系统不同所导致。以下是对这个...

    mybatis的oracle的批量插入优化和mybatis的generator自动生成三层文件

    总之,Oracle批量插入的优化和MyBatis Generator的使用是提升开发效率和数据库性能的重要手段。正确理解和运用这些技术,能够帮助我们在项目开发中事半功倍,为高质量的软件产品打下坚实的基础。

    Mybatis传list参数调用oracle存储过程的解决方法

    "Mybatis调用Oracle存储过程传List...使用Mybatis传List参数调用Oracle存储过程,可以实现批量插入数据,解决了Mybatis批量插入数据的限制问题。同时,这种方法也可以灵活地控制事务回滚,提高了系统的可靠性和性能。

    Oracle + Mybatis实现批量插入、更新和删除示例代码

    本篇文章重点讨论如何在Oracle数据库环境下,利用MyBatis进行批量插入、更新和删除操作,这有助于提高数据库操作的效率,减少资源消耗。 批量操作在处理大量数据时尤其重要,因为单条记录的事务提交会消耗更多的...

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

    Mybatis批量插入数据返回主键的实现

    在Mybatis中,批量插入数据可以通过使用foreach语句来实现,而返回主键可以通过使用useGeneratedKeys和keyProperty两个属性来实现。下面是一个示例代码: 首先,在持久层的Mapper文件中,我们需要定义一个批量插入...

    MyBatis批量插入(insert)数据操作

    在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...

    MyBatis动态SQL,MyBatis批量插入(Oracle数据库)[收集].pdf

    在上面的示例中,使用了foreach元素来批量插入数据。foreach元素可以根据不同的条件生成不同的SQL语句。 动态SQL的优点 ------------- MyBatis的动态SQL特性有很多优点,例如: * 提高代码的灵活性和可维护性 * ...

    mybatis中批量插入的两种方式(高效插入)

    批量插入使用`ExecutorType.BATCH` 的一个示例代码如下: ```java @Autowired private SqlSessionTemplate sqlSessionTemplate; // 获取一个BATCH模式且自动提交为false的session SqlSession session = ...

    oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert

    这种情况下,如何使用MyBatis进行动态SQL的编写以实现批量插入呢?本文将详细介绍一种在Oracle数据库环境下,利用MyBatis动态SQL解决此问题的方法。 首先,我们看到一个关键的MyBatis XML映射文件中的`&lt;insert&gt;`...

    mybatis+Oracle做批量导入时的坑

    首先,批量插入操作在DAO层,我们定义了一个`insertList`方法,它接收一个`List&lt;BLeaseInformation&gt;`参数。这个方法的目的是将列表中的多个`BLeaseInformation`对象一次性插入到数据库中。在XML映射文件中,我们看到...

    mybatis批量添加实现1

    本文将详细介绍如何使用Mybatis进行批量插入,包括针对MySQL和Oracle两种不同数据库的实现方式。 一、Mybatis批量添加基础 Mybatis允许开发者直接传递一个集合到Mapper接口的方法中,然后在映射文件中通过`...

    mybatis动态插入list传入List参数的实例代码

    MyBatis 动态插入 List 传入 List 参数的实例代码详解 MyBatis 是一款优秀的 ORM 工具,提供了许多实用的功能,其中之...MyBatis 动态插入 List 传入 List 参数的方法非常实用,可以提高批量插入数据的效率和灵活性。

    mybatis使用annotation在mysql,oracle上进行批量处理

    本文将详细讲解如何使用MyBatis的注解方式在MySQL和Oracle数据库上实现批量处理,旨在提高数据操作的效率。 首先,我们要理解MyBatis的核心原理,它是一个基于Java的持久层框架,通过XML或注解来映射SQL语句,简化...

    Mybatis 插入一条或批量插入 返回带有自增长主键记录的实例

    在 Mybatis 中,要实现插入一条或批量插入,需要使用 `&lt;insert&gt;` element,并在其中使用 `useGeneratedKeys` 和 `keyProperty` 属性来获取自增长主键。 MySQL 在 MySQL 中,需要使用 `useGeneratedKeys="true"` 和...

Global site tag (gtag.js) - Google Analytics