mybatis的insert语句如何返回主键值的问题,在线等!

CoderPrince 2016-09-27 11:04:51

我写了一个insert,数据库是oracle。首先是serviceImpl类调用mapper的接口


这是mapper.java的方法定义:


这是mapper.xml的SQL实现:


最终这个insert返回的还是默认的 影响的行数,我想让它返回给我custId,也就是插入的主键,应该怎么做?
在线等,谢谢了!
...全文
1254 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
三木来啦 2017-06-01
  • 打赏
  • 举报
回复
所以,楼主是怎么获取到主键的值的呢?
Swen程序员 2016-09-27
  • 打赏
  • 举报
回复
使用selectKey吧~
CoderPrince 2016-09-27
  • 打赏
  • 举报
回复
引用 10 楼 shijing266 的回复:
[quote=引用 9 楼 u012150261 的回复:] [quote=引用 7 楼 shijing266 的回复:] statementType="STATEMENT" 我看了下你没有动态表名和列名,为啥要设置这个属性?
是没有,我这时copy的其它地方的insert语句。。我给删掉吧。[/quote] 恩,因为mybatis + oracle返回主键总共就那么几个属性配置,这里有个比较全面的介绍[/quote] 对,好奇怪 就是不反悔给我主键,因为我下面还要拿到这个主键插入到另外一张表。
  • 打赏
  • 举报
回复
引用 9 楼 u012150261 的回复:
[quote=引用 7 楼 shijing266 的回复:] statementType="STATEMENT" 我看了下你没有动态表名和列名,为啥要设置这个属性?
是没有,我这时copy的其它地方的insert语句。。我给删掉吧。[/quote] 恩,因为mybatis + oracle返回主键总共就那么几个属性配置,这里有个比较全面的介绍
CoderPrince 2016-09-27
  • 打赏
  • 举报
回复
引用 7 楼 shijing266 的回复:
statementType="STATEMENT" 我看了下你没有动态表名和列名,为啥要设置这个属性?
是没有,我这时copy的其它地方的insert语句。。我给删掉吧。
CoderPrince 2016-09-27
  • 打赏
  • 举报
回复
引用 5 楼 wlwlwlwl015 的回复:
oracle的话需要结合触发器来做~ 你直接这样用keyProperty是没用的
你看我的代码 <selectKey> 标签里面就是调用触发器获取主键了。
  • 打赏
  • 举报
回复
statementType="STATEMENT" 我看了下你没有动态表名和列名,为啥要设置这个属性?
CoderPrince 2016-09-27
  • 打赏
  • 举报
回复
引用 4 楼 shijing266 的回复:
[quote=引用 3 楼 u012150261 的回复:] [quote=引用 1 楼 shijing266 的回复:] 你还少了个属性:useGeneratedKeys="true" 例如:
 <insert id="insert" useGeneratedKeys="true" keyProperty="orderId"  
  			parameterType="com.cq2022.zago.order.entity.Order" >
    insert into t_order
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="orderId != null" >
请问 Oracle也需要useGeneratedKeys="true" 这个属性吗? 这个好像是主键自动增长的数据库支持的?[/quote] 抱歉,看错了,你的是oracle数据库是吧? 不支持这个属性的[/quote] 嗯 是的。请问有什么办法吗?我百度搜了半天了,他们用Oracle返回主键的insert语句也就这几个属性配置,也没什么其它特别的
小灯光环 2016-09-27
  • 打赏
  • 举报
回复
oracle的话需要结合触发器来做~ 你直接这样用keyProperty是没用的
  • 打赏
  • 举报
回复
引用 3 楼 u012150261 的回复:
[quote=引用 1 楼 shijing266 的回复:] 你还少了个属性:useGeneratedKeys="true" 例如:
 <insert id="insert" useGeneratedKeys="true" keyProperty="orderId"  
  			parameterType="com.cq2022.zago.order.entity.Order" >
    insert into t_order
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="orderId != null" >
请问 Oracle也需要useGeneratedKeys="true" 这个属性吗? 这个好像是主键自动增长的数据库支持的?[/quote] 抱歉,看错了,你的是oracle数据库是吧? 不支持这个属性的
CoderPrince 2016-09-27
  • 打赏
  • 举报
回复
引用 1 楼 shijing266 的回复:
你还少了个属性:useGeneratedKeys="true" 例如:
 <insert id="insert" useGeneratedKeys="true" keyProperty="orderId"  
  			parameterType="com.cq2022.zago.order.entity.Order" >
    insert into t_order
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="orderId != null" >
请问 Oracle也需要useGeneratedKeys="true" 这个属性吗? 这个好像是主键自动增长的数据库支持的?
  • 打赏
  • 举报
回复
你还少了个属性:useGeneratedKeys="true" 例如:
 <insert id="insert" useGeneratedKeys="true" keyProperty="orderId"  
  			parameterType="com.cq2022.zago.order.entity.Order" >
    insert into t_order
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="orderId != null" >
hersing 2016-09-27
  • 打赏
  • 举报
回复
好像直接用custInfo.getId()就可以拿到你刚插入的主键ID
CoderPrince 2016-09-27
  • 打赏
  • 举报
回复
问题已经解决了,在mybatis执行完insert操作后,我传入到insert()里面的那个custInfo对象,就有ID值了!!! mybatis自动给赋值上了!!! 坑爹啊,我一直用一个变量(lineNum)接收,只能接收到影响的行数!!!
书籍1:互联网 Java 工程师面试题 内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、 Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、 Linux 等技术栈 1、MyBatis 面试题 1、什么是 Mybatis 2、Mybaits 的优点 3、MyBatis 框架的缺点 4、MyBatis 框架适用场合 5、MyBatis 与 Hibernate 有哪些不同? 6、#{}和${}的区别是什么? 7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 8、 模糊查询 like 语句该怎么写? 9、通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗? 10、Mybatis 是如何进行分页的?分页插件的原理是什么? 11、Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式? 12、如何执行批量插入? 13、如何获取自动生成的()键值? 14、在 mapper 中如何传递多个参数? 15、Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql? 16、Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签? 18、为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里? 19、 一对一、一对多的关联查询 ? 20、MyBatis 实现一对一有几种方式?具体怎么操作的? 21、MyBatis 实现一对多有几种方式,怎么操作的? 22、Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么? 23、Mybatis 的一级、二级缓存 24、什么是 MyBatis 的接口绑定?有哪些实现方式? 25、使用 MyBatis 的 mapper 接口调用时有哪些要求? 26、Mapper 编写有哪几种方式? 27、简述 Mybatis 的插件运行原理,以及如何编写一个插件 等等 书籍2:JAVA核心知识整理

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧