MyBatis学习之获取主键策略

来源:互联网 发布:windows运行lua脚本 编辑:程序博客网 时间:2024/06/05 02:54

数据库主键一般使用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());
原创粉丝点击