Mybatis中返回主鍵值方式
mybatis返回主鍵值方式
1.自增長(zhǎng)類型主鍵
Mapper接口中的抽象方法
int insertEmployee(Employee employee);
SQL語句
<!-- int insertEmployee(Employee employee); -->
<!-- useGeneratedKeys屬性字面意思就是“使用生成的主鍵” -->
<!-- keyProperty屬性可以指定主鍵在實(shí)體類對(duì)象中對(duì)應(yīng)的屬性名,Mybatis會(huì)將拿到的主鍵值存入這個(gè)屬性 -->
<insert id="insertEmployee" useGeneratedKeys="true" keyProperty="empId">
insert into t_emp(emp_name,emp_salary)
values(#{empName},#{empSalary})
</insert>junit測(cè)試
@Test
public void testSaveEmp() {
EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
Employee employee = new Employee();
employee.setEmpName("john");
employee.setEmpSalary(666.66);
employeeMapper.insertEmployee(employee);
log.info("employee.getEmpId() = " + employee.getEmpId());
}注意:
Mybatis是將自增主鍵的值設(shè)置到實(shí)體類對(duì)象中,而不是以Mapper接口方法返回值的形式返回。
2.非自增長(zhǎng)類型主鍵
而對(duì)于不支持自增型主鍵的數(shù)據(jù)庫(例如 Oracle)或者字符串類型主鍵,則可以使用 selectKey 子元素:selectKey 元素將會(huì)首先運(yùn)行,id 會(huì)被設(shè)置,然后插入語句會(huì)被調(diào)用!
使用 selectKey 幫助插入U(xiǎn)UID作為字符串類型主鍵示例:
<insert id="insertUser" parameterType="User">
<selectKey keyProperty="id" resultType="java.lang.String"
order="BEFORE">
SELECT UUID() as id
</selectKey>
INSERT INTO user (id, username, password)
VALUES (
#{id},
#{username},
#{password}
)
</insert>在上例中,我們定義了一個(gè) insertUser 的插入語句來將 User 對(duì)象插入到 user 表中。我們使用 selectKey 來查詢 UUID 并設(shè)置到 id 字段中。
通過 keyProperty 屬性來指定查詢到的 UUID 賦值給對(duì)象中的 id 屬性,而 resultType 屬性指定了 UUID 的類型為 java.lang.String。
需要注意的是,我們將 selectKey 放在了插入語句的前面,這是因?yàn)?MySQL 在 insert 語句中只支持一個(gè) select 子句,而 selectKey 中查詢 UUID 的語句就是一個(gè) select 子句,因此我們需要將其放在前面。
最后,在將 User 對(duì)象插入到 user 表中時(shí),我們直接使用對(duì)象中的 id 屬性來插入主鍵值。
使用這種方式,我們可以方便地插入 UUID 作為字符串類型主鍵。當(dāng)然,還有其他插入方式可以使用,如使用Java代碼生成UUID并在類中顯式設(shè)置值等。需要根據(jù)具體應(yīng)用場(chǎng)景和需求選擇合適的插入方式。
mybatis返回主鍵一直為1
1.返回的插入成功的行數(shù),這沒有錯(cuò)
而自增id則是直接映射到對(duì)象里,直接輸出 xxx.getId()即可
舉例:
在xml中:
<insert id="addUser" parameterType="blog.model.User" useGeneratedKeys="true" keyProperty="id"> ......
返回影響行數(shù)
2.java中代碼
int primary = userService.addUser(user); int id = user.getId();
上面的id就是返回的主鍵
3.批量插入
void insertBatch(List<DafSequence> list);
然后是mapper對(duì)應(yīng)的代碼:
<insert id="insertBatch" parameterType="List" useGeneratedKeys="true" keyProperty="id">
INSERT INTO daf_sequence
(id,table_name, cloumn_name)
VALUES
<foreach collection ="list" item="sequence" index="index" separator =",">
(#{sequence.id},#{sequence.tableName}, #{sequence.cloumnName})
</foreach >
</insert>ps:id在list中對(duì)象里
需要注意點(diǎn)的點(diǎn)如下:
- 1.dao中不要出現(xiàn)@param注解,集合變量名請(qǐng)使用list
- 2.collection對(duì)應(yīng)的值請(qǐng)使用list
- 3.數(shù)據(jù)庫版本要求3.3以上版本
說明:除了特別注意的這兩點(diǎn)之外,其他的屬于基本操作
這樣配置之后,每次批量操作之后的主鍵id就會(huì)自動(dòng)保存到對(duì)應(yīng)的對(duì)象里面了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java文件分級(jí)目錄打包下載zip的實(shí)例代碼
這篇文章主要介紹了Java文件分級(jí)目錄打包下載zip的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
手把手帶你分析SpringBoot自動(dòng)裝配完成了Ribbon哪些核心操作
這篇文章主要介紹了詳解Spring Boot自動(dòng)裝配Ribbon哪些核心操作的哪些操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08
Spring打包jar包時(shí)jsp頁面無法訪問問題解決
這篇文章主要介紹了Spring打包jar包時(shí)jsp頁面無法訪問問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Spring Boot配置特定屬性spring.profiles的方法
這篇文章主要介紹了Spring Boot配置特定屬性spring.profiles的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11
Java實(shí)現(xiàn)在PPT中創(chuàng)建SmartArt圖形的示例代碼
SmartArt其實(shí)就是一個(gè)文字的可視化工具,用戶可在PowerPoint,Word,Excel中使用該特性創(chuàng)建各種圖形圖表。本文就將為您介紹如何通過Java應(yīng)用程序在PPT中創(chuàng)建SmartArt圖形,需要的可以參考一下2023-04-04
Java去掉小數(shù)點(diǎn)后面無效0的方案與建議
當(dāng)前小數(shù)點(diǎn)后面的位數(shù)過多的時(shí)候,多余的0沒有實(shí)際意義,下面這篇文章主要給大家介紹了關(guān)于Java去掉小數(shù)點(diǎn)后面無效0的方案與建議,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07

