您的位置:首页 > 其它

MyBatis学习之获取主键策略

2017-09-19 00:41 549 查看
数据库主键一般使用int自增长或者uuid,如果我们需要在插入数据之后获取主键的值那该怎么做呢?

自增长

<!--添加用户
注意参数的名称与对象属性一致
-->
<insert id="insertUser" parameterType="com.xanthuim.pojo.User">
<!--
selectKey标签实现主键返回
keyColumn主键对应的哪一列
keyProperty主键对应的POJO的哪一个属性
order是在执行insert语句之前查询id的值,还是在之后执行。需要注意的是mysql是在插入成功后生成id的,因此需要把order的值设置为AFTER
-->
<selectKey keyProperty="id" resultType="Integer" order="AFTER">
/*查询执行完插入操作返回最新的id*/
SELECT last_insert_id()
</selectKey>
INSERT INTO user(username, sex, birthday, address)
VALUES(#{username}, #{sex}, #{birthday}, #{address})
</insert>


UUID

<insert id="insertUserByUUID" parameterType="com.xanthuim.pojo.Info">
<!--
SELECT uuid() 是mysql获取uuid的函数。

需要注意的是这里的order值是BEFORE,因为在插入数据的时候需要把UUID设置给主键
-->
<selectKey keyProperty="id" resultType="String" order="BEFORE">
SELECT uuid()
</selectKey>
/*id的值从SELECT uuid()得来*/
INSERT INTO info(id, iname) VALUES (#{id}, #{iname})
</insert>


两种的区别就在于获取的方式不一样,自增长使用的是last_insert_id()函数,而UUID使用的uuid;另外自增长是在插入成功后才有增长的值,而由于UUID本身是不可能重复的因此可以在插入之前就可以获取到。

插入数据,获取当前插入数据的主键

User user = new User();
user.setUsername("xanthuim");
user.setSex("未知");
user.setAddress("无可奉告");
user.setBirthday(new Date());
sqlSession.insert("insertUser", user);

//在插入成功后就可以获取到主键值了
System.out.println(user.getId());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: