`

mybatis oracle mysql 批量插入

阅读更多
一、oracle的批量插入方式
insert  into db(id, zgbh, shbzh) 
        select '1', '2', '3' from dual 
        union all select '2', '3', '4' from dual 
        union all select '3', '4', '5' from dual 
        union all select '4', '5', '6' from dual 
        union all select '5', '6', '7' from dual 

	<insert id="insertMoSmsList" parameterType="com.xxx.XxxBean">
		INSERT INTO TBL_xxx_DETAIL
		(
			id, zgbh, shbzh, ReceiveTime
		) SELECT SEQ_xxx_DETAIL.NEXTVAL, A.* FROM(
		<foreach collection="list" item="item" index="index" separator="UNION ALL">
		<![CDATA[
			SELECT
				#{item.id, jdbcType=INTEGER} AS id,
				#{item.zgbh, jdbcType=VARCHAR} AS zgbh,
				#{item.shbzh, jdbcType=VARCHAR} AS shbzh,
				TO_DATE(#{item.receiveTime, jdbcType=DATE},'yyyy-mm-dd hh24:mi:ss') AS ReceiveTime
			FROM dual
		]]>
		</foreach>
		) A 
	</insert>


二、mysql的批量插入方式
INSERT INTO MyTable(ID,NAME) VALUES
        (7,'003'),(8,'004'),(9,'005')

<insert id="insertBatch" >  
    insert into student ( NAME,SEX,ADDRESS,TELEPHONE,TID)   
    values   
    <foreach collection="list" item="item" index="index" open="(" separator=","  close=")">  
         #{item.name}, 
         #{item.sex}, 
         #{item.address}, 
         #{item.telephone}, 
         #{item.tId}  
    </foreach>  
</insert> 


三、容易发生的异常
1. "A.*" 无效列
引用
ORA-00918:未明确定义列

解决方法:
#{item.senderPhone, jdbcType=VARCHAR} AS SenderPhone
如果不设置列名,那么#{item.senderPhone}的值就是默认列名,那么就有很多概率会产生列名重复,而产生异常。(两个列的值完全可能一样)

2. #{item.receiveTime} 值为null时,必须指定转换类型
引用
JDBC requires that the JdbcType must be specified for all nullable parameter

MyBatis 插入空值时,需要指定JdbcType
mybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换

解决方法:
因为你传入的参数的字段为null对象无法获取对应的jdbcType类型,而报的错误。
你只要在insert语句中insert的对象加上jdbcType就可以了,修改如下:
#{item.receiveTime, jdbcType=DATE} AS ReceiveTime,

TO_DATE(#{item.receiveTime, jdbcType=DATE},'yyyy-mm-dd hh24:mi:ss') AS ReceiveTime,

这样就可以解决以上错误了。

引用

引用
分享到:
评论

相关推荐

    mybatis+Oracle做批量导入时的坑

    这样做是因为Oracle不支持像MySQL那样的`VALUES`子句进行批量插入,所以我们需要模拟这个过程,通过`UNION ALL`将多个单行查询组合成一个大的`SELECT`。 在Service层,我们定义了`addBleaseList`方法,它接收一个`...

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

    MyBatis foreach批量插入数据:Oracle与MySQL区别介绍 MyBatis foreach批量插入数据是一种高效的数据批量插入方式,通过foreach标签可以实现批量插入数据。但是,在不同的数据库管理系统中,foreach标签的使用有...

    Mybatis批量foreach merge into的用法

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

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

    本文将深入探讨MyBatis中实现批量插入的两种高效方式。 ### 1. MyBatis `foreach` 标签 `foreach` 是MyBatis中用于在SQL语句中迭代集合的标签,特别适合构建`IN`条件。`foreach` 元素的属性包括: - `item`: 集合...

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

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

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

    总之,当在Oracle数据库中使用MyBatis进行批量插入时,务必注意适应Oracle的特定语法,如使用`INSERT ALL`,避免使用MySQL等其他数据库系统适用的语法,如逗号分隔的`VALUES`列表。同时,确保正确处理主键生成逻辑,...

    Oracle/MySQL生成mybatis文件工具

    2. `insert`标签:用于插入新记录,支持批量插入。 3. `update`标签:用于更新现有记录,同样可以利用动态SQL进行条件判断。 4. `delete`标签:用于删除记录,依据特定条件执行。 实体类Java文件则是数据库表的Java...

    mybatis批量添加实现1

    // MySQL批量插入 public void insertBatchForMysql(List&lt;CommandContent&gt; commandContentList); } ``` 五、总结 Mybatis通过`&lt;foreach&gt;`标签实现了动态SQL的生成,让批量插入变得简单。在实际应用中,根据...

    MyBatis Oracle 自增序列的实现方法

    在MyBatis的配置文件中,你可能已经为其他支持自增主键的数据库(如MySQL)设置了`useGeneratedKeys="true"`,但对Oracle来说,因为自增机制不同,需要在插入语句中显式调用序列。所以,对于Oracle,你需要按照上述...

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

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

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

    但是,如何将List类型参数传递给Oracle存储过程,实现批量插入数据却是一个棘手的问题,本文将给大家介绍Mybatis传List参数调用Oracle存储过程的解决方法。 使用Mybatis传List参数调用Oracle存储过程的解决方法 在...

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

    Mybatis 插入一条或批量插入 返回带有自增长主键记录的实例 Mybatis 是一个基于 Java 的持久层框架,它提供了对数据库的访问和操作的功能。今天,我们将分享一个关于 Mybatis 插入一条或批量插入 返回带有自增长...

    SpringBoot定时任务实现Oracle和mysql数据同步

    如果需要批量插入,可以考虑使用`batchUpdate()`方法。 6. **错误处理**:在整个过程中,一定要捕获并处理可能出现的异常,保证系统的稳定运行。 7. **事务管理**:为了确保数据的一致性,可以在一个事务中完成...

    mybatis-generator

    在实际开发中,分页查询通常需要结合数据库特定的分页语法,例如MySQL的LIMIT和OFFSET,Oracle的ROWNUM等,mybatis-generator-plus会根据不同的数据库方言生成对应的分页SQL。 在使用mybatis-generator-plus时,你...

    尚硅谷Mybatis视频教程41-50

    - **Oracle下的批量插入**:Oracle数据库有自己的批量插入语法,可能与MySQL有所不同,此视频会对比分析两种数据库的批量操作差异。 4. **50.尚硅谷_MyBatis_动态sql_sql_抽取可重用的sql片段.avi** - **SQL片段...

    Struts2批量插入

    对于数据库操作,MySQL Workbench、Oracle SQL Developer等可视化工具可以帮助编写和执行SQL语句,验证批量插入的效果。 总的来说,Struts2批量插入涉及到前端表单提交、Action处理、数据库操作等多个环节,理解并...

    mybatis plus 3.2.1破解版

    4. **批量插入与更新**:支持单个对象和List对象的批量插入和更新操作,提高数据库操作效率。 5. **分页插件**:内置了物理分页插件,兼容多种数据库,如MySQL、Oracle等,无需手动编写分页代码。 6. **数据权限...

    Mybatis增强工具包(Mybatis plus) v3.5.3.2.zip

    内置了分页插件,可以方便地实现分页查询,支持多种数据库的分页方式,如 MySQL、Oracle 等,使用 `Page` 对象进行分页参数设置和结果接收。 6. **主键生成策略**: 提供了多种主键生成策略,包括 Identity(自动...

    mybatis-plus学习项目笔记

    MyBatis-Plus是一个强大的MyBatis扩展框架,它简化了常见的CRUD操作,提供了诸如自动填充、条件构造器、批量插入等实用功能。在这个"mybatis-plus学习项目笔记"中,我们可以深入探讨MyBatis-Plus的核心特性,以及...

Global site tag (gtag.js) - Google Analytics