前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

前言:我早期用过这个方法,但是返回的依旧是影响行数,不是主键。

只是这种写法可以达到我要的效果:

用selectKey ,在insert 执行成功后,对象的ID属性已经被 MyBatis 赋值了,可以直接对象.id 取到主键值。 

引言:  在MyBatis中,希望在Oracle中插入数据之时,同时返回主键值,而非插入的条数...

环境:MyBatis 3.2 , Oracle, Spring 3.2

SQL Snippet in XML Configuration:

[html] view plain copy
  1. <insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo">
  2. <selectKey resultType="java.math.BigDecimal" order="BEFORE" keyProperty="id">
  3. SELECT U_USER_INFO_SEQ.Nextval as ID from DUAL
  4. </selectKey>
  5. insert into U_USER_INFO
  6. <trim prefix="(" suffix=")" suffixOverrides="," >
  7. <if test="id != null" >
  8. ID,
  9. </if>
  10. <if test="userName != null" >
  11. USER_NAME,
  12. </if>
  13. <if test="realName != null" >
  14. REAL_NAME,
  15. </if>
  16. .....
  17. </insert>

要点是这里使用了selectKey来定义返回新生成的PrimaryKey,这个情况仅仅适用于Oracle。

需要注意的地方是在Java代码中使用Integer类型,但是在MyBatis的映射文件中,使用java.math.BigDecimal类型,否则会报类型转换或者不匹配的错误。

其他比如MySQL或者SQLServer的情况适用于以下情况:

[html] view plain copy
  1. <insert id="insert" parameterType="Spares"
  2. useGeneratedKeys="true" keyProperty="id">
  3. insert into spares(spares_id,spares_name,
  4. spares_type_id,spares_spec)
  5. values(#{id},#{name},#{typeId},#{spec})
  6. </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中插入数据并返回主键的问题解决相关推荐

  1. oracle批量插入并且返回自增主键_mybatis + (oracle)实现主键自增 + 插入数据并返回主键...

    一.实现主键自增 在oracle数据库中,主键并没有办法自动增长,无法使用insert对应的useGeneratedKeys和keyProperty属性自动返回增加的主键. 要实现自增需要修改 ID列 ...

  2. mybatis 插入数据时返回主键

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:显然,假如主键是你生成后插入的,自然你已经有主键了,显然不需要我们再去获得,所以我们这里处理的是当主键 ...

  3. MYSQL插入数据后返回主键

    最近做项目,要求不能使用mybatis等框架,所以一切数据库访问操作都是用原生的JDBC. 用过mybatis的都知道,插入新数据后可以直接返回主键的值,但是使用JDBC不行,于是上网搜了一下,找到一 ...

  4. mysql插入时间区间_mybatis插入数据时返回主键以及MySQL根据时间区间查询问题总结...

    最近做项目的过程中,在数据库方面遇到了两个问题,一是在插入一条数据的时候需要将该条数据的主键返回.二是根据时间区间进行查询时某一天的数据查询不到,在此总结记录一下. 1.如何在插入一条数据的同时将主键 ...

  5. 使用mybatis向oracle数据库插入数据异常

    遇到了使用mybatis向oracle数据库插入数据异常的问题, 具体的报错如下:org.springframework.jdbc.UncategorizedSQLException: ### Err ...

  6. python mysql批量insert数据、返回id_Python3 操作 MySQL 插入一条数据并返回主键 id的实例...

    Python 中貌似并没有直接返回插入数据 id 的操作(反正我是没找到),但是我们可以变通一下,找到最新插入的数据 #!/usr/bin/env python3 # -*- coding: UTF- ...

  7. Mybatis插入数据后获取主键的值

    Mybatis插入数据后获取主键的值 1. 所使用的数据库是支持自增的,且主键是自增的 <!-- 支持自增的数据库且主键是自增的:自动将插入后自增id的值赋值给传入的Employee的id--& ...

  8. MyBatis在insert插入操作时返回主键ID

    数据库为MySql时:  <insert id="insert" parameterType="com.test.User" keyProperty=&q ...

  9. Mybatis insert数据时返回主键

    Mybatis insert 时候默认返回行数,想要获取主键,可以在写xml时候添加属性配置,以MySQL为例 keyProperty="id" useGeneratedKeys= ...

最新文章

  1. Oracle-ORA-01722 invalid number错误
  2. 文件夹的位置_win10添加网络位置向导 提示:‘输入的文件夹似乎无效。请选择另一个’解决方法...
  3. python管道符_Python实现处理管道的方法
  4. 元组-元组变量的常用操作
  5. 增长黑客的秘诀在于数据的运用
  6. sqlserver存储过程学习
  7. 六部工坊ros启智机器人定点导航技术_【展品抢鲜看】程天科技外骨骼机器人亮相峰会,让每个人享受机器人的服务!...
  8. 压箱底的Android UI开源库(一)
  9. Atiti  attilax主要成果与解决方案与案例rsm版
  10. 百度谷歌雅虎搜狗提交链接入口
  11. Cocos2d-x移植android增加震动效果
  12. oracle 查询default,oracle分区表检查--是否带有max或default分区
  13. ASP.NET使用WPS WORD转PDF
  14. 微信小程序地图组件利用腾讯地图生成热力图
  15. 用JSON-server模拟REST API
  16. 《玩转股票量化交易》知识星球2021年度回顾
  17. Java jna 中控考勤机_中控考勤机开发 jacob 实现监听
  18. 如何用Matlab求不定积分
  19. Android build sequence
  20. 手把手教你写CS231N作业一 KNN分类器 详细解析 作业源文件 数据集

热门文章

  1. 百度二年级手工机器人_让父母少弯腰的家务神器——追觅扫拖机器人慧目F9评测...
  2. tkinter label_tkinter做一个简易提词板
  3. iphone闪退修复工具_升级 iOS 14.2 微信闪退?iPhone 12 维修贵
  4. Spark一些组件的定义
  5. 【Python CheckiO 题解】Multicolored Lamp
  6. 一台电脑部署两个或多个 Hexo 博客(一台电脑使用两个或多个 GitHub 账号)
  7. 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf
  8. 计算几何 -- 旋转坐标系
  9. 【CodeForces - 1150A】Stock Arbitraging (贪心,水题)
  10. 【HDU - 1220】Cube (组合数学,简单)