Mybatis支持的主鍵生成方案

摘要:無論使用什麼框架,只要須要往數據庫寫入數據,主鍵生成問題都是頭等大事。那麼,mybatis是如何解決這個問題的呢java

 

 

 

1、數據庫自動生成主鍵數據庫

  在衆多的關係型數據庫管理產品當中,有許多產品其自身支持自動生成主鍵,如MySQL、SQL Server。若是咱們想把主鍵生成的主動權交給數據庫管理,Mybatis也提供了很好的支持。mybatis

就是無須做任何特別配置。 oracle

<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表的主鍵ui

那麼,如何在插入A表數據時,返回A表的主鍵呢?能夠做以下配置:spa

<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.sensible.model.User">
useGeneratedKeys會告訴MyBatis使用JDBC的getGeneratedKeys方法來取出由數據庫內部生成的主鍵,keyProperty指定
可以惟一識別對象的屬性,
MyBatis會使用getGeneratedKeys的返回值
insert語句的selectKey子元素設置它的值。

2、自定義主鍵
  對於不支持自動生成主鍵列的數據庫,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>
相關文章
相關標籤/搜索