Commit ffac294fbd67c6a83e469260e47b676f09c8086f
1 parent
290a981c
【优化】全局:兼容 MyBatis Plus 针对 SQL Server 的 saveBatch 不兼容的兼容
Showing
1 changed file
with
13 additions
and
0 deletions
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
| @@ -5,7 +5,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; | @@ -5,7 +5,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.common.pojo.SortablePageParam; | 6 | import cn.iocoder.yudao.framework.common.pojo.SortablePageParam; |
| 7 | import cn.iocoder.yudao.framework.common.pojo.SortingField; | 7 | import cn.iocoder.yudao.framework.common.pojo.SortingField; |
| 8 | +import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; | ||
| 8 | import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; | 9 | import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; |
| 10 | +import com.baomidou.mybatisplus.annotation.DbType; | ||
| 9 | import com.baomidou.mybatisplus.core.conditions.Wrapper; | 11 | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| 10 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 12 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 11 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 13 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| @@ -20,6 +22,7 @@ import org.apache.ibatis.annotations.Param; | @@ -20,6 +22,7 @@ import org.apache.ibatis.annotations.Param; | ||
| 20 | 22 | ||
| 21 | import java.util.Collection; | 23 | import java.util.Collection; |
| 22 | import java.util.List; | 24 | import java.util.List; |
| 25 | +import java.util.Objects; | ||
| 23 | 26 | ||
| 24 | /** | 27 | /** |
| 25 | * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力 | 28 | * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力 |
| @@ -147,6 +150,11 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> { | @@ -147,6 +150,11 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> { | ||
| 147 | * @param entities 实体们 | 150 | * @param entities 实体们 |
| 148 | */ | 151 | */ |
| 149 | default Boolean insertBatch(Collection<T> entities) { | 152 | default Boolean insertBatch(Collection<T> entities) { |
| 153 | + // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 | ||
| 154 | + if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { | ||
| 155 | + entities.forEach(this::insert); | ||
| 156 | + return CollUtil.isNotEmpty(entities); | ||
| 157 | + } | ||
| 150 | return Db.saveBatch(entities); | 158 | return Db.saveBatch(entities); |
| 151 | } | 159 | } |
| 152 | 160 | ||
| @@ -157,6 +165,11 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> { | @@ -157,6 +165,11 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> { | ||
| 157 | * @param size 插入数量 Db.saveBatch 默认为 1000 | 165 | * @param size 插入数量 Db.saveBatch 默认为 1000 |
| 158 | */ | 166 | */ |
| 159 | default Boolean insertBatch(Collection<T> entities, int size) { | 167 | default Boolean insertBatch(Collection<T> entities, int size) { |
| 168 | + // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 | ||
| 169 | + if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { | ||
| 170 | + entities.forEach(this::insert); | ||
| 171 | + return CollUtil.isNotEmpty(entities); | ||
| 172 | + } | ||
| 160 | return Db.saveBatch(entities, size); | 173 | return Db.saveBatch(entities, size); |
| 161 | } | 174 | } |
| 162 | 175 |