mybatis 批量插入并返回主键

转载自:https://blog.csdn.net/u014336799/article/details/52023887

对于支持生成自增主键的数据库,需要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>

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



猜你喜欢

转载自blog.csdn.net/torpidcat/article/details/80737429