1.方式一【不建议使用】
【有BUG的方式】通过useGeneratedKeys="true" keyProperty="id"来设置返回新的id值,这里有个问题就是,通过这种方式插入的值,经常会返回1,原因是因为他这里的意思是返回当前影响的行数,不能准确返回你新插入的id值【虽然有时候返回的结果是准确的】
<!--插入新的用户数据-->
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.hxj.pojo.User">
insert into user(id,username,password,email,province,city,hobby,createtime)
values(#{id},#{username},#{password},#{email},#{province},#{city},#{hobby},#{createtime})
</insert>
2.方式二【建议使用】
【无BUG的方式】xml里面的代码
<!--添加订单到order-->
<insert id="insert" parameterType="com.hxj.pojo.Orderx">
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
select LAST_INSERT_ID()
</selectKey>
insert into orderx(userid,allprice,ordertime,address)
values(#{userid},#{allprice},#{ordertime},#{address})
</insert>
【无BUG的方式】service里面的代码
/**
* 插入新的order数据,返回的值是新插入的order的id
* @param orderx
* @return
*/
@Override
public Integer insert(Orderx orderx){
SqlSession sqlSession = MyBatisUtils.getSqlSession(true);
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
orderMapper.insert(orderx);//先执行插入orderx的语句
Integer id = orderx.getId();//通过orderx.getId()获取你新插入数据的id值
return id;//返回新插入的数据id
}
本文介绍了在MyBatis中如何正确获取新插入数据的ID。方式一通过`useGeneratedKeys=true keyProperty=id`可能存在返回行数而非ID的问题。而方式二使用`<selectKey>`标签配合`LAST_INSERT_ID()`函数可以确保无误地获取新插入的ID。在Service层,可以通过对象属性直接获取新ID并返回。

2万+

被折叠的 条评论
为什么被折叠?



