Mybatis中返回主鍵值方式
mybatis返回主鍵值方式
1.自增長(zhǎng)類型主鍵
Mapper接口中的抽象方法
int insertEmployee(Employee employee);
SQL語(yǔ)句
<!-- 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ù)庫(kù)(例如 Oracle)或者字符串類型主鍵,則可以使用 selectKey 子元素:selectKey 元素將會(huì)首先運(yùn)行,id 會(huì)被設(shè)置,然后插入語(yǔ)句會(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 的插入語(yǔ)句來將 User 對(duì)象插入到 user 表中。我們使用 selectKey 來查詢 UUID 并設(shè)置到 id 字段中。
通過 keyProperty 屬性來指定查詢到的 UUID 賦值給對(duì)象中的 id 屬性,而 resultType 屬性指定了 UUID 的類型為 java.lang.String。
需要注意的是,我們將 selectKey 放在了插入語(yǔ)句的前面,這是因?yàn)?MySQL 在 insert 語(yǔ)句中只支持一個(gè) select 子句,而 selectKey 中查詢 UUID 的語(yǔ)句就是一個(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ù)庫(kù)版本要求3.3以上版本
說明:除了特別注意的這兩點(diǎn)之外,其他的屬于基本操作
這樣配置之后,每次批量操作之后的主鍵id就會(huì)自動(dòng)保存到對(duì)應(yīng)的對(duì)象里面了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法
這篇文章主要介紹了Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Spring的Ioc模擬實(shí)現(xiàn)詳細(xì)介紹
這篇文章主要介紹了Spring的Ioc模擬實(shí)現(xiàn)詳細(xì)介紹,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
MyEclipse+Tomcat+MAVEN+SVN項(xiàng)目完整環(huán)境搭建(圖文教程)
這篇文章主要介紹了MyEclipse+Tomcat+MAVEN+SVN項(xiàng)目完整環(huán)境搭建(圖文教程),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-12-12
Java使用ProcessBuilder?API優(yōu)化流程
Java?的?Process?API?為開發(fā)者提供了執(zhí)行操作系統(tǒng)命令的強(qiáng)大功能,這篇文章將詳細(xì)介紹如何使用?ProcessBuilder?API?來方便的操作系統(tǒng)命令,需要的可以收藏一下2023-06-06
Java實(shí)現(xiàn)ArrayList排序的方法詳解
Java中常見的ArrayList排序方法主要為三種:JDK8的stream、Comparator#compare()和Comparable#compareTo(),本文將詳解這三者的使用,需要的可以參考一下2022-05-05
Java實(shí)現(xiàn)檢查多個(gè)時(shí)間段是否有重合
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)檢查多個(gè)時(shí)間段是否有重合,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
Java設(shè)置Excel行列自適應(yīng)詳細(xì)操作步驟和代碼示例(告別手動(dòng)調(diào)整的繁瑣)
在excel中,可通過設(shè)置自適應(yīng)行高或列寬自動(dòng)排版,是一種比較常用的快速調(diào)整表格整體布局的方法,這篇文章主要介紹了Java設(shè)置Excel行列自適應(yīng)詳細(xì)操作步驟和代碼示例的相關(guān)資料,需要的朋友可以參考下2026-01-01
MyBatis-Plus中的LambdaQuery用法實(shí)例詳解
LambdaQueryWrapper是MyBatis-Plus的類型安全查詢工具,通過Lambda表達(dá)式簡(jiǎn)化條件構(gòu)建,避免硬編碼字段名,提升代碼可讀性、維護(hù)性及重構(gòu)友好性,適用于單表查詢場(chǎng)景,本文給大家介紹MyBatis-Plus中的LambdaQuery用法,感興趣的朋友一起看看吧2025-07-07

