码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis主键返回

时间:2016-06-18 15:36:09      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

在项目开发中,有时需要获取主键值。

比如在表的关联关系中,将数据插入主表之后需要再插入子表,我们需要把主表的主键作为外键插入子表中。

这样的话就需要获取主键值了。

所以涉及主键返回的问题。

1.自增主键的返回

MYSQL自增主键,执行insert提交之前自动生成一个自增主键。

通过mysql函数获取到刚刚插入的记录的自增主键。

LAST_INSERT_ID(),在insert之后调用此函数。

<insert id="insertUser" parameterType="com.winner.User">
        <!--
            将插入数据的主键返回,插入到user对象中。
            SELECT LAST_INSERT_ID():得到刚刚insert进去记录的主键值,只适用于自增主键。
            keyProperty:将查询到的主键值设置到parameterType指定的对象的哪个属性上。
            order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序。
            resultType:指定SELECT LAST_INSERT_ID()的结果类型
        -->
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO user(username,birthday,sex,address) VALUES (#{userName},#{birthday},#{sex},#{address})
</insert>
User user = new User();
user.setUserName("王小二");
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("江苏南京");
sqlSession.insert(User.class.getName().concat(".") + "insertUser", user);

可以看到,这里生成的user对象并没有设置id的值,默认是0,mapper文件中的selectKey 的设置会使得user对象的id的值是数据库中对应的记录的主键id的值。

当然是插入操作完成之后才有这个值。

技术分享

2.非自增主键返回

使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置成35位。

执行思路:

先通过uuid()查询到主键,将主键输入到sql语句中。

执行uuid()语句顺序相对于insert语句之前执行。

<insert id="insertUser" parameterType="com.winner.User">

        <!--
            使用mysql的uuid()函数生成主键,将主键设置到user对象的id属性中。
            其次在执行insert语句时,从user对象中取出id属性的值。
            注意,这样的话insert语句中就需要包括id字段和id属性。
        -->
        <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
            SELECT uuid()
        </selectKey>
        INSERT INTO user(id,username,birthday,sex,address) VALUES (#{id},#{userName},#{birthday},#{sex},#{address})
</insert>

注意,这种情况下,表的id字段类型必须是varchar类型,不能自增,长度必须大于35.

User user = new User();
user.setUserName("王小二");
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("江苏南京");
sqlSession.insert(User.class.getName().concat(".") + "insertUser", user);

可以看到,这里生成的user对象并没有设置id的值,默认是null,mapper文件中的selectKey 的设置会使得user对象的id的值是数据库中对应的记录的主键id的值。

但是在插入操作之前这个值就有了。

技术分享

 

mybatis主键返回

标签:

原文地址:http://www.cnblogs.com/winner-0715/p/5596223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!