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<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>

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

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值