mybatis 批量插入并返回主键

转载自: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 userList = new ArrayList();
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 userList);//这里不要使用@param注解

mapper.xml

这里使用collection="list"来遍历集合。
keyProperty="userId"对应User对象中的userId属性。


  insert into user (name,cdate)
  values
  
    (#{item.name,jdbcType=VARCHAR}, #{item.cdate,jdbcType=VARCHAR})
  

---------------------------------------------------------------------------

如果不需要获取返回的主键,则可以使用下面代码

 

UserDao:

int insertUsers(@Param("userList") List userList);//这里使用@param注解,xml中使用注解中的字符串接收集合

mapper.xml

这里使用collection="list"来遍历集合。
keyProperty="userId"对应User对象中的userId属性。


  insert into user (name,cdate)
  values
  
    (#{item.name,jdbcType=VARCHAR}, #{item.cdate,jdbcType=VARCHAR})
  

---------------------------------------------------------------------------

 

 

 

你可能感兴趣的:(mybatis)