【MyBatis】——自增主鍵與非自增主鍵返回
阿新 • • 發佈:2019-02-17
mysql自增主鍵,執行insert提交之前自動生成一個自增主鍵。當時一直沒有想為什麼要返回主鍵,也就是返回就返回了吧,總是有用的,確實,返回來有可能會作為下一次查詢的依據,或者下一個插入的外來鍵的憑證,總之,先返回來再說……
實現思想是醬紫的:通過mysql函式獲取到剛插入記錄的自增主鍵:LAST_INSERT_ID(),但是是在insert之後呼叫此函式。
在mybatis中,只有新增使用者會涉及到返回主鍵,這裡會有兩種主鍵,一種是int型在資料庫設定為自增,一種是uuid的形式。
-
<insertid="insertUser"parameterType="cn.itcast.mybatis.po.User"
- <!-- 將插入資料的主鍵返回,返回到user物件中
- SELECT LAST_INSERT_ID():得到剛insert進去記錄的主鍵值,只適用於自增主鍵
- keyProperty:將查詢到主鍵值設定到parameterType指定的物件的那個 屬性
-
order:selectKey的執行順序,是相對與insert語句來說,由於mysql的自增原理執行完insert語句之後才將主鍵生成,所以這裡selectKey的執行順序為after
-
resultType:指定SELECT LAST_INSERT_ID()的結果型別
- -->
- <selectKeykeyProperty="id"order="AFTER"resultType="java.lang.Integer">
- SELECT LAST_INSERT_ID()
- </selectKey>
- insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address});
- </insert>
自增主鍵方式執行過程是首先將記錄插入資料庫,前提是資料庫已經設定了
而另外一種方式uuid的形式是與自增逐漸的執行過程是相反的,它的執行過程是:首先通過uuid()得到主鍵,然後將主鍵設定到user物件的id屬性中,之後在insert執行時,再從user物件中取出id屬性值。
- <insertid="insertUser"parameterType="cn.itcast.mybatis.po.User">
- <!--
- 使用mysql的uuid()生成主鍵
- 執行過程:首先通過uuid()得到主鍵,將主鍵設定到user物件的id屬性中
- 其次,在insert執行時,從user物件中取出id屬性值
- -->
- <selectKeykeyProperty="id"order="AFTER"resultType="java.lang.String">
- SELECT uuid()
- </selectKey>
-
insert into user(id,username,birthday,sex,address)
values(#{id},#{username},#{birthday},#{sex},#{address}) - </insert>
這種方式就是所謂的非自增主鍵返回,需要修改表中id的欄位型別為string
二者除了執行過程相反之外,還有一點不同就是:自增主鍵中的insert sql語句主鍵自動生成,在insert語句中不需要寫id欄位,在非自增主鍵時,insert語句需要寫id欄位。
在mysql中是這樣實現的,那麼在oracle中使用不同的函式和order標識,如下:
- <insertid="insertUser"parameterType="cn.itcast.mybatis.po.User">
- <selectKeykeyProperty="id"order="BEFORE"resultType="java.lang.String">
- SELECT 序列名.nextval()
- </selectKey>
- insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
- </insert>