mybatis oracle mysql 批量插入

标签: mybatis oracle mysql | 发表时间:2014-08-08 15:29 | 作者:langmnm
出处:http://www.iteye.com
一、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,

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

引用

引用


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [mybatis oracle mysql] 推荐:

mybatis oracle mysql 批量插入

- - Oracle - 数据库 - ITeye博客
一、oracle的批量插入方式. 二、mysql的批量插入方式. ORA-00918:未明确定义列. 如果不设置列名,那么#{item.senderPhone}的值就是默认列名,那么就有很多概率会产生列名重复,而产生异常. (两个列的值完全可能一样). #{item.receiveTime} 值为null时,必须指定转换类型.

Linux Ksplice,MySQL and Oracle

- Syn - DBA Notes
Oracle 在 7 月份收购了 Ksplice. 使用了 Ksplice 的 Linux 系统,为 Kernel 打补丁无需重启动,做系统维护的朋友应该明白这是一个杀手级特性. 现在该产品已经合并到 Oracle Linux 中. 目前已经有超过 700 家客户,超过 10 万套系统使用了 Ksplice (不知道国内是否已经有用户了.

Oracle MySQL Or NoSQL续

- - Sky.Jian 朝阳的天空
接前面一篇,这里再将之前在“中国系统架构师大会”5周年的时候发布的纪念册“IT架构实录”上的一篇文章发出来,也算是前面博文中PPT的一个文字版解读吧. Oracle,MySQL 还是 NoSQL. 随着阿里系的“去IOE”运动在社区的宣传声越来越大,国内正在掀起一股“去xxx”的技术潮. 不仅仅是互联网企业,包括运营商以及金融机构都已经开始加入到这个潮流之中.

oracle、mysql和sqlserver分页

- - Oracle - 数据库 - ITeye博客
sql server row number分页:. mysql limit分页:. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

MySQL与Oracle的大小写问题

- - 数据库 - ITeye博客
前段时间,维护的一个应用在Oracle测试时出错,该应用原来已经在MySQL上完成测试. 通过查找定位,原因是字段名大小写问题. 下面与大家分离一下MySQL与Oracle在大小写处理上的区别:. 1、在Windows下,数据库名、表名、字段名不区分大小写. 2、大Linux/Unix下,数据库名、表名区分大小写,字段名不区分大小写.

mybatis-generator配置

- - 开源软件 - ITeye博客
新项目要用mybatis,为了开发效率和方便开发,研究了mybatis-generate,在maven环境下,通过插件的形式配置,废话不多说. .    由于M2e不支持这个goal,会报错,忽略这个goal就好了,具体原因请看:. 解决办法把下面这段配置添加到与plugins平级目录中即可解决:.

从Oracle到MySQL,金融核心场景在线换库落地实战 - MySQL

- -
本文根据王英杰老师在〖deeplus直播第234期〗线上分享演讲内容整理而成. (文末有获取本期PPT&回放的方式,不要错过). 大家好,我是陆金所数据库团队的负责人王英杰. 这次的分享主要集中在陆金所去O在线换库的技术特点上,之后详细给大家剖析陆金所设计的在线换库方案以及方案如何在一个庞大的金融系统里通过多个团队的紧密配合稳妥落地.

Spring+MyBatis实践——MyBatis访问数据库

- - 开源软件 - ITeye博客
    在http://dufengx201406163237.iteye.com/blog/2102054中描述了工程的配置,在此记录一下如何使用MyBatis访问数据库;. . .

Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间

- - CSDN博客推荐文章
例如有表table,table 中有两个字段:name 、makedate. 插入系统时间应为sysdate:. insert into table (name,makedate) values('测试',sysdate);. 插入系统时间应为current timestamp并且makedate数据类型为timestamp.

从Oracle转到Mysql前需了解的50个主意事项

- - ITeye博客
1、 对子查询的优化表现不佳. 2、 对复杂查询的处理较弱. 3、 查询优化器不够成熟. 4、 性能优化工具与度量信息不足. 6、 安全功能不成熟,甚至可以说很粗糙. 没有用户组与角色的概念,没有回收权限的功能(仅仅可以授予权限). 当一个用户从不同的主机/网络以同样地用户名/密码登录之后,可能被当作完全不同的用户来处理.