保存细节,获取保存数据的id
每次保存用户后,往往需要数据库返回的自增的主键值,进行下一步工作【给用户增加权限…】
如果没有保存完成后返回id这个功能。那么我们就需要在进行一次查询,这对我们来说是极其痛苦的,不光要多写SQL,多写方法,对我们来说时间是最宝贵的,项目经理给你做模块的时间一般都是不够用的。如果时间都用来写无营养的SQL,那么就避免不了加班了。
下面就来说一下怎么怎么实现
首先我们知道,在MySQL数据库中有这么一个函数 last_insert_id();此方法会查询到最后一次保存的id
- 例如
- insert into tbl_user(name,age) values(“zhangsan”,“25”);
- select last_insert_id();
我们的MyBatis底层就是实现的这个函数
- 在UserDao接口中创建一个保存用户的方法
public interface UserDao(){
//保存用户的方法,并且返回数据库自增的id
Integer saveUserReturnId(User user);
}
- 在映射文件中编写SQL【不同点】
<!--id写到接口中方法名 parameterType输入参数类型-->
<!--useGeneratedKeys:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中-->
<insert id="saveUserReturnId" keyProperty="id" useGeneratedKeys="true" parameterType="com.yixuexi.entity.User">
insert into user(name,age) values(#{name},#{age})
</insert>
差别:useGeneratedKeys:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中
3.注册Mapper 【如果已经注册了,那就不需要在进行注册了】
4.编写测试类
注意:
- 返回的值并不是自增的id属性
- MyBatis会把数据库返回的id值自动封装到User实体类对象中
- 想要得到返回的Id属性,只需要通过调用 user.getId()即可
- 主键必须为自增长列,auto_increment
这样就能用得到数据库自动增长的id主键了
下一篇更新:查询【通过id查询,like查询【详解】,查询总用户数】