首页 > 其他 > 详细

Mybatis支持的主键生成方案

时间:2020-07-29 23:39:50      阅读:91      评论:0      收藏:0      [点我收藏+]

摘要:不管使用什么框架,只要需要往数据库写入数据,主键生成问题都是头等大事。那么,mybatis是如何解决这个问题的呢

 技术分享图片

 

 

一、数据库自动生成主键

  在众多的关系型数据库管理产品当中,有许多产品其自身支持自动生成主键,如MySQL、SQL Server。如果我们想把主键生成的主动权交给数据库管理,Mybatis也提供了很好的支持。

就是无须作任何特别配置。 

<insert id="insert" parameterType="com.sensible.model.User">
    insert into sys_user (NAME, PASSWORD, salt, email, mobile, STATUS,
      dept_id, create_by, create_time, last_update_by, last_update_time, del_flag )
    values
    (
    #{name},
    #{password},
    #{salt},
    #{email},
    #{mobile},
    #{status},
    #{deptId},
    #{createBy},
    #{createTime},
    #{lastUpdateBy},
    #{lastUpdateTime},
    #{delFlag}
    )
</insert>

主键回填  

  大多数在实际项目开发中,仅上面这么处理是不够的。实际开发中,表与表之间是相互关联的。A表的主键可能会是与B表相关联的字段,所以在我们写入B表时就需要知道A表的主键

那么,如何在插入A表数据时,返回A表的主键呢?可以作如下配置:

<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.sensible.model.User">
useGeneratedKeys会告诉MyBatis使用JDBC的getGeneratedKeys方法来取出由数据库内部生成的主键,keyProperty指定
能够唯一识别对象的属性,
MyBatis会使用getGeneratedKeys的返回值
insert语句的selectKey子元素设置它的值。

二、自定义主键
  对于不支持自动生成主键列的数据库,Mybatis还支持自定义生成主键,框架提供了主键生成器接口KeyGenerator,并为我们呈现了三种常用的实现,它们分别是
SelectKeyGenerator、Jdbc3KeyGenerator和NoKeyGenerator实现类。

Oracle序列模拟自增
每次插入新的数据,主键都从序列中取得。
<insert id="insert" databaseId="oracle">
    <selectKey keyProperty="" resultType="" order="BEFORE">
        select SQ_AAZ163.nextVal from dual
    </selectKey>
    insert into sys_user (id, NAME, PASSWORD, salt, email, mobile, STATUS, dept_id, create_by, create_time, last_update_by, last_update_time, del_flag )
    values
    (
    #{id},
    #{name},
    #{password},
    #{salt},
    #{email},
    #{mobile},
    #{status},
    #{deptId},
    #{createBy},
    #{createTime},
    #{lastUpdateBy},
    #{lastUpdateTime},
    #{delFlag}
    )
    </insert>            

MySQL的uuid作为主键
  MySQL不仅提供了自动增长主键列,还提供了uuid()生成uuid可以作为数据库表的主键。
<insert id="insert" databaseId="oracle">
    <selectKey keyProperty="id" resultType="java.lang.String" order="BEFORE">
        select replace(uuid(),‘-‘,‘‘)  FROM dual
    </selectKey>
        insert into sys_user (id, NAME, PASSWORD, salt, email, mobile, STATUS,
    dept_id, create_by, create_time, last_update_by, last_update_time, del_flag )
    values
    (
    #{id},
    #{name},
    #{password},
    #{salt},
    #{email},
    #{mobile},
    #{status},
    #{deptId},
    #{createBy},
    #{createTime},
    #{lastUpdateBy},
    #{lastUpdateTime},
    #{delFlag}
    )
    </insert>

 

 
 

Mybatis支持的主键生成方案

原文:https://www.cnblogs.com/jordan0953/p/13278178.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!