`
53873039oycg
  • 浏览: 843998 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

mybatis基础操作之批量操作

    博客分类:
  • java
阅读更多

    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>

 

   

     

分享到:
评论
1 楼 fordsupr 2014-03-10  
很清楚
很受用的文章,谢谢您~

相关推荐

    mybatis plus 5种批量操作性能测试

    MyBatis Plus 是 MyBatis 的一个扩展,它在 MyBatis 的基础上提供了更多的便捷功能,包括但不限于批量操作。在数据库交互中,批量操作能够显著提高效率,减少数据库连接的开销。本测试主要探讨了 MyBatis Plus 中的...

    mybatis数据操作(增删改查+批量操作)

    在"mybatis数据操作(增删改查+批量操作)"这个主题中,我们将深入探讨如何利用MyBatis进行基本的数据操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select),以及如何执行批量操作。...

    Mybatis Plus 自定义批量插入或批量更新(根据唯一索引)

    Mybatis Plus 是 Mybatis 的一个扩展工具,它在 Mybatis 的基础上提供了许多便捷的功能,包括自动 CRUD 操作、条件构造器、批量操作等。在实际的项目开发中,批量插入和批量更新是常见的数据处理场景,尤其是在处理...

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

    在IT行业中,数据库操作是必不可少的部分,特别是在Java开发中,MyBatis作为一款优秀的持久层框架,被广泛应用。本文将详细探讨如何在Oracle数据库中进行批量插入优化,并介绍MyBatis Generator这一自动化代码生成...

    Mybatis 3+Mysql 实现批量插入

    综上所述,利用MyBatis结合MySQL实现批量插入不仅可以大幅提高数据处理效率,还能有效降低系统资源消耗,是数据库操作中不可或缺的一项技能。通过上述详细讲解,相信读者已经对如何实现批量插入有了清晰的理解。

    mybatis-plus_batch_insert:mybatis_plus添加批量插入

    MyBatis-Plus 是 MyBatis 的轻量级框架,它在 MyBatis 的基础上做了增强,但不改变其基本结构。MyBatis-Plus 提供了包括单表 CRUD 操作、主键自增、条件构造器、分页插件等在内的诸多实用功能。 ### 2. 批量插入...

    mybatisr代码生成插件(中文注释,生成批量插入及修改)

    首先,让我们详细了解一下MyBatis Generator的基本工作原理。MBG通过读取数据库元数据,根据用户配置生成相应的Java源代码。这些源代码包括实体类(Entity Class)、Mapper接口(Mapper Interface)和对应的XML映射...

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

    在Java开发中,MyBatis是一个非常流行的持久层框架,它简化了数据库操作,使得开发者可以更加专注于SQL语句的编写。本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要...

    mybatis postgresql 批量删除操作方法

    MyBatis PostgreSQL 批量删除操作方法 MyBatis 是一个基于 Java 的持久层框架,它提供了一个简单的方式来交互数据库。在本文中,我们将介绍如何使用 MyBatis 实现 PostgreSQL 批量删除操作。 PostgreSQL 简介 ...

    mybatis批量添加实现1

    一、Mybatis批量添加基础 Mybatis允许开发者直接传递一个集合到Mapper接口的方法中,然后在映射文件中通过`&lt;foreach&gt;`标签遍历集合,生成对应的SQL语句。这种方式不仅简洁,而且高效,避免了多次数据库交互。 二、...

    SpringMVC + Mybatis 增删改查(批量删除)

    总结来说,SpringMVC+Mybatis的组合提供了强大的Web应用开发能力,通过合理的配置和编程,可以轻松实现各种复杂的业务逻辑,包括基础的增删改查和批量操作。在实际项目中,这种组合既保证了代码的简洁性,又提高了...

    MyBatis_insert

    【MyBatis_insert】——深入理解MyBatis映射器插入操作 MyBatis作为一款优秀的持久层框架,极大地简化了Java开发中的数据库操作。它允许开发者将SQL语句直接写在XML配置文件中,通过映射器(Mapper)与Java代码进行...

    SpringBoot整合EasyExcel+MyBatis-Plus实现Excel批量导入和导出

    MyBatis-Plus是在MyBatis的基础上进行扩展,提供了更为强大的CRUD操作,包括条件构造器、批量插入、主键自增等功能,极大地提高了开发效率。它是一个轻量级的持久层框架,能够与SpringBoot无缝集成,使得数据库操作...

    mybatis基础源码及jar包

    这个“mybatis基础源码及jar包”资源可能包含了MyBatis框架的基础源码和所需的JDBC驱动,帮助学习者深入理解MyBatis的工作原理以及如何在实际项目中应用。 首先,我们来详细了解一下MyBatis的核心概念: 1. **XML...

    mybatis plus操作

    MyBatis Plus(简称MP)是MyBatis的扩展插件,它简化了对数据库的基本操作,如增删改查、条件构造等。这个压缩包文件"mybatisplus-spring-boot"显然包含了MyBatis Plus在Spring Boot环境下的示例项目,方便开发者...

    mybatis逆袭工程demo

    其中,MyBatis的逆向工程(Reverse Engineering)功能更是为开发者提供了极大的便利,它能自动生成实体类(Entity)、Mapper接口以及XML映射文件,大大减少了手动编写这些基础代码的工作量。本篇将深入探讨MyBatis...

    spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库.zip

    2. **MyBatis Plus**:MyBatis Plus是在MyBatis的基础上进行扩展的,简化了常见的CRUD操作。它提供了一些实用的功能,如:无注解的SQL映射、条件构造器、自动化事务处理等。在本项目中,MyBatis Plus被用来连接...

    基于Tk MyBatis框架,mybatis 注解方式实现数据的加解密

    Tk MyBatis提供了更简洁的接口设计和更强大的功能,而MyBatis Plus则是一个对MyBatis的扩展,简化了基本的 CRUD 操作,无需编写大量的Mapper和Service代码。 在MyBatis中,我们通常使用XML映射文件或注解来定义SQL...

    mybatis-plus 实践及架构原理

    Mybatis-Plus是一款在Mybatis基础上进行增强的优秀工具,它简化了单表的CRUD操作,提高了开发效率,且对原有的SQL操作不做改变。Mybatis-Plus的实践及架构原理主要包含以下几个方面的知识点: 1. Mybatis-Plus的...

Global site tag (gtag.js) - Google Analytics