Java通过Mybatis实现批量插入数据到Oracle中
最近项目中遇到一个问题:导入数据到后台并将数据插入到数据库中,导入的数据量有上万条数据,考虑采用批量插入数据的方式;
结合网上资料,写了个小demo,文章末尾附上demo下载地址
1、新建项目:项目目录结构如下图所示,添加相应的jar包
2、新建数据库表:ACCOUNT_INFO
1 CREATE TABLE ACCOUNT_INFO ( 2 "ID" NUMBER(12) NOT NULL , 3 "USERNAME" VARCHAR2(64 BYTE) NULL , 4 "PASSWORD" VARCHAR2(64 BYTE) NULL , 5 "GENDER" CHAR(1 BYTE) NULL , 6 "EMAIL" VARCHAR2(64 BYTE) NULL , 7 "CREATE_DATE" DATE NULL 8 )
3、创建AccountInfo实体类:
1 package com.oracle.entity;2 3 import java.sql.Date;4 5 public class AccountInfo {6 private Long id;7 private String userName;8 private String password;9 private String gender; 10 private String email; 11 private Date createDate; 12 13 public Long getId() { 14 return id; 15 } 16 17 public void setId(Long id) { 18 this.id = id; 19 } 20 21 public String getUserName() { 22 return userName; 23 } 24 25 public void setUserName(String userName) { 26 this.userName = userName; 27 } 28 29 public String getPassword() { 30 return password; 31 } 32 33 public void setPassword(String password) { 34 this.password = password; 35 } 36 37 public String getGender() { 38 return gender; 39 } 40 41 public void setGender(String gender) { 42 this.gender = gender; 43 } 44 45 public String getEmail() { 46 return email; 47 } 48 49 public void setEmail(String email) { 50 this.email = email; 51 } 52 53 public Date getCreateDate() { 54 return createDate; 55 } 56 57 public void setCreateDate(Date createDate) { 58 this.createDate = createDate; 59 } 60 61 @Override 62 public String toString() { 63 return "AccountInfo [id=" + id + ", userName=" + userName 64 + ", password=" + password + ", gender=" + gender + ", email=" 65 + email + ", createDate=" + createDate + "]"; 66 } 67 68 }
4、新建接口映射类:AccountInfoMapper.java
1 package com.oracle.mapper;2 3 import java.util.List;4 5 import com.oracle.entity.AccountInfo;6 7 public interface AccountInfoMapper {8 /**9 * 查询所有的数据 10 * @return 11 */ 12 List<AccountInfo> queryAllAccountInfo(); 13 14 /** 15 * 批量插入数据 16 * 17 * @param accountInfoList 18 * @return 19 */ 20 int batchInsertAccountInfo(List<AccountInfo> accountInfoList); 21 22 /** 23 * 批量插入数据,使用Oracle的序列获取唯一键 24 * 25 * @param accountInfoList 26 * @return 27 */ 28 int batchInsertAccountInfoUseSeq(List<AccountInfo> accountInfoList); 29 30 /** 31 * 插入数据,使用Oracle的序列获取唯一键 32 * 33 * @param accountInfoList 34 * @return 35 */ 36 int insertOne(AccountInfo accountInfo); 37 }
5、创建mybatis配置文件:mybatis-configuration.xml
1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">3 <configuration>4 <environments default="development">5 <environment id="development">6 <transactionManager type="JDBC" />7 <dataSource type="POOLED">8 <property name="driver" value="oracle.jdbc.driver.OracleDriver" />9 <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> 10 <property name="username" value="xxx" /> 11 <property name="password" value="xxx" /> 12 </dataSource> 13 </environment> 14 </environments> 15 <mappers> 16 <mapper resource="config/AccountInfoMapper.xml" /> 17 </mappers> 18 </configuration>
6、创建接口映射配置文件:AccountInfoMapper.xml
Oracle的批量插入数据库跟MySQL不一样,
MySQL:
INSERT INTO ACCOUNT_INFO(ID, USERNAME,PASSWORD,GENDER, EMAIL,CREATE_DATE)values(,,,,,,)(,,,,,,,)
Oracle:
INSERT INTO ACCOUNT_INFO(ID, USERNAME,PASSWORD,GENDER, EMAIL,CREATE_DATE) (select 1,,,,,, from dual union all select 1,,,,,, from dual)
1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">3 <mapper namespace="com.oracle.mapper.AccountInfoMapper"><!-- 接口的全类名 -->4 <!-- type:实体类的全类名 -->5 <resultMap id="BaseResultMap" type="com.oracle.entity.AccountInfo">6 <id column="ID" property="id" jdbcType="DECIMAL" />7 <result column="USERNAME" property="userName" jdbcType="VARCHAR" />8 <result column="PASSWORD" property="password" jdbcType="VARCHAR" />9 <result column="GENDER" property="gender" jdbcType="CHAR" /> 10 <result column="EMAIL" property="email" jdbcType="VARCHAR" /> 11 <result column="CREATE_DATE" property="createDate" jdbcType="DATE" /> 12 </resultMap> 13 <!-- id 跟接口中的方法名称保持一致 --> 14 <select id="queryAllAccountInfo" resultMap="BaseResultMap"> 15 select ID, 16 USERNAME,PASSWORD, 17 GENDER, EMAIL, CREATE_DATE from ACCOUNT_INFO 18 </select> 19 <insert id="batchInsertAccountInfo" parameterType="java.util.List"> 20 INSERT INTO ACCOUNT_INFO(ID, USERNAME,PASSWORD,GENDER, EMAIL,CREATE_DATE) 21 ( 22 <foreach collection="list" index="" item="accountInfo" 23 separator="union all"> 24 select 25 #{accountInfo.id}, 26 #{accountInfo.userName}, 27 #{accountInfo.password}, 28 #{accountInfo.gender}, 29 #{accountInfo.email}, 30 #{accountInfo.createDate} 31 from dual 32 </foreach> 33 ) 34 </insert> 35 36 <insert id="batchInsertAccountInfoUseSeq" parameterType="java.util.List"> 37 <selectKey resultType="long" keyProperty="id" order="BEFORE"> 38 SELECT ACCOUNT_SEQ.NEXTVAL FROM dual 39 </selectKey> 40 INSERT INTO ACCOUNT_INFO(ID, USERNAME,PASSWORD,GENDER, EMAIL,CREATE_DATE) 41 SELECT ACCOUNT_SEQ.NEXTVAL, m.* FROM( 42 <foreach collection="list" index="" item="accountInfo" 43 separator="union all"> 44 select 45 #{accountInfo.userName}, 46 #{accountInfo.password}, 47 #{accountInfo.gender}, 48 #{accountInfo.email}, 49 sysdate 50 from dual 51 </foreach> 52 ) m 53 </insert> 54 55 <insert id="insertOne" parameterType="com.oracle.entity.AccountInfo"> 56 <selectKey resultType="long" keyProperty="id" order="BEFORE"> 57 SELECT ACCOUNT_SEQ.NEXTVAL FROM dual 58 </selectKey> 59 INSERT INTO ACCOUNT_INFO(ID, USERNAME,PASSWORD,GENDER, EMAIL,CREATE_DATE) 60 values( 61 #{id}, 62 #{userName}, 63 #{password}, 64 #{gender}, 65 #{email}, 66 sysdate 67 ) 68 </insert> 69 </mapper>
7、编写测试类:
1 package com.oracle.test;2 3 import java.io.InputStream;4 import java.sql.Date;5 import java.util.ArrayList;6 import java.util.List;7 8 import org.apache.ibatis.io.Resources;9 import org.apache.ibatis.session.SqlSession; 10 import org.apache.ibatis.session.SqlSessionFactory; 11 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 12 13 import com.oracle.entity.AccountInfo; 14 import com.oracle.mapper.AccountInfoMapper; 15 16 public class MybatisTest { 17 public static void main(String[] args) throws Exception { 18 String resource = "config/mybatis-configuration.xml"; 19 InputStream inputStream = Resources.getResourceAsStream(resource); 20 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() 21 .build(inputStream); 22 SqlSession session = sessionFactory.openSession(); 23 AccountInfoMapper mapper = session.getMapper(AccountInfoMapper.class); 24 List<AccountInfo> accountInfoList = mapper.queryAllAccountInfo(); 25 if (accountInfoList == null) { 26 System.out.println("The result is null."); 27 } else { 28 for (AccountInfo personInfo : accountInfoList) { 29 System.out.println(personInfo); 30 } 31 } 32 mapper.batchInsertAccountInfoUseSeq(accountList); 33 session.commit(); 34 } 35 36 static List<AccountInfo> generateData(){ 37 List<AccountInfo> result = new ArrayList<AccountInfo>(); 38 AccountInfo account = new AccountInfo(); 39 account.setId(3L); 40 account.setUserName("zhangsanfeng"); 41 account.setPassword("123456"); 42 account.setGender("1"); 43 account.setEmail("zhangsanfeng@wudang.com"); 44 account.setCreateDate(new Date(System.currentTimeMillis())); 45 result.add(account); 46 47 account = new AccountInfo(); 48 account.setId(4L); 49 account.setUserName("zhouzhiruo"); 50 account.setPassword("zhangwuji"); 51 account.setGender("0"); 52 account.setEmail("zhouzhiruo@emei.com"); 53 account.setCreateDate(new Date(System.currentTimeMillis())); 54 result.add(account); 55 56 account = new AccountInfo(); 57 account.setId(5L); 58 account.setUserName("zhaomin"); 59 account.setPassword("zhangwuji"); 60 account.setGender("0"); 61 account.setEmail("zhaomin@yuan.com"); 62 account.setCreateDate(new Date(System.currentTimeMillis())); 63 result.add(account); 64 return result; 65 } 66 }
项目下载地址:https://github.com/lanqingchen/oracle
转载于:https://www.cnblogs.com/telwanggs/p/7485332.html
Java通过Mybatis实现批量插入数据到Oracle中相关推荐
- mybatis批量插入数据到Oracle中的两种方式
文章目录 1. 第1种 2. 第2种 1. 第1种 <insert id="addList" parameterType="java.util.List" ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- oracle批量插入报错,[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA
[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA 0 2020-08-19 08:00:06 Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA-009 ...
- Mybatis 批量插入数据 关于Oracle 批量插入
问题:用mybaits 批量插入数据到Oracle 数据库的时候, 报错: ORA-00933: SQL 命令未正确结束 / ORA-00933: SQL command not properly e ...
- mysql 批量数据导入报错_Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA
Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA-00933: SQL 命令未正确结束 问题:用mybaits 批量插入数据到Oracle 数据库的时候, 报错:ORA-00933 ...
- python加数据库_用python批量插入数据到数据库中
既然使用python操作数据库必不可少的得使用pymysql模块 可使用两种方式进行下载安装: 1.使用pip方式下载安装 pip install pymysql 2.IDE方式 安装完成后就可以正常 ...
- 使用mybatis plus批量插入数据
之前用mybaits插入数据时,需要在sql语句中作特殊的处理,然后才能够批量插入数据. 今天试验了一下mybatis plus的批量插入方式,简直太简单了,太爽了,真真切切的体会到了科技就是生产力. ...
- MyBatis 批量插入数据到Oracle
Oracle批量插入数据写法 INSERT INTO USER (ID, NAME) <foreach collection="list" item="item&q ...
- springmvc+mybatis+ajax 批量插入数据
2019独角兽企业重金招聘Python工程师标准>>> 批量插入.AJAX发起请求,核心代码如下: var mids = new Array(); for (var i=0; i&l ...
最新文章
- Ajax+SpringBoot+Thymeleaf使用中遇到的跳转页面问题
- 电脑基础操作_学打碟基础技术 - 数码打碟篇
- HTML基础(四):注释、URL参数、访问路径、图片地图
- .NET面试经典问答
- html里面onclick属性是什么,html中onclick事件属性定义与用法
- NYOJ--1236--挑战密室(第八届河南省程序设计大赛)
- Linux常用的命令及操作技巧
- swift 选中长按项_Swift下使用UICollectionView 实现长按拖拽功能
- C/C++ Native 包大小测量
- 《计算机网络》学习笔记 ·002【物理层】
- scala切片_Scala切片功能
- hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别
- [BZOJ1594] [Usaco2008 Jan]猜数游戏(二分 + 并查集)
- django下载安装
- AB压力测试(简易版操作)
- RS232串口接线图
- 24点游戏(C++)
- ue4 ui 序列图_UE4入门之路(UI篇):UMG系统介绍
- java.exe,javac.exe,javaw.exe 是什么进程? (转载)
- eclipse安装WindousBuilder为什么在项目里不显示
热门文章
- 开源内容管理系统 php mysql_30 个很棒的PHP开源CMS内容管理系统小结
- 探秘:TriCore处理器中断机制
- JVM专题之垃圾回收器
- Spark源码分析之Job触发原理
- ConsumerNetworkClient 分析
- js设置html不可编辑状态,JS_设置弹出页面的地址栏不可编辑
- Modelsim-Altera仿真设置
- python tkinter button_[转载]Python Tkinter之Button(转载)
- java excel odbc_Java:无法使用JDBC ODBC更新Excel
- ios 控件切圆_iOS中 切圆角,任意几个角(带边框,不带边框)__OC和Swift版本 韩俊强的博客...