其他
如何获取 MySQL 插入数据的自增 ID
作者:学无止境
来源:https://www.cnblogs.com/duanxz/p/3862356.html
前言
mysql> SELECT LAST_INSERT_ID();
方法二:是使用max(id)
使用last_insert_id是基础连接的,如果换一个窗口的时候调用则会一直返回10
如果不是频繁的插入我们也可以使用这种方法来获取返回的id值
select max(id) from user;
这个方法的缺点是不适合高并发。如果同时插入的时候返回的值可能不准确。
方法三:是创建一个存储过程,在存储过程中调用先插入再获取最大值的操作
DELIMITER $$
DROP PROCEDURE IF EXISTS `test` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(in name varchar(100),out oid int)
BEGIN
insert into user(loginname) values(name);
select max(id) from user into oid;
select oid;
END $$
DELIMITER ;
call test('gg',@id);
方法四:使用@@identity
select @@IDENTITY
方法五:是使用getGeneratedKeys()
Connection conn = ;
Serializable ret = null;
PreparedStatement state = .;
ResultSet rs=null;
try {
state.executeUpdate();
rs = state.getGeneratedKeys();
if (rs.next()) {
ret = (Serializable) rs.getObject(1);
}
} catch (SQLException e) {
}
return ret;
<insert id="insert" parameterType="map">
insert into table1 (name) values (#{name})
<selectKey resultType="java.lang.Integer" keyProperty="id">
CALL IDENTITY()
</selectKey>
</insert>
上面xml的传入参数是map,selectKey会将结果放到入参数map中。用POJO的情况一样,但是有一点需要注意的是,keyProperty对应的字段在POJO中必须有相应的setter方法,setter的参数类型还要一致,否则会报错。
@Insert("insert into table2 (name) values(#{name})")@SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)int insertTable2(Name name);
上面是注解的形式。方法:7:使用<insert中的useGeneratedKeys 和keyProperty 两个属性
1.在Mybatis Mapper文件中添加属
性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名,而不是表格的字段名。
<insert id="insert" parameterType="Spares" useGeneratedKeys="true" keyProperty="id">
insert into system(name) values(#{name})
</insert>
2.Mybatis执行完插入语句后,自动将自增长值赋值给对象systemBean的属性id。因此,可通过systemBean对应的getter方法获取!
int count = systemService.insert(systemBean);int id = systemBean.getId(); //获取到的即为新插入记录的ID
注意事项
1.Mybatis Mapper 文件中,“useGeneratedKeys”和“keyProperty”必须添加,而且keyProperty一定得和java对象的属性名称一直,而不是表格的字段名
2.java Dao中的Insert方法,传递的参数必须为java对象,也就是Bean,而不能是某个参数。
阅读更多
4月的技术面试,如何准备?我从面试官给你说面经:通过五轮面试斩获offer的阿里实习生亲述!点赞功能,用 MySQL 还是 Redis ?
相信自己,没有做不到的,只有想不到的
在这里获得的不仅仅是技术!
喜欢就给个“在看”