5

我已经在 Mybatis 中完成了批量插入,并且工作正常。但我不确定如何存储 bean 类中每一行生成的主键。这是我的代码,

映射器.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;
}
}

雇员.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 列表。

4

2 回答 2

1

尝试useGeneratedKeys="true" keyProperty="id" keyColumn="id"与您的插入块一起使用。

IE

<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内部插入?就是想。

于 2013-11-11T21:31:10.383 回答
0

但我不确定如何存储 bean 类中每一行生成的主键。

如果你想用你的 pojo 映射生成的主键,那么插入 xml 中的 foreach 将不起作用。您必须使用 useGeneratedKeys="true" 编写简单的插入,并为要保留的每条记录调用它。

在这里给出了详细的答案

于 2016-02-22T13:54:10.150 回答