mybatis 返回主键

来源:互联网 发布:手机服装绘图软件 编辑:程序博客网 时间:2024/06/05 03:33

mybatis返回主键

mybatis返回主键分为两种情况,第一种数据库支持自增主键,比如mysql、sqlserver;第二种是不支持自增主键,比如oracle


数据库支持自增主键(mysql、sqlserver)

使用insert、update标签中的useGeneratedKeys、keyProperty来获取主键返回值,useGeneratedKeys设置为true,keyProperty设置为主键对应实体类的属性值,如果是联合主键那么属性名用逗号隔开;insert时,返回的是新增记录的主键值、update时返回的时更新记录的主键值

这里拿insert举例,useGeneratedKeys="true" keyProperty="id"

 <insert id="insertSelective" parameterType="testmaven.entity.User" useGeneratedKeys="true" keyProperty="id">  insert into user(name,age) values (#{name,jdbcType=VARCHAR},#{age,jdbcType=INTEGER})  </insert>

同理,如果插入多条记录,只要设置了useGeneratedKeys、keyProperty,同样可以获取主键;

<insert id="insertBatch"  useGeneratedKeys="true" keyProperty="id">      insert into user(name,age) values      <foreach collection="list" separator=","  item="item">         (#{item.name,jdbcType=VARCHAR},#{item.age,jdbcType=INTEGER})       </foreach>  </insert>

mybatis generator设置方法

我们通常使用generator插件来生成mapper,generator支持主键自动生成,就不需要一个个mapper文件设置了,只要在生成的时候配置一下就可以了。

<!-- !!!! Table Configurations !!!! --> <table tableName="ss_order"        domainObjectName="Order"        enableCountByExample="false"        enableDeleteByExample="false"        enableSelectByExample="false"        enableUpdateByExample="false" >    <generatedKey column="id" sqlStatement="MySql" identity="true" ></generatedKey> </table>

生成的mapper.xml带有useGeneratedKey信息

数据库不支持自增主键(oracle)

在数据库不支持自增主键情况下,需要使用selectKey来返回插入的主键值


selectKey属性

<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">            select last_insert_id() as id </selectKey>
属性名 作用 resultType selectKey指定sql返回值类型 order 执行顺序,after,表示后执行;before,表示限制性 keyProperty 主键对应实体类中的属性名字

插入记录后,获取主键(如mysql)

selectKey中的order=after,代表先执行insert into,后执行selectKey。此处利用mysql的last_insert_id函数来获取最后一条记录的id

<insert id="insert" parameterType="com.mycat.test.model.Test">        INSERT INTO test(name) VALUES(#{name,jdbcType=VARCHAR})        <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">            select last_insert_id() as id        </selectKey>    </insert>

插入记录前,获取主键(如oracle)

注意,selectKey中的order=before,代表先执行selectKey,后执行insert into。此处利用sequence先获取id值,设置到sql中,然后返回主键。

<insert id="insert" parameterType="com.mycat.test.model.Test">        INSERT INTO test(id,name) VALUES(#{id,jdbcType=INTEGER},        #{name,jdbcType=VARCHAR})        <selectKey resultType="java.lang.Integer"           order="before" keyProperty="id">            select xx_sequence.nextval from dual        </selectKey>    </insert>
0 0
原创粉丝点击