Mybatis實現插入資料後返回主鍵過程解析
新增記錄後獲取主鍵ID,這是一個很常見的需求,特別是在一次前端呼叫中需要插入多個表的場景。
除了新增單條記錄時獲取主鍵值,有時候可能需要獲取批量新增記錄時各記錄的主鍵值,MyBatis從3.3.1版本開始支援批量新增記錄並返回各記錄主鍵欄位值。
一、獲取新新增記錄主鍵欄位值
注意: 在MyBatis中新增操作返回的是記錄數並非記錄主鍵id。
如果需要獲取新新增記錄的主鍵值,需要在執行新增操作之後,直接讀取Java物件的主鍵屬性。
Integer rows = sqlSession.getMapper(UserMapper.class).insertUser(user);
System.out.println("rows = " + rows); // 新增操作返回記錄數System.out.println("id = " + user.getId()); // 執行新增操作之後通過Java物件獲取主鍵屬性值
二、在對映器中配置獲取記錄主鍵值
1.xml對映器
在定義xml對映器時設定屬性useGeneratedKeys值為true,並分別指定屬性keyProperty和keyColumn為對應的資料庫記錄主鍵欄位與Java物件的主鍵屬性。
1.1 插入單條記錄
<mapper namespace="com.dafeng.dao.mapper"> <!-- 插入資料:返回記錄主鍵id值 --> <insert id="insertUser" parameterType="com.dafeng.model.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id" > insert into user(name,age,create_time,update_time) values(#{name},#{age},now(),now()) </insert> </mapper>
1.2 插入多條記錄
<!-- 批量新增資料,並返回主鍵欄位 --> <insert id="insertBatchUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(name,update_time) VALUES <foreach collection="list" separator="," item="u"> (#{u.name},#{u.age},now()) </foreach> </insert>
2.介面對映器
在介面對映器中通過註解@Options分別設定引數useGeneratedKeys,keyProperty,keyColumn值
2.1 插入單條記錄
// 返回主鍵欄位id值
@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
@Insert("insert into user(name,now())")
Integer insertUser(User user);
2.2 插入多條記錄
如果希望執行批量新增並返回各記錄主鍵欄位值,只能在xml對映器中實現,在介面對映器中無法做到。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。