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

CoderPrince 2016-09-27 11:04:51

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


这是mapper.java的方法定义:


这是mapper.xml的SQL实现:


最终这个insert返回的还是默认的 影响的行数,我想让它返回给我custId,也就是插入的主键,应该怎么做?
在线等,谢谢了!
...全文
1256 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)接收,只能接收到影响的行数!!!

81,094

社区成员

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

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