1. 程式人生 > 實用技巧 >mybatis返回主鍵ID(自增和非自增)的兩種方式

mybatis返回主鍵ID(自增和非自增)的兩種方式

一.mapper對映檔案

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.mapper.TableNameMapper">
    <!-- 插入資料並返回自增ID
        有自增ID功能資料庫可以採用useGeneratedKeys="true"開啟判斷是否是自增ID
         keyProperty
="id" 指定插入資料後自增ID返回時賦值給實體類的那個屬性(這裡是id屬性) --> <insert id="insertData" parameterType="java.util.HashMap" useGeneratedKeys="true" keyProperty="id"> insert into tableName values(null,#{name}) </insert> <!-- 非自增主鍵 像Oracle資料庫採用序列來作為自增主鍵,通過 selectKey子來獲取主鍵值 MySQL同樣適用(只是order屬性處為after, 因為mysql自增完ID後才返回ID值)
--> <insert id="insertDataAgain"> <!-- selectKey中resultType屬性指定期望主鍵的返回的資料型別, keyProperty屬性指定實體類物件接收該主鍵的欄位名 order屬性指定執行查詢主鍵值SQL語句是在插入語句執行之前還是之後(可取值:after和before) --> <!-- oracle --> <selectKey resultType=
"integer" keyProperty="id" order="BEFORE"> SELECT LAST_INSERT_ID() </selectKey> <!-- <selectKey resultType="integer" keyProperty="id" order="AFTER"> SELECT id from tableName order by id desc limit 1 </selectKey> --> insert into tableName values(null,#{name}) </insert> </mapper>

注: ORACLE返回主鍵最好是在插入SQL執行之前執行,也就是order屬性值設定為before

二.mapper介面

public interface TableNameMapper {
    //插入資料
    public Integer insertData(Map<String, Object> map);
    //插入資料
    public Integer insertDataAgain(Map<String, Object> map);
}

三.如何取到ID

當資料新增成功之後,你列印介面中傳入的map,會發現裡面多了一個id屬性,且值和資料庫自增的id是一模一樣的,這就是ID返回的實現