MyBatis批量插入数据并获取主键示例

需积分: 38 11 下载量 36 浏览量 更新于2024-09-10 收藏 2KB TXT 举报
本文主要介绍了如何在MyBatis框架中实现批量插入数据并返回主键。关键在于更新MyBatis版本、避免使用@param注解以及正确配置Mapper XML文件。 在进行MyBatis批量插入操作时,我们需要确保MyBatis的版本至少是3.3.1,因为这个版本开始支持返回主键的批量插入功能。首先,你需要更新你的MyBatis依赖至3.3.1或更高版本。这可以通过修改你的项目构建文件(如Maven的pom.xml或Gradle的build.gradle)中的MyBatis依赖来完成。 在DAO接口中,批量插入的方法不应该使用Java的@RequestParam或@Param注解来接收参数,而是直接定义一个List类型的参数,例如`List<People> peopleList`。这是因为MyBatis在处理批量插入时,会根据方法参数的类型来决定如何执行SQL语句。 接下来,我们需要在对应的Mapper XML文件中配置SQL语句。这里我们创建一个`people`表,包含自增主键`id`、年龄`age`和姓名`name`。在Mapper XML文件中,使用`<foreach>`标签遍历传入的`peopleList`,并构造多个INSERT INTO语句。同时,需要设置`useGeneratedKeys="true"`和`keyProperty="id"`,这样MyBatis会在插入后自动获取新生成的主键值,并将其赋值给列表中每个对象的`id`属性。 下面是一个示例的Mapper XML配置: ```xml <mapper namespace="com.example.mapper.PeopleMapper"> <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> INSERT INTO people (age, name) <foreach item="item" index="index" collection="list" separator=";"> VALUES (${item.age}, #{item.name}) </foreach> </insert> </mapper> ``` 在Controller层,创建一个`People`对象列表,填充数据,然后调用上述DAO接口的批量插入方法。如下所示: ```java @Controller public class MyController { @Autowired private PeopleMapper peopleMapper; @RequestMapping(value = "/tes3") public void test3() { List<People> peopleList = new ArrayList<>(); People people1 = new People(); people1.setAge(11); people1.setName("人员1"); People people2 = new People(); people2.setAge(12); people2.setName("人员2"); People people3 = new People(); people3.setAge(13); people3.setName("人员3"); // 添加更多对象到列表... peopleMapper.batchInsert(peopleList); // 插入后,peopleList中的每个对象的id字段已经被填充为主键值 // 可以进一步处理这些主键值,例如保存到日志或关联其他表 } } ``` 通过这种方式,MyBatis不仅实现了批量插入,还能够返回每个新插入记录的主键值。这样,你可以方便地追踪每个插入的数据行,特别是在需要与关联表进行操作时。请确保在实际应用中,对数据库操作进行事务管理,以确保数据的一致性。