我在Mybatis中完成了批量插入,并且工作正常。但是我不确定如何为bean类中的每一行存储生成的主键。这是我的代码,
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.xxxx.sample.test.dao.TestDAO">
<insert id="insertEmployeeList" parameterType="java.util.List">
INSERT ALL
<foreach collection="list" item="element" index="index">
INTO EMPLOYEE (name) values (#{element.name})
</foreach>
SELECT * FROM dual
</insert>
</mapper>
Emp.java
public class Emp {
public Emp(int id, String name) {
this.id = id;
this.name = name;
}
private int id;
private String name;
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;
}
}
Employee.java
public class Employee {
private List<Emp> list = new ArrayList<Emp>();
public List<Emp> getList() {
return list;
}
public void setList(List<Emp> list) {
this.list = list;
}
}
在上面的示例中,Employee是要保存在数据库中的对象,其中包含Emp。
列表答案 0 :(得分:0)
尝试将useGeneratedKeys="true" keyProperty="id" keyColumn="id"
与插入块一起使用。
即
<insert id="insertEmployeeList" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
INSERT ALL
<foreach collection="list" item="element" index="index">
INTO EMPLOYEE (name) values (#{element.name})
</foreach>
</insert>
为什么在插入内部使用select
?只是想知道。
答案 1 :(得分:0)
但我不确定如何为每一行存储生成的主键 在bean类中。
如果你想用你的pojo映射生成的主键,那么在insert xml中的foreach将无法正常工作。您必须使用useGeneratedKeys =&#34; true&#34;编写简单的插入内容。并为每个要保留的记录调用它。
我已经给出了详细的答案here