需求:

使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值

方法:

在mapper中指定keyProperty属性,示例如下:

<insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" parameterType="cn.stu.entity.UserEntity">insert into user(userName,password,comment)  values(#{userName},#{password},#{comment})
</insert>

注意

此处可能会有坑:如果在<insert>的右边尖括号之后有空格,在启动时可能会报:元素类型 "insert" 必须后跟属性规范 ">" 或 "/>",并且,在作新增操作时会一直增不进去而报SQL语法错误,碰到这类问题就把<insert>标签整体在敲一边就可以了

如上所示,我们在insert中指定了keyProperty="userId",其中userId代表插入的User对象的主键属性。

User.java

public class User {  private int userId;  private String userName;  private String password;  private String comment;  //setter and getter
}  

 UserDao.java

public interface UserDao {  public int insertAndGetId(User user);  }  

测试:

Java代码

User user = new User();
user.setUserName("chenzhou");
user.setPassword("xxxx");
user.setComment("测试插入数据返回主键功能");  System.out.println("插入前主键为:"+user.getUserId());
userDao.insertAndGetId(user);//插入操作
System.out.println("插入后主键为:"+user.getUserId());  

输出:

插入前主键为:0  
插入后主键为:15

查询数据库:

如上所示,刚刚插入的记录主键id为15

总结:

用了这个useGenerateKeys="true"后,不用再在写一句关于select的SQL(降低数据库的压力)而直接能够得到刚刚插进去的那个主键,但是——这个属性只能用在主键能自增长的数据库里面比如MySQL可以用,但是oracle就不能用了!
对于oracle返回自增主键(oracle序列)如下:

  • keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性
  • order:相对于insert语句来说它的执行顺序,只要不是自增主键,那么就设置为before
  • resultType:指定返回的结果类型
<insert id="insert" parameterType="cn.entity.Userinfo"> <selectKey keyProperty="userId" resultType="java.lang.String" order="before">select seq.nextval from dual</seledtKey>insert intouserinfo (userId,userName,userpass,usertype,address) values(#{userId},#{userName},#{userPass},#{userType},#{address})</insert>

MyBatis的插入后获得主键的方式相关推荐

  1. Mybatis 插入时获取主键的方式

    mybatis 作为一个主流的 ORM 框架,深受广大开发者的喜爱.有人的地方就有江湖,有代码的地方自然有坑,下面来说说获取 mybatis 的插入后返回的主键. 我们可以想一下自动增长的主键特性,在 ...

  2. Mybatis批量插入,返回主键ID不成功,巨坑

    一.场景说明 批量插入,返回主键ID报错 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibati ...

  3. MyBatis返回插入的数据主键

    在MyBatis开发过程中,我们经常需要解决一个问题:当插入一条数据的时候,我在接下来的操作中我需要知道刚刚插入的是哪条数据,这样我们需要获取插入数据的主键:如何在MyBatis中解决这个问题呢? 首 ...

  4. 增加一列为主键 oracle,给oracle数据库增加一列做主键,增加一个sequence,数据库怎么获得主键。...

    ? 1 删除一张表 ? delete from T_DHK_SJ; 2 给表增加一类,并做主键 alter table T_DHK_SJ add (DHKBH number(20)); alter t ...

  5. 插入后获取主键id(tkMapper)

    @Id @Column(name = "id", insertable = false) @KeySql(useGeneratedKeys = true) private Inte ...

  6. Mybatis执行插入语句后并返回主键ID

    我们知道JDBC可以实现插入语句后返回主键Id,那mybatis可以实现吗?答案是肯定的. 1.MySQL数据库设置ID自增情况 <insert id="insertUser" ...

  7. MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

  8. 3、JavaWeb中Service层的作用、MyBatis的重要组件、mybatis-config.xml中的别名映射、properties配置、#{}和${}的区别、获取插入数据的主键值

    文章目录 1.Service层的作用 2.MyBatis重要组件 Resources SqlSessionFactoryBuilder SqlSessionFactory SqlSession 针对上 ...

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

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

最新文章

  1. java awt显示到组件中出现乱码
  2. Hybird混合开发APP初学体验
  3. MPEG2-TS的小结 [1]
  4. eclipse java maven_Eclipse构建maven项目
  5. OpenCASCADE:Modeling Algorithms模块几何工具之来自约束的线和圆
  6. Arcgis自下而上从左到右进行编号
  7. eigen库安装_OpenCV+Eigen上位机程序移植(七十一)
  8. TV Distortion Bundle mac - AE画面像素破损信号干扰失真插件
  9. 「装X指南」:手把手教你包装成程序员大佬
  10. CSS样式(一)- 基本语法
  11. java 导出数据到excel
  12. 支持html签名的邮箱app,在iPhone和iPad上创建使用丰富的HTML电子邮件签名 | MOS86
  13. 虚拟机桌面图标开机位置错乱的解决方法
  14. 微信引流黑科技:手机浏览器直接唤起微信方案调研
  15. linux串口 cat,Linux命令操作之cat与cut
  16. 封装 多态 类的约束 super
  17. 风暴——老奶雷加尔使用心得
  18. 浏览器插件,轻松-快速获取网站源代码
  19. excel求和为什么是0_Excel使用小技巧-Excel里的自动求和功能
  20. 【verbs】ibv_req_notify_cq()

热门文章

  1. 力扣每日一题——独一无二出现的次数
  2. Python 高级特性 (1)- 闭包
  3. Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)
  4. 中信银行总行信息科技部笔试面试以及最后拿offer经历
  5. python对文件的读写正确操作方式
  6. 【Sql Server】DateBase-视图
  7. 联邦学习fate笔记小结
  8. ImportError: No module named tensorflow.compat.v1 忽略已经安装的某个包版本 忽略已安装版本...
  9. volatile关键字之全面深度剖析
  10. 自定义算子高性能开发