MyBatis在Oracle中插入数据并返回主键的问题解决
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
前言:我早期用过这个方法,但是返回的依旧是影响行数,不是主键。
只是这种写法可以达到我要的效果:
用selectKey ,在insert 执行成功后,对象的ID属性已经被 MyBatis 赋值了,可以直接对象.id 取到主键值。
引言: 在MyBatis中,希望在Oracle中插入数据之时,同时返回主键值,而非插入的条数...
环境:MyBatis 3.2 , Oracle, Spring 3.2
SQL Snippet in XML Configuration:
- <insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo">
- <selectKey resultType="java.math.BigDecimal" order="BEFORE" keyProperty="id">
- SELECT U_USER_INFO_SEQ.Nextval as ID from DUAL
- </selectKey>
- insert into U_USER_INFO
- <trim prefix="(" suffix=")" suffixOverrides="," >
- <if test="id != null" >
- ID,
- </if>
- <if test="userName != null" >
- USER_NAME,
- </if>
- <if test="realName != null" >
- REAL_NAME,
- </if>
- .....
- </insert>
要点是这里使用了selectKey来定义返回新生成的PrimaryKey,这个情况仅仅适用于Oracle。
需要注意的地方是在Java代码中使用Integer类型,但是在MyBatis的映射文件中,使用java.math.BigDecimal类型,否则会报类型转换或者不匹配的错误。
其他比如MySQL或者SQLServer的情况适用于以下情况:
- <insert id="insert" parameterType="Spares"
- useGeneratedKeys="true" keyProperty="id">
- insert into spares(spares_id,spares_name,
- spares_type_id,spares_spec)
- values(#{id},#{name},#{typeId},#{spec})
- </insert>
使用useGeneratedKeys/KeyProperty来实现插入数据的时候,来完成新生成主键的返回。
其中异常信息的解决:
异常信息:
org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException: 无效的列类型: getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor
; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 无效的列类型: getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor; nested exception is java.sql.SQLException:
无效的列类型: getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor
问题解决:
问题是在Java代码中设置返回的主键数据类型,其中返回的数据类型为java.lang.Integer,而非BigDecimal和Long. 但是在MyBatis中的映射文件中的类型为java.math.BigDecimal.
MyBatis在Oracle中插入数据并返回主键的问题解决相关推荐
- oracle批量插入并且返回自增主键_mybatis + (oracle)实现主键自增 + 插入数据并返回主键...
一.实现主键自增 在oracle数据库中,主键并没有办法自动增长,无法使用insert对应的useGeneratedKeys和keyProperty属性自动返回增加的主键. 要实现自增需要修改 ID列 ...
- mybatis 插入数据时返回主键
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:显然,假如主键是你生成后插入的,自然你已经有主键了,显然不需要我们再去获得,所以我们这里处理的是当主键 ...
- MYSQL插入数据后返回主键
最近做项目,要求不能使用mybatis等框架,所以一切数据库访问操作都是用原生的JDBC. 用过mybatis的都知道,插入新数据后可以直接返回主键的值,但是使用JDBC不行,于是上网搜了一下,找到一 ...
- mysql插入时间区间_mybatis插入数据时返回主键以及MySQL根据时间区间查询问题总结...
最近做项目的过程中,在数据库方面遇到了两个问题,一是在插入一条数据的时候需要将该条数据的主键返回.二是根据时间区间进行查询时某一天的数据查询不到,在此总结记录一下. 1.如何在插入一条数据的同时将主键 ...
- 使用mybatis向oracle数据库插入数据异常
遇到了使用mybatis向oracle数据库插入数据异常的问题, 具体的报错如下:org.springframework.jdbc.UncategorizedSQLException: ### Err ...
- python mysql批量insert数据、返回id_Python3 操作 MySQL 插入一条数据并返回主键 id的实例...
Python 中貌似并没有直接返回插入数据 id 的操作(反正我是没找到),但是我们可以变通一下,找到最新插入的数据 #!/usr/bin/env python3 # -*- coding: UTF- ...
- Mybatis插入数据后获取主键的值
Mybatis插入数据后获取主键的值 1. 所使用的数据库是支持自增的,且主键是自增的 <!-- 支持自增的数据库且主键是自增的:自动将插入后自增id的值赋值给传入的Employee的id--& ...
- MyBatis在insert插入操作时返回主键ID
数据库为MySql时: <insert id="insert" parameterType="com.test.User" keyProperty=&q ...
- Mybatis insert数据时返回主键
Mybatis insert 时候默认返回行数,想要获取主键,可以在写xml时候添加属性配置,以MySQL为例 keyProperty="id" useGeneratedKeys= ...
最新文章
- Oracle-ORA-01722 invalid number错误
- 文件夹的位置_win10添加网络位置向导 提示:‘输入的文件夹似乎无效。请选择另一个’解决方法...
- python管道符_Python实现处理管道的方法
- 元组-元组变量的常用操作
- 增长黑客的秘诀在于数据的运用
- sqlserver存储过程学习
- 六部工坊ros启智机器人定点导航技术_【展品抢鲜看】程天科技外骨骼机器人亮相峰会,让每个人享受机器人的服务!...
- 压箱底的Android UI开源库(一)
- Atiti attilax主要成果与解决方案与案例rsm版
- 百度谷歌雅虎搜狗提交链接入口
- Cocos2d-x移植android增加震动效果
- oracle 查询default,oracle分区表检查--是否带有max或default分区
- ASP.NET使用WPS WORD转PDF
- 微信小程序地图组件利用腾讯地图生成热力图
- 用JSON-server模拟REST API
- 《玩转股票量化交易》知识星球2021年度回顾
- Java jna 中控考勤机_中控考勤机开发 jacob 实现监听
- 如何用Matlab求不定积分
- Android build sequence
- 手把手教你写CS231N作业一 KNN分类器 详细解析 作业源文件 数据集
热门文章
- 百度二年级手工机器人_让父母少弯腰的家务神器——追觅扫拖机器人慧目F9评测...
- tkinter label_tkinter做一个简易提词板
- iphone闪退修复工具_升级 iOS 14.2 微信闪退?iPhone 12 维修贵
- Spark一些组件的定义
- 【Python CheckiO 题解】Multicolored Lamp
- 一台电脑部署两个或多个 Hexo 博客(一台电脑使用两个或多个 GitHub 账号)
- 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf
- 计算几何 -- 旋转坐标系
- 【CodeForces - 1150A】Stock Arbitraging (贪心,水题)
- 【HDU - 1220】Cube (组合数学,简单)