一、主键返回之MySQL自增主键
思路:
MySQL自增主键,是指在insert之前MySQL会自动生成一个自增的主键。
我们可以通过MySQL的函数获取到刚插入的自增主键:
LAST_INSERT_ID()
这个函数是在insert语句之后去调用。
<!-- 添加用户之自增主键返回(selectKey方式) -->
<!-- selectKey:查询主键,在标签内输入需要查询主键的sql -->
<!-- order:指定查询主键的sql和insert语句的执行顺序,相对于insert语句来说 这里order应该指定为after,先执行插入语句,插入之后再得到其主键-->
<!-- LAST_INSERT_ID:该函数是mysql的函数,用来获取自增主键的id,必须和insert语句配合使用-->
<insert id="insertUser" parameterType="com.exercise.entity.user">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user (username,sex,birthday,address) VALUES (#{username},#{sex},#{birthday},#{address})
</insert>
代码测试(可直接通过get方法得到主键id):
user u = new user();
u.setUsername("xiaodong11");
u.setAddress("abc123");
sqlsession.insert("test.insertUser", u);
System.out.println(u.getId());
二、主键返回之mysql函数UUID
注意:使用mysql的函数UUID()生成主键,需要修改表中id字段类型为是String,长度设置为35位。
<!-- 添加用户之UUID主键返回 -->
<!--现在的操作就是先生成一个随机的id主键,然后把他加到数据库中-->
<!--
[uuid]:MySQL的函数,生成的主键是35位的字符串,所以使用它时要修改id的类型为字符类型
注意:
1、此时order采用BEFORE,因为需要先生成出主键,再执行insert语句
2、显式的给ID赋值
-->
<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
<selectKey keyProperty="id" resultType="string" order="BEFORE">
SELECT UUID()
</selectKey>
INSERT INTO USER(id,username,sex,birthday,address) VALUES (#{id},#{username},#{sex},#{birthday},#{address})
</insert>
三、主键返回之oracle序列返回
<!-- 添加用户之sequence返回 -->
<!--
通过Oracle的sequence获取主键方式与MySQL的uuid方式基本一致
-->
<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
SELECT user_seq.nextval() FROM dual
</selectKey>
INSERT INTO USER(id,username,sex,birthday,address) VALUES (#{id},#{username},#{sex},#{birthday},#{address})
</insert>