Mybatis中返回主鍵值方式
mybatis返回主鍵值方式
1.自增長類型主鍵
Mapper接口中的抽象方法
int insertEmployee(Employee employee);
SQL語句
<!-- int insertEmployee(Employee employee); --> <!-- useGeneratedKeys屬性字面意思就是“使用生成的主鍵” --> <!-- keyProperty屬性可以指定主鍵在實體類對象中對應(yīng)的屬性名,Mybatis會將拿到的主鍵值存入這個屬性 --> <insert id="insertEmployee" useGeneratedKeys="true" keyProperty="empId"> insert into t_emp(emp_name,emp_salary) values(#{empName},#{empSalary}) </insert>
junit測試
@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è)置到實體類對象中,而不是以Mapper接口方法返回值的形式返回。
2.非自增長類型主鍵
而對于不支持自增型主鍵的數(shù)據(jù)庫(例如 Oracle)或者字符串類型主鍵,則可以使用 selectKey 子元素:selectKey 元素將會首先運行,id 會被設(shè)置,然后插入語句會被調(diào)用!
使用 selectKey 幫助插入UUID作為字符串類型主鍵示例:
<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>
在上例中,我們定義了一個 insertUser 的插入語句來將 User 對象插入到 user 表中。我們使用 selectKey 來查詢 UUID 并設(shè)置到 id 字段中。
通過 keyProperty 屬性來指定查詢到的 UUID 賦值給對象中的 id 屬性,而 resultType 屬性指定了 UUID 的類型為 java.lang.String。
需要注意的是,我們將 selectKey 放在了插入語句的前面,這是因為 MySQL 在 insert 語句中只支持一個 select 子句,而 selectKey 中查詢 UUID 的語句就是一個 select 子句,因此我們需要將其放在前面。
最后,在將 User 對象插入到 user 表中時,我們直接使用對象中的 id 屬性來插入主鍵值。
使用這種方式,我們可以方便地插入 UUID 作為字符串類型主鍵。當(dāng)然,還有其他插入方式可以使用,如使用Java代碼生成UUID并在類中顯式設(shè)置值等。需要根據(jù)具體應(yīng)用場景和需求選擇合適的插入方式。
mybatis返回主鍵一直為1
1.返回的插入成功的行數(shù),這沒有錯
而自增id則是直接映射到對象里,直接輸出 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對應(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中對象里
需要注意點的點如下:
- 1.dao中不要出現(xiàn)@param注解,集合變量名請使用list
- 2.collection對應(yīng)的值請使用list
- 3.數(shù)據(jù)庫版本要求3.3以上版本
說明:除了特別注意的這兩點之外,其他的屬于基本操作
這樣配置之后,每次批量操作之后的主鍵id就會自動保存到對應(yīng)的對象里面了
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
手把手帶你分析SpringBoot自動裝配完成了Ribbon哪些核心操作
這篇文章主要介紹了詳解Spring Boot自動裝配Ribbon哪些核心操作的哪些操作,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08Spring Boot配置特定屬性spring.profiles的方法
這篇文章主要介紹了Spring Boot配置特定屬性spring.profiles的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11Java實現(xiàn)在PPT中創(chuàng)建SmartArt圖形的示例代碼
SmartArt其實就是一個文字的可視化工具,用戶可在PowerPoint,Word,Excel中使用該特性創(chuàng)建各種圖形圖表。本文就將為您介紹如何通過Java應(yīng)用程序在PPT中創(chuàng)建SmartArt圖形,需要的可以參考一下2023-04-04