mybatis返回主鍵ID(自增和非自增)的兩種方式
阿新 • • 發佈:2020-08-18
一.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返回的實現