Commit af5520db46ef6b8000d66708ac17088389a5b17d
1 parent
63e31606
【缺陷修复】全局:完善对 SQLServer 2015 的兼容性
Showing
3 changed files
with
26 additions
and
8 deletions
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
| ... | ... | @@ -6,8 +6,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | 6 | import cn.iocoder.yudao.framework.common.pojo.SortablePageParam; |
| 7 | 7 | import cn.iocoder.yudao.framework.common.pojo.SortingField; |
| 8 | 8 | import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants; |
| 9 | +import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils; | |
| 9 | 10 | import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; |
| 10 | -import com.baomidou.mybatisplus.annotation.DbType; | |
| 11 | 11 | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| 12 | 12 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 13 | 13 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| ... | ... | @@ -22,7 +22,6 @@ import org.apache.ibatis.annotations.Param; |
| 22 | 22 | |
| 23 | 23 | import java.util.Collection; |
| 24 | 24 | import java.util.List; |
| 25 | -import java.util.Objects; | |
| 26 | 25 | |
| 27 | 26 | /** |
| 28 | 27 | * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力 |
| ... | ... | @@ -151,7 +150,7 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> { |
| 151 | 150 | */ |
| 152 | 151 | default Boolean insertBatch(Collection<T> entities) { |
| 153 | 152 | // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 |
| 154 | - if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { | |
| 153 | + if (JdbcUtils.isSQLServer(SqlConstants.DB_TYPE)) { | |
| 155 | 154 | entities.forEach(this::insert); |
| 156 | 155 | return CollUtil.isNotEmpty(entities); |
| 157 | 156 | } |
| ... | ... | @@ -166,7 +165,7 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> { |
| 166 | 165 | */ |
| 167 | 166 | default Boolean insertBatch(Collection<T> entities, int size) { |
| 168 | 167 | // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 |
| 169 | - if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { | |
| 168 | + if (JdbcUtils.isSQLServer(SqlConstants.DB_TYPE)) { | |
| 170 | 169 | entities.forEach(this::insert); |
| 171 | 170 | return CollUtil.isNotEmpty(entities); |
| 172 | 171 | } | ... | ... |
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/JdbcUtils.java
| 1 | 1 | package cn.iocoder.yudao.framework.mybatis.core.util; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | |
| 3 | 4 | import cn.iocoder.yudao.framework.common.util.spring.SpringUtils; |
| 4 | 5 | import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum; |
| 5 | 6 | import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; |
| ... | ... | @@ -58,4 +59,25 @@ public class JdbcUtils { |
| 58 | 59 | } |
| 59 | 60 | } |
| 60 | 61 | |
| 62 | + /** | |
| 63 | + * 判断 JDBC 连接是否为 SQLServer 数据库 | |
| 64 | + * | |
| 65 | + * @param url JDBC 连接 | |
| 66 | + * @return 是否为 SQLServer 数据库 | |
| 67 | + */ | |
| 68 | + public static boolean isSQLServer(String url) { | |
| 69 | + DbType dbType = getDbType(url); | |
| 70 | + return isSQLServer(dbType); | |
| 71 | + } | |
| 72 | + | |
| 73 | + /** | |
| 74 | + * 判断 JDBC 连接是否为 SQLServer 数据库 | |
| 75 | + * | |
| 76 | + * @param url JDBC 连接 | |
| 77 | + * @return 是否为 SQLServer 数据库 | |
| 78 | + */ | |
| 79 | + public static boolean isSQLServer(DbType dbType) { | |
| 80 | + return ObjectUtils.equalsAny(dbType, DbType.SQL_SERVER, DbType.SQL_SERVER2005); | |
| 81 | + } | |
| 82 | + | |
| 61 | 83 | } | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImpl.java
| ... | ... | @@ -5,7 +5,6 @@ import cn.hutool.core.lang.Assert; |
| 5 | 5 | import cn.hutool.core.util.StrUtil; |
| 6 | 6 | import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils; |
| 7 | 7 | import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO; |
| 8 | -import com.baomidou.mybatisplus.annotation.DbType; | |
| 9 | 8 | import com.baomidou.mybatisplus.generator.config.DataSourceConfig; |
| 10 | 9 | import com.baomidou.mybatisplus.generator.config.GlobalConfig; |
| 11 | 10 | import com.baomidou.mybatisplus.generator.config.StrategyConfig; |
| ... | ... | @@ -18,7 +17,6 @@ import org.springframework.stereotype.Service; |
| 18 | 17 | |
| 19 | 18 | import java.util.Comparator; |
| 20 | 19 | import java.util.List; |
| 21 | -import java.util.Objects; | |
| 22 | 20 | import java.util.stream.Collectors; |
| 23 | 21 | |
| 24 | 22 | /** |
| ... | ... | @@ -49,12 +47,11 @@ public class DatabaseTableServiceImpl implements DatabaseTableService { |
| 49 | 47 | // 获得数据源配置 |
| 50 | 48 | DataSourceConfigDO config = dataSourceConfigService.getDataSourceConfig(dataSourceConfigId); |
| 51 | 49 | Assert.notNull(config, "数据源({}) 不存在!", dataSourceConfigId); |
| 52 | - DbType dbType = JdbcUtils.getDbType(config.getUrl()); | |
| 53 | 50 | |
| 54 | 51 | // 使用 MyBatis Plus Generator 解析表结构 |
| 55 | 52 | DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(config.getUrl(), config.getUsername(), |
| 56 | 53 | config.getPassword()); |
| 57 | - if (Objects.equals(dbType, DbType.SQL_SERVER)) { // 特殊:SQLServer jdbc 非标准,参见 https://github.com/baomidou/mybatis-plus/issues/5419 | |
| 54 | + if (JdbcUtils.isSQLServer(config.getUrl())) { // 特殊:SQLServer jdbc 非标准,参见 https://github.com/baomidou/mybatis-plus/issues/5419 | |
| 58 | 55 | dataSourceConfigBuilder.databaseQueryClass(SQLQuery.class); |
| 59 | 56 | } |
| 60 | 57 | StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder().enableSkipView(); // 忽略视图,业务上一般用不到 | ... | ... |