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