1. 程式人生 > >mybatis insert 獲取主鍵

mybatis insert 獲取主鍵

根據業務需求,我們常常需要在 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