Mybatis批量操作,包括批量新增、修改、删除等,本次使用Oracle数据库进行操作。
首先新建表
-- Create table create table TEST_INSERT ( ID NUMBER not null, NAME VARCHAR2(12), AGE NUMBER(3), STARTDATE DATE ) -- Create/Recreate primary, unique and foreign key constraints alter table TEST_INSERT add primary key (ID)
2新建JavaBean
package bean; import java.util.Date; public class TestInsert { private long id; public String toString() { return "t [id=" + id + ", age=" + age + ", startDate=" + startDate.toLocaleString()+ ", name=" + name + "]"; } private int age; private Date startDate; private String name; public long getId() { return id; } public void setId(long id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public String getName() { return name; } public void setName(String name) { this.name = name; } public TestInsert(long id, int age, Date startDate, String name) { super(); this.id = id; this.age = age; this.startDate = startDate; this.name = name; } public TestInsert() { super(); } public TestInsert(int age, Date startDate, String name) { super(); this.age = age; this.startDate = startDate; this.name = name; } }
首先是Mybatis使用注解方式批量新增
public interface TestInsertMapper { @Insert("insert into test_insert (id, name, age, startDate) values (#{id}, #{name}, #{age}, #{startDate}) ") public void insertTest(TestInsert test); }
mybatis.xml配置为
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="cacheEnabled" value="true" /> <setting name="lazyLoadingEnabled" value="true" /> <setting name="multipleResultSetsEnabled" value="true" /> <setting name="useColumnLabel" value="true" /> <!-- <setting name="useGeneratedKeys" value="true" /> --> <setting name="defaultExecutorType" value="SIMPLE" /> <setting name="defaultStatementTimeout" value="25000" /> </settings> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /> <property name="username" value="admin" /> <property name="password" value="123" /> </dataSource> </environment> </environments> <mappers> <!-- <mapper resource="config/score.xml" /> --> <mapper resource="config/testinsert-mapper.xml"/> <mapper class="mapper.TestInsertMapper"/> </mappers> </configuration>
对应的例子为:
public void batchInsert1() throws Exception { SqlSession sqlSession = ssf.openSession(ExecutorType.BATCH); TestInsertMapper pmapper = sqlSession.getMapper(TestInsertMapper.class); long start = System.currentTimeMillis(); try { for (int i = 0; i < 16; i++) { pmapper.insertTest(testList.get(i)); } sqlSession.commit(); } finally { sqlSession.close(); System.out.println((System.currentTimeMillis() - start) + " ms---"); } }
下面是for-each进行插入,对应的配置为:
<insert id="OracleBatchInsert" parameterType="java.util.List"> insert into test_insert(id, name, age, startDate)( <foreach collection="list" item="test" index="index" separator="union all"> select #{test.id}, #{test.name}, #{test.age}, #{test.startDate} from dual </foreach> ) </insert>
测试例子和上面的差不多
public void batchInsert2() throws Exception { SqlSession sqlSession = ssf.openSession(); long start = System.currentTimeMillis(); try { sqlSession.insert("test.OracleBatchInsert", testList); sqlSession.commit(); } finally { sqlSession.close(); System.out.println((System.currentTimeMillis() - start) + " ms---"); } }
上面例子是主键自己指定的,接下来是使用Oracle的序列作为主键,对应的配置为
<insert id="OracleBatchSeqInsert" parameterType="java.util.List"> insert into test_insert(id, name, age, startDate)( select STUDENT_ID_SEQUENCE.NEXTVAL,A.* from( <foreach collection="list" item="test" index="index" separator="union all"> select #{test.name}, #{test.age}, #{test.startDate} from dual </foreach> )A) </insert>
测试例子和上面一样
接下来是批量更新,对应配置为
<update id="updateByIds" parameterType="map"> update test_insert set startDate = #{startDate,jdbcType=TIMESTAMP} where id in <foreach collection="list" item="item" index="index" open="(" close=")" separator=","> #{item} </foreach> </update>
测试例子为:
public void batchUpdate() { SqlSession sqlSession = ssf.openSession(); long start = System.currentTimeMillis(); try { Map map = new HashMap(); map.put("startDate", new Date()); map.put("list", idlist); sqlSession.update("test.updateByIds", map); sqlSession.commit(); } finally { sqlSession.close(); // System.out.println((System.currentTimeMillis() - start) + " ms---"); } }
最后是批量删除,配置如下:
<delete id="deleteBatch" parameterType="list"> delete from test_insert where id in <foreach collection="list" item="item" index="index" open="(" close=")" separator=","> #{item} </foreach> </delete>
测试例子如下:
public void batchDelete() { SqlSession sqlSession = ssf.openSession(); long start = System.currentTimeMillis(); try { sqlSession.delete("test.deleteBatch", idlist); sqlSession.commit(); } finally { sqlSession.close(); // System.out.println((System.currentTimeMillis() - start) + " ms---"); } }
全文完,源码就不打包了,上面都有,写的不好的地方,请多包涵,谢谢!
--------------------------------------------------------------------------------------------
Ibatis2 批量插入配置为:
<insert id="oraclebatchinsert" parameterClass="java.util.List">
insert into test_insert(id, name, age, startDate)(
<iterate conjunction="union all">
select
#idsList[].id#, #idsList[].name#, #idsList[].age#,
#idsList[].startDate#
from dual
</iterate>
)
</insert>
<insert id="oracleseqbatchinsert" parameterClass="java.util.List">
insert into test_insert(id, name, age, startDate)(
select
STUDENT_ID_SEQUENCE.NEXTVAL,A.* from(
<iterate conjunction="union all">
select
#idsList[].name#, #idsList[].age#,
#idsList[].startDate#
from dual
</iterate>
)A)
</insert>
相关推荐
MyBatis Plus 是 MyBatis 的一个扩展,它在 MyBatis 的基础上提供了更多的便捷功能,包括但不限于批量操作。在数据库交互中,批量操作能够显著提高效率,减少数据库连接的开销。本测试主要探讨了 MyBatis Plus 中的...
在"mybatis数据操作(增删改查+批量操作)"这个主题中,我们将深入探讨如何利用MyBatis进行基本的数据操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select),以及如何执行批量操作。...
Mybatis Plus 是 Mybatis 的一个扩展工具,它在 Mybatis 的基础上提供了许多便捷的功能,包括自动 CRUD 操作、条件构造器、批量操作等。在实际的项目开发中,批量插入和批量更新是常见的数据处理场景,尤其是在处理...
在IT行业中,数据库操作是必不可少的部分,特别是在Java开发中,MyBatis作为一款优秀的持久层框架,被广泛应用。本文将详细探讨如何在Oracle数据库中进行批量插入优化,并介绍MyBatis Generator这一自动化代码生成...
综上所述,利用MyBatis结合MySQL实现批量插入不仅可以大幅提高数据处理效率,还能有效降低系统资源消耗,是数据库操作中不可或缺的一项技能。通过上述详细讲解,相信读者已经对如何实现批量插入有了清晰的理解。
MyBatis-Plus 是 MyBatis 的轻量级框架,它在 MyBatis 的基础上做了增强,但不改变其基本结构。MyBatis-Plus 提供了包括单表 CRUD 操作、主键自增、条件构造器、分页插件等在内的诸多实用功能。 ### 2. 批量插入...
首先,让我们详细了解一下MyBatis Generator的基本工作原理。MBG通过读取数据库元数据,根据用户配置生成相应的Java源代码。这些源代码包括实体类(Entity Class)、Mapper接口(Mapper Interface)和对应的XML映射...
在Java开发中,MyBatis是一个非常流行的持久层框架,它简化了数据库操作,使得开发者可以更加专注于SQL语句的编写。本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要...
MyBatis PostgreSQL 批量删除操作方法 MyBatis 是一个基于 Java 的持久层框架,它提供了一个简单的方式来交互数据库。在本文中,我们将介绍如何使用 MyBatis 实现 PostgreSQL 批量删除操作。 PostgreSQL 简介 ...
一、Mybatis批量添加基础 Mybatis允许开发者直接传递一个集合到Mapper接口的方法中,然后在映射文件中通过`<foreach>`标签遍历集合,生成对应的SQL语句。这种方式不仅简洁,而且高效,避免了多次数据库交互。 二、...
总结来说,SpringMVC+Mybatis的组合提供了强大的Web应用开发能力,通过合理的配置和编程,可以轻松实现各种复杂的业务逻辑,包括基础的增删改查和批量操作。在实际项目中,这种组合既保证了代码的简洁性,又提高了...
【MyBatis_insert】——深入理解MyBatis映射器插入操作 MyBatis作为一款优秀的持久层框架,极大地简化了Java开发中的数据库操作。它允许开发者将SQL语句直接写在XML配置文件中,通过映射器(Mapper)与Java代码进行...
MyBatis-Plus是在MyBatis的基础上进行扩展,提供了更为强大的CRUD操作,包括条件构造器、批量插入、主键自增等功能,极大地提高了开发效率。它是一个轻量级的持久层框架,能够与SpringBoot无缝集成,使得数据库操作...
这个“mybatis基础源码及jar包”资源可能包含了MyBatis框架的基础源码和所需的JDBC驱动,帮助学习者深入理解MyBatis的工作原理以及如何在实际项目中应用。 首先,我们来详细了解一下MyBatis的核心概念: 1. **XML...
MyBatis Plus(简称MP)是MyBatis的扩展插件,它简化了对数据库的基本操作,如增删改查、条件构造等。这个压缩包文件"mybatisplus-spring-boot"显然包含了MyBatis Plus在Spring Boot环境下的示例项目,方便开发者...
其中,MyBatis的逆向工程(Reverse Engineering)功能更是为开发者提供了极大的便利,它能自动生成实体类(Entity)、Mapper接口以及XML映射文件,大大减少了手动编写这些基础代码的工作量。本篇将深入探讨MyBatis...
2. **MyBatis Plus**:MyBatis Plus是在MyBatis的基础上进行扩展的,简化了常见的CRUD操作。它提供了一些实用的功能,如:无注解的SQL映射、条件构造器、自动化事务处理等。在本项目中,MyBatis Plus被用来连接...
Tk MyBatis提供了更简洁的接口设计和更强大的功能,而MyBatis Plus则是一个对MyBatis的扩展,简化了基本的 CRUD 操作,无需编写大量的Mapper和Service代码。 在MyBatis中,我们通常使用XML映射文件或注解来定义SQL...
Mybatis-Plus是一款在Mybatis基础上进行增强的优秀工具,它简化了单表的CRUD操作,提高了开发效率,且对原有的SQL操作不做改变。Mybatis-Plus的实践及架构原理主要包含以下几个方面的知识点: 1. Mybatis-Plus的...