mybatis之主键返回

一、主键返回之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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值