Commit 2c67bd3a09a8086910c31d35de90fcc02aca934d

Authored by YunaiV
1 parent b13dc100

【功能优化】信创数据库:移除 SqlConstants 类,完善 limit 的适配

yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java
... ... @@ -2,7 +2,6 @@ package cn.iocoder.yudao.framework.mybatis.config;
2 2  
3 3 import cn.hutool.core.util.StrUtil;
4 4 import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
5   -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;
6 5 import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils;
7 6 import com.baomidou.mybatisplus.annotation.DbType;
8 7 import com.baomidou.mybatisplus.annotation.IdType;
... ... @@ -42,9 +41,6 @@ public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor
42 41 // TODO 芋艿:暂时没有找到特别合适的地方,先放在这里
43 42 setJobStoreDriverIfPresent(environment, dbType);
44 43  
45   - // 初始化 SQL 静态变量
46   - SqlConstants.init(dbType);
47   -
48 44 // 如果非 NONE,则不进行处理
49 45 IdType idType = getIdType(environment);
50 46 if (idType != IdType.NONE) {
... ...
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/DbTypeEnum.java
... ... @@ -39,6 +39,10 @@ public enum DbTypeEnum {
39 39 * SQL Server
40 40 */
41 41 SQL_SERVER(DbType.SQL_SERVER, "Microsoft SQL Server", "CHARINDEX(',' + #{value} + ',', ',' + #{column} + ',') <> 0"),
  42 + /**
  43 + * SQL Server 2005
  44 + */
  45 + SQL_SERVER2005(DbType.SQL_SERVER2005, "Microsoft SQL Server 2005", "CHARINDEX(',' + #{value} + ',', ',' + #{column} + ',') <> 0"),
42 46  
43 47 /**
44 48 * 达梦
... ...
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/SqlConstants.java deleted
1   -package cn.iocoder.yudao.framework.mybatis.core.enums;
2   -
3   -import com.baomidou.mybatisplus.annotation.DbType;
4   -
5   -/**
6   - * SQL相关常量类
7   - *
8   - * @author 芋道源码
9   - */
10   -public class SqlConstants {
11   -
12   - /**
13   - * 数据库的类型
14   - */
15   - public static DbType DB_TYPE;
16   -
17   - public static void init(DbType dbType) {
18   - DB_TYPE = dbType;
19   - }
20   -
21   -}
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
... ... @@ -5,9 +5,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
5 5 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   -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;
9 8 import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils;
10 9 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;
... ... @@ -134,11 +134,6 @@ public interface BaseMapperX&lt;T&gt; extends MPJBaseMapper&lt;T&gt; {
134 134 return selectList(new LambdaQueryWrapper<T>().in(field, values));
135 135 }
136 136  
137   - @Deprecated
138   - default List<T> selectList(SFunction<T, ?> leField, SFunction<T, ?> geField, Object value) {
139   - return selectList(new LambdaQueryWrapper<T>().le(leField, value).ge(geField, value));
140   - }
141   -
142 137 default List<T> selectList(SFunction<T, ?> field1, Object value1, SFunction<T, ?> field2, Object value2) {
143 138 return selectList(new LambdaQueryWrapper<T>().eq(field1, value1).eq(field2, value2));
144 139 }
... ... @@ -150,7 +145,8 @@ public interface BaseMapperX&lt;T&gt; extends MPJBaseMapper&lt;T&gt; {
150 145 */
151 146 default Boolean insertBatch(Collection<T> entities) {
152 147 // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理
153   - if (JdbcUtils.isSQLServer(SqlConstants.DB_TYPE)) {
  148 + DbType dbType = JdbcUtils.getDbType();
  149 + if (JdbcUtils.isSQLServer(dbType)) {
154 150 entities.forEach(this::insert);
155 151 return CollUtil.isNotEmpty(entities);
156 152 }
... ... @@ -165,7 +161,8 @@ public interface BaseMapperX&lt;T&gt; extends MPJBaseMapper&lt;T&gt; {
165 161 */
166 162 default Boolean insertBatch(Collection<T> entities, int size) {
167 163 // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理
168   - if (JdbcUtils.isSQLServer(SqlConstants.DB_TYPE)) {
  164 + DbType dbType = JdbcUtils.getDbType();
  165 + if (JdbcUtils.isSQLServer(dbType)) {
169 166 entities.forEach(this::insert);
170 167 return CollUtil.isNotEmpty(entities);
171 168 }
... ... @@ -184,10 +181,6 @@ public interface BaseMapperX&lt;T&gt; extends MPJBaseMapper&lt;T&gt; {
184 181 return Db.updateBatchById(entities, size);
185 182 }
186 183  
187   - default Boolean insertOrUpdateBatch(Collection<T> collection) {
188   - return Db.saveOrUpdateBatch(collection);
189   - }
190   -
191 184 default int delete(String field, String value) {
192 185 return delete(new QueryWrapper<T>().eq(field, value));
193 186 }
... ...
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java
1 1 package cn.iocoder.yudao.framework.mybatis.core.query;
2 2  
3   -import cn.hutool.core.lang.Assert;
4   -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;
  3 +import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils;
  4 +import com.baomidou.mybatisplus.annotation.DbType;
5 5 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
6 6 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
7 7 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
... ... @@ -147,8 +147,8 @@ public class QueryWrapperX&lt;T&gt; extends QueryWrapper&lt;T&gt; {
147 147 * @return this
148 148 */
149 149 public QueryWrapperX<T> limitN(int n) {
150   - Assert.notNull(SqlConstants.DB_TYPE, "获取不到数据库的类型");
151   - switch (SqlConstants.DB_TYPE) {
  150 + DbType dbType = JdbcUtils.getDbType();
  151 + switch (dbType) {
152 152 case ORACLE:
153 153 case ORACLE_12C:
154 154 super.le("ROWNUM", n);
... ... @@ -157,7 +157,7 @@ public class QueryWrapperX&lt;T&gt; extends QueryWrapper&lt;T&gt; {
157 157 case SQL_SERVER2005:
158 158 super.select("TOP " + n + " *"); // 由于 SQL Server 是通过 SELECT TOP 1 实现限制一条,所以只好使用 * 查询剩余字段
159 159 break;
160   - default:
  160 + default: // MySQL、PostgreSQL、DM 达梦都是采用 LIMIT 实现
161 161 super.last("LIMIT " + n);
162 162 }
163 163 return this;
... ...