MyBatis的插入后获得主键的方式
需求:
使用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的插入后获得主键的方式相关推荐
- Mybatis 插入时获取主键的方式
mybatis 作为一个主流的 ORM 框架,深受广大开发者的喜爱.有人的地方就有江湖,有代码的地方自然有坑,下面来说说获取 mybatis 的插入后返回的主键. 我们可以想一下自动增长的主键特性,在 ...
- Mybatis批量插入,返回主键ID不成功,巨坑
一.场景说明 批量插入,返回主键ID报错 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibati ...
- MyBatis返回插入的数据主键
在MyBatis开发过程中,我们经常需要解决一个问题:当插入一条数据的时候,我在接下来的操作中我需要知道刚刚插入的是哪条数据,这样我们需要获取插入数据的主键:如何在MyBatis中解决这个问题呢? 首 ...
- 增加一列为主键 oracle,给oracle数据库增加一列做主键,增加一个sequence,数据库怎么获得主键。...
? 1 删除一张表 ? delete from T_DHK_SJ; 2 给表增加一类,并做主键 alter table T_DHK_SJ add (DHKBH number(20)); alter t ...
- 插入后获取主键id(tkMapper)
@Id @Column(name = "id", insertable = false) @KeySql(useGeneratedKeys = true) private Inte ...
- Mybatis执行插入语句后并返回主键ID
我们知道JDBC可以实现插入语句后返回主键Id,那mybatis可以实现吗?答案是肯定的. 1.MySQL数据库设置ID自增情况 <insert id="insertUser" ...
- MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- 3、JavaWeb中Service层的作用、MyBatis的重要组件、mybatis-config.xml中的别名映射、properties配置、#{}和${}的区别、获取插入数据的主键值
文章目录 1.Service层的作用 2.MyBatis重要组件 Resources SqlSessionFactoryBuilder SqlSessionFactory SqlSession 针对上 ...
- Mybatis插入数据后获取主键的值
Mybatis插入数据后获取主键的值 1. 所使用的数据库是支持自增的,且主键是自增的 <!-- 支持自增的数据库且主键是自增的:自动将插入后自增id的值赋值给传入的Employee的id--& ...
最新文章
- java awt显示到组件中出现乱码
- Hybird混合开发APP初学体验
- MPEG2-TS的小结 [1]
- eclipse java maven_Eclipse构建maven项目
- OpenCASCADE:Modeling Algorithms模块几何工具之来自约束的线和圆
- Arcgis自下而上从左到右进行编号
- eigen库安装_OpenCV+Eigen上位机程序移植(七十一)
- TV Distortion Bundle mac - AE画面像素破损信号干扰失真插件
- 「装X指南」:手把手教你包装成程序员大佬
- CSS样式(一)- 基本语法
- java 导出数据到excel
- 支持html签名的邮箱app,在iPhone和iPad上创建使用丰富的HTML电子邮件签名 | MOS86
- 虚拟机桌面图标开机位置错乱的解决方法
- 微信引流黑科技:手机浏览器直接唤起微信方案调研
- linux串口 cat,Linux命令操作之cat与cut
- 封装 多态 类的约束 super
- 风暴——老奶雷加尔使用心得
- 浏览器插件,轻松-快速获取网站源代码
- excel求和为什么是0_Excel使用小技巧-Excel里的自动求和功能
- 【verbs】ibv_req_notify_cq()
热门文章
- 力扣每日一题——独一无二出现的次数
- Python 高级特性 (1)- 闭包
- Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)
- 中信银行总行信息科技部笔试面试以及最后拿offer经历
- python对文件的读写正确操作方式
- 【Sql Server】DateBase-视图
- 联邦学习fate笔记小结
- ImportError: No module named tensorflow.compat.v1 忽略已经安装的某个包版本 忽略已安装版本...
- volatile关键字之全面深度剖析
- 自定义算子高性能开发