1. 程式人生 > >mybatis添加記錄時返回主鍵id

mybatis添加記錄時返回主鍵id

測試數據 image creat ger org 設計 efault 需要 generated

參考:https://www.cnblogs.com/nuccch/p/7687281.html

技術分享圖片

場景

有些時候我們在添加記錄成功後希望能直接獲取到該記錄的主鍵id值,而不需要再執行一次查詢操作。
在使用mybatis作為ORM組件時,可以很方便地達到這個目的。
鑒於mybatis目前已經支持xml配置和註解2種方式,所以分別給予詳細介紹。

數據表設計:

drop table if exists `test`;
create table `test` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘ID‘, // 主鍵字段為自增長類型
    `name` varchar(50) default ‘‘,
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘創建時間‘,
    `update_time` timestamp COMMENT ‘編輯時間‘,
    `descr` varchar(100) default ‘‘,
    `url` varchar(50) default ‘‘,
    PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用xml配置方式

1.xml配置:

<!-- 插入數據:返回記錄的id值 -->
<insert id="insertOneTest" parameterType="org.chench.test.mybatis.model.Test" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
    insert into test(name,descr,url,create_time,update_time) 
    values(#{name},#{descr},#{url},now(),now())
</insert>

2.java代碼:

Test test3 = new Test();
//test3.setId(0L);
test3.setName("test6");
test3.setDescr("測試數據6");
test3.setUrl("http://www.aliyun.com.cn");
int rows = sqlSession.insert("org.chench.test.mybatis.mapper.insertOneTest", test3);
sqlSession.commit();
logger.info("insert rows: {}", rows);
// 執行添加記錄之後讀取POJO的主鍵id屬性
logger.info("insert test id: {}", test3.getId());

3.詳細解釋
首先,為了在添加記錄時能獲取到記錄主鍵id,必須在<insert>的xml配置中添加3個屬性:

<insert useGeneratedKeys="true" keyProperty="id" keyColumn="id"></insert>

useGeneratedKeys:必須設置為true,否則無法獲取到主鍵id。
keyProperty:設置為POJO對象的主鍵id屬性名稱。
keyColumn:設置為數據庫記錄的主鍵id字段名稱。

其次,新添加主鍵id並不是在執行添加操作時直接返回的,而是在執行添加操作之後將新添加記錄的主鍵id字段設置為POJO對象的主鍵id屬性。
通過訪問POJO對象的主鍵id屬性即可返回。

使用註解方式

詳見:http://www.cnblogs.com/nuccch/p/7093843.html 使用mybatis註解實現添加記錄時返回主鍵值

mybatis添加記錄時返回主鍵id