Mybatis實(shí)現(xiàn)插入數(shù)據(jù)后返回主鍵過(guò)程解析
添加記錄后獲取主鍵ID,這是一個(gè)很常見(jiàn)的需求,特別是在一次前端調(diào)用中需要插入多個(gè)表的場(chǎng)景。
除了添加單條記錄時(shí)獲取主鍵值,有時(shí)候可能需要獲取批量添加記錄時(shí)各記錄的主鍵值,MyBatis從3.3.1版本開(kāi)始支持批量添加記錄并返回各記錄主鍵字段值。
一、獲取新添加記錄主鍵字段值
注意: 在MyBatis中添加操作返回的是記錄數(shù)并非記錄主鍵id。
如果需要獲取新添加記錄的主鍵值,需要在執(zhí)行添加操作之后,直接讀取Java對(duì)象的主鍵屬性。
Integer rows = sqlSession.getMapper(UserMapper.class).insertUser(user);System.out.println('rows = ' + rows); // 添加操作返回記錄數(shù)System.out.println('id = ' + user.getId()); // 執(zhí)行添加操作之后通過(guò)Java對(duì)象獲取主鍵屬性值
二、在映射器中配置獲取記錄主鍵值
1.xml映射器
在定義xml映射器時(shí)設(shè)置屬性u(píng)seGeneratedKeys值為true,并分別指定屬性keyProperty和keyColumn為對(duì)應(yīng)的數(shù)據(jù)庫(kù)記錄主鍵字段與Java對(duì)象的主鍵屬性。
1.1 插入單條記錄
<mapper namespace='com.dafeng.dao.mapper'><!-- 插入數(shù)據(jù):返回記錄主鍵id值 --><insert 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 插入多條記錄
<!-- 批量添加數(shù)據(jù),并返回主鍵字段 --><insert useGeneratedKeys='true' keyProperty='id'> INSERT INTO user(name,age,create_time,update_time) VALUES <foreach collection='list' separator=',' item='u'> (#{u.name},#{u.age},now(),now()) </foreach></insert>
2.接口映射器
在接口映射器中通過(guò)注解@Options分別設(shè)置參數(shù)useGeneratedKeys,keyProperty,keyColumn值
2.1 插入單條記錄
// 返回主鍵字段id值@Options(useGeneratedKeys = true, keyProperty = 'id', keyColumn = 'id')@Insert('insert into user(name,age,create_time,update_time) values(#{name},#{age},now(),now())')Integer insertUser(User user);
2.2 插入多條記錄
如果希望執(zhí)行批量添加并返回各記錄主鍵字段值,只能在xml映射器中實(shí)現(xiàn),在接口映射器中無(wú)法做到。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. MySql導(dǎo)出后再導(dǎo)入數(shù)據(jù)時(shí)出錯(cuò)問(wèn)題2. mysql時(shí)間相減如何獲取秒值3. Access中批量替換數(shù)據(jù)庫(kù)內(nèi)容的兩種方法4. MySQL實(shí)現(xiàn)數(shù)據(jù)批量更新功能詳解5. SQL Server 2008新功能─傳遞表值參數(shù)6. MYSQL(電話(huà)號(hào)碼,身份證)數(shù)據(jù)脫敏的實(shí)現(xiàn)7. 快速刪除ORACLE重復(fù)記錄8. 教你在A(yíng)IX上安裝IBM DB2 9版本的分區(qū)環(huán)境9. oracle產(chǎn)品服務(wù)和技術(shù)級(jí)別介紹10. MySQL decimal unsigned更新負(fù)數(shù)轉(zhuǎn)化為0
