mybatis insert 獲取主鍵
阿新 • • 發佈:2018-12-17
根據業務需求,我們常常需要在 insert 插入一條資料後,對剛剛插入的資料進行某種操作;這時就需要獲取新新增的資料的主鍵,如果主鍵是自增的話,重新查詢,比較麻煩;mybatis 提供了一種配置,可以在 insert 執行後獲取到新新增資料的主鍵
配置如下
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.demo.bean.Book"> insert into book(name, author) values(#{name}, #{author}) </insert>
只需在 insert 標籤中新增 useGeneratedKeys="true" keyProperty="id" ,其中 keyProperty 對應的 id 為自增的主鍵欄位
測試如下
實體類
package com.demo.bean; public class Book { private Integer id; private String name; private String author; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } }
mapper層
package com.demo.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.demo.bean.Book;
@Mapper
public interface BookMapper {
int insert(Book book);
}
mapper.xml 檔案
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.demo.mapper.BookMapper"> <resultMap id="BaseResultMap" type="com.demo.bean.Book"> <id column="id" property="id" jdbcType="VARCHAR" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="author" property="author" jdbcType="VARCHAR" /> </resultMap> <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.demo.bean.Book"> insert into book(name, author) values(#{name}, #{author}) </insert> </mapper>
注意: keyProperty 對應的 id ,是 resultMap 中配置的主鍵 id (二者欄位必須對應上)
測試類
package com.demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.demo.bean.Book;
import com.demo.mapper.BookMapper;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootJspApplicationTests {
@Autowired
private BookMapper bookMapper;
@Test
public void contextLoads() {
Book book = new Book();
book.setName("西遊記");
book.setAuthor("吳承恩");
bookMapper.insert(book);
System.out.println("返回的主鍵: "+book.getId());
}
}
執行測試類,控制檯列印如下
資料庫如下
成功獲取到 主鍵 id = 4