Mybatis框架下新增数据返回主键id
业务场景
在日常开发的时候,经常会插入一条数据到数据库,并且我们需要知道插入的数据信息,这里仅做一个实现的简单记录。
一、通过实体类实现
需要新增的信息放入对应的实体类中,然后将这个类作为参数,在新增成功之后会将新增的id返回到此实体类中,代码如下
实体类:
public class Product {
private int id;
private String name;
private String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
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="xxx.xxx.xxx.dao.ProductDao">
<insert id="addProduct" useGeneratedKeys="true" keyProperty="id">
insert into product(`name`, `description`) values(#{name}, #{description})
</insert>
</mapper>
ProductDao:
package net.handsdata.careerDevelopment.dao;
import net.handsdata.careerDevelopment.entity.Product;
import java.util.Map;
public interface ProductDao {
int addProduct(Map<String, String> map);
int addProduct(Product product);
}
controller:
@RestController
public class TestController {
@Resource
private ProductDao productDao;
@RequestMapping(value = "/product1", method = RequestMethod.PUT)
public void addProduct1() {
String name = "测试产品";
String description = "这是一个测试产品";
Product product = new Product();
product.setName(name);
product.setDescription(description);
int count = productDao.addProduct(product);
System.out.println("成功新增:" + count + "条数据");
System.out.println("新增的数据id为:" + product.getId());
}
@RequestMapping(value = "/product2", method = RequestMethod.PUT)
public void addProduct2() {
Map<String, String> params = new HashMap<>(16);
params.put("id", "");
params.put("name", "另一个测试产品");
params.put("description", "这是另一个测试产品");
int count = productDao.addProduct(params);
System.out.println("成功新增:" + count + "条数据");
System.out.println("新增的数据id为:" + params.get("id"));
}
}
调用一下product1接口,测试结果:
为了使测试结果更具有辨识性,在数据库中加了三条数据;
通过上图可以看到成功返回了新增的id。
二、通过Map容器实现
代码已在上面贴出,调用product2接口测试,测试结果如下:
成功返回新增的id。
三、总结
返回id的时候,需要注意以下几点:
1、需要给mapper添加属性useGeneratedKeys="true" keyProperty="id";
2、返回的id对应字段必须为自增主键;
3、使用Map容器传参时,需要加入一个id为空的键值对;