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ǔ)句來(lái)將 User 對(duì)象插入到 user 表中。我們使用 selectKey 來(lái)查詢 UUID 并設(shè)置到 id 字段中。
通過(guò) keyProperty 屬性來(lái)指定查詢到的 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 屬性來(lái)插入主鍵值。
使用這種方式,我們可以方便地插入 UUID 作為字符串類型主鍵。當(dāng)然,還有其他插入方式可以使用,如使用Java代碼生成UUID并在類中顯式設(shè)置值等。需要根據(jù)具體應(yīng)用場(chǎng)景和需求選擇合適的插入方式。
mybatis返回主鍵一直為1
1.返回的插入成功的行數(shù),這沒(méi)有錯(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以上版本
說(shuō)明:除了特別注意的這兩點(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哪些核心操作的哪些操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08Spring打包jar包時(shí)jsp頁(yè)面無(wú)法訪問(wèn)問(wèn)題解決
這篇文章主要介紹了Spring打包jar包時(shí)jsp頁(yè)面無(wú)法訪問(wèn)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05java swing編程入門(mén)代碼編寫(xiě)(java編程入門(mén))
Swing是一個(gè)為Java設(shè)計(jì)的GUI工具包,是用來(lái)做UI界面的,大家看了下面的介紹就要吧自己做java界面了2013-12-12Spring Boot配置特定屬性spring.profiles的方法
這篇文章主要介紹了Spring Boot配置特定屬性spring.profiles的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11Java實(shí)現(xiàn)在PPT中創(chuàng)建SmartArt圖形的示例代碼
SmartArt其實(shí)就是一個(gè)文字的可視化工具,用戶可在PowerPoint,Word,Excel中使用該特性創(chuàng)建各種圖形圖表。本文就將為您介紹如何通過(guò)Java應(yīng)用程序在PPT中創(chuàng)建SmartArt圖形,需要的可以參考一下2023-04-04Java去掉小數(shù)點(diǎn)后面無(wú)效0的方案與建議
當(dāng)前小數(shù)點(diǎn)后面的位數(shù)過(guò)多的時(shí)候,多余的0沒(méi)有實(shí)際意義,下面這篇文章主要給大家介紹了關(guān)于Java去掉小數(shù)點(diǎn)后面無(wú)效0的方案與建議,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07