畢業(yè)設計 >>
文檔教程 JavaSE 教程_進階 IntelliJ IDEA教程 Tomcat 教程 >>
API文檔 JDK1.8 CXF Apache Server >>
學習工具 EditPlus IntelliJ IDEA Eclipse >>
來源: 動力節(jié)點 時間:2023-04-23 08:43:00
添加單一記錄時返回主鍵ID
添加一條記錄時返回主鍵值,在xml映射器和接口映射器中都可以實現(xiàn)。
在映射器中配置獲取記錄主鍵值
xml映射器
在定義xml映射器時設置屬性useGeneratedKeys值為true,并分別指定屬性keyProperty和keyColumn為對應的數(shù)據(jù)庫記錄主鍵字段與Java對象的主鍵屬性。
insert into test(name,descr,url,create_time,update_time)
values(#{name},#{descr},#{url},now(),now())
接口映射器
在接口映射器中通過注解@Options分別設置參數(shù)useGeneratedKeys,keyProperty,keyColumn值
// 返回主鍵字段id值
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())")
Integer insertOneTest(Test test);
獲取新添加記錄主鍵字段值
需要注意的是,在MyBatis中添加操作返回的是記錄數(shù)并非記錄主鍵id。因此,如果需要獲取新添加記錄的主鍵值,需要在執(zhí)行添加操作之后,直接讀取Java對象的主鍵屬性。
Integer rows = sqlSession.getMapper(TestMapper.class).insertOneTest(test);
System.out.println("rows = " + rows); // 添加操作返回記錄數(shù)
System.out.println("id = " + test.getId()); // 執(zhí)行添加操作之后通過Java對象獲取主鍵屬性值
添加批量記錄時返回主鍵ID
如果希望執(zhí)行批量添加并返回各記錄主鍵字段值,只能在xml映射器中實現(xiàn),在接口映射器中無法做到。
INSERT INTO test(name,descr,url,create_time,update_time) VALUES
(#{t.name},#{t.descr},#{t.url},now(),now())
可以看到,執(zhí)行批量添加并返回記錄主鍵值的xml映射器配置,跟添加單條記錄時是一致的。不同的地方僅僅是使用了foreach元素構建批量添加語句。
獲取主鍵ID實現(xiàn)原理
需要注意的是,不論在xml映射器還是在接口映射器中,添加記錄的主鍵值并非添加操作的返回值。實際上,在MyBatis中執(zhí)行添加操作時只會返回當前添加的記錄數(shù)。
package org.apache.ibatis.executor.statement;
public class PreparedStatementHandler extends BaseStatementHandler {
@Override
public int update(Statement statement) throws SQLException {
PreparedStatement ps = (PreparedStatement) statement;
// 真正執(zhí)行添加操作的SQL語句
ps.execute();
int rows = ps.getUpdateCount();
Object parameterObject = boundSql.getParameterObject();
KeyGenerator keyGenerator = mappedStatement.getKeyGenerator();
// 在執(zhí)行添加操作完畢之后,再處理記錄主鍵字段值
keyGenerator.processAfter(executor, mappedStatement, ps, parameterObject);
// 添加記錄時返回的是記錄數(shù),而并非記錄的主鍵字段值
return rows;
}
}
順便看一下MyBatis添加操作的時序圖:
跟蹤時序圖執(zhí)行步驟可以看到,MyBatis最終是通過MySQL驅動程序獲取到了新添加的記錄主鍵值。
以上就是動力節(jié)點小編介紹的"讓我們深入的了解下mybatis返回主鍵id",希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您務。
聲明:本站稿件版均屬動力節(jié)點所有,未經(jīng)允許禁止轉載
零基礎學Java,你有沒有下面這些困惑呢?對Java了解不深,學完不知道能做什么?想轉行,又害怕辭職培訓就業(yè)沒保障?專業(yè)不對口,怕學完不好就業(yè)?覺得學費貴,經(jīng)濟壓力大?沒編程經(jīng)驗,擔心不適合這個職業(yè)?想自學,又怕學的不牢靠找不到工作,浪費時間?詳情>>
2023-07-28 10:05:44動力節(jié)點成立14年,目前設有10個分校,同時在校的學生人數(shù)眾多,怎樣實現(xiàn)統(tǒng)一管理?口口相傳的Java黃埔軍校,嚴格的教學管理服務制度怎樣被“復制”到各個校區(qū)呢?學員高薪就業(yè),高就業(yè)率又是怎樣在各校區(qū)得以延續(xù)?詳情>>
2023-07-28 09:55:432023年,隨著互聯(lián)網(wǎng)產(chǎn)業(yè)的蓬勃發(fā)展,程序員作為一個自帶“高薪多金”標簽的熱門群體,被越來越多的人所關注。詳情>>
2023-07-20 16:14:40上海Java技能培訓學校哪家好?快來圍觀!
1上海Java培訓學校哪家好?如何判斷
2上海好的Java培訓機構是哪家?
3上海Java培訓課程怎么樣?作為初學者都要學會哪些東西?
4上海Java學習難嗎?需要我們怎么入手呢
5上海Java學習方法是什么?以動力節(jié)點為例來分析
6上海哪里能學Java語言?眾多機構,你選對了嗎?
7上海學Java去哪?有沒有更高效的方式
8上海Java工資怎么樣?看完你就知道了
9在上海找Java工作難嗎?建議有需要的人收藏!
10上海Java好就業(yè)嗎?你想知道的都在這
11上海中級Java開發(fā)工資高嗎?現(xiàn)在是什么就業(yè)狀態(tài)
運營主體北京動力節(jié)點教育科技有限公司,屬具備計算機技術培訓資質的教育培訓機構