转载自:https://blog.csdn.net/u014336799/article/details/52023887
首先要在数据库连接配置中设置允许批量操作(连接数据源参数配置中新增 allowMultiQueries=true)
spring:
profiles: dev
datasource:
name: testDatabase
url: jdbc:mysql://localhost:3306/testTable?allowMultiQueries=true
对于支持生成自增主键的数据库,需要Mapper.xml中insert节点使用:useGenerateKeys和keyProperty。
需要返回主键需要下列几个前提(不需要返回主键则忽略此步):
1、升级Mybatis版本到3.3.1。
2、在Dao中不能使用@param注解。
3、Mapper.xml中使用list变量接受Dao中的集合。
UserService:
List<User> userList = new ArrayList<User>();
User user = new User ();
user.setName("张三");
userList.add(user);
user.setName("李四");
userList.add(user);
user.setName("王二");
userList.add(user);
int result = userDao.insertUsers(userList);
if(result > 0){
for(User user : userList){
System.out.print(user.getUserId());//这里是返回的主键,主键直接返回给了被插入数据集合
}
}
UserDao:
int insertUsers(List<User> userList);//这里不要使用@param注解
mapper.xml
这里使用collection="list"来遍历集合。
keyProperty="userId"对应User对象中的userId属性。
<insert id="insertUsers" parameterType="list" useGeneratedKeys="true" keyProperty="userId">
insert into user (name,cdate)
values
<foreach item="item" collection="list" separator=",">
(#{item.name,jdbcType=VARCHAR}, #{item.cdate,jdbcType=VARCHAR})
</foreach>
</insert>
---------------------------------------------------------------------------
如果不需要获取返回的主键,则可以使用下面代码
UserDao:
int insertUsers(@Param("userList") List<User> userList);//这里使用@param注解,xml中使用注解中的字符串接收集合
mapper.xml
这里使用collection="list"来遍历集合。
keyProperty="userId"对应User对象中的userId属性。
<insert id="insertUsers" parameterType="list" >
insert into user (name,cdate)
values
<foreach item="item" collection="userList" separator=",">
(#{item.name,jdbcType=VARCHAR}, #{item.cdate,jdbcType=VARCHAR})
</foreach>
</insert>
---------------------------------------------------------------------------