Commit b0b806762980cfc407f13d5f1858112d3ffcd487

Authored by YunaiV
1 parent b7554e93

【修复】代码生成:处理 SQLServer 数据库获取不到数据表结构注释

yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImpl.java
@@ -3,18 +3,22 @@ package cn.iocoder.yudao.module.infra.service.db; @@ -3,18 +3,22 @@ package cn.iocoder.yudao.module.infra.service.db;
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.lang.Assert; 4 import cn.hutool.core.lang.Assert;
5 import cn.hutool.core.util.StrUtil; 5 import cn.hutool.core.util.StrUtil;
  6 +import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils;
6 import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO; 7 import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO;
  8 +import com.baomidou.mybatisplus.annotation.DbType;
7 import com.baomidou.mybatisplus.generator.config.DataSourceConfig; 9 import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
8 import com.baomidou.mybatisplus.generator.config.GlobalConfig; 10 import com.baomidou.mybatisplus.generator.config.GlobalConfig;
9 import com.baomidou.mybatisplus.generator.config.StrategyConfig; 11 import com.baomidou.mybatisplus.generator.config.StrategyConfig;
10 import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder; 12 import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
11 import com.baomidou.mybatisplus.generator.config.po.TableInfo; 13 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
12 import com.baomidou.mybatisplus.generator.config.rules.DateType; 14 import com.baomidou.mybatisplus.generator.config.rules.DateType;
  15 +import com.baomidou.mybatisplus.generator.query.SQLQuery;
  16 +import jakarta.annotation.Resource;
13 import org.springframework.stereotype.Service; 17 import org.springframework.stereotype.Service;
14 18
15 -import jakarta.annotation.Resource;  
16 import java.util.Comparator; 19 import java.util.Comparator;
17 import java.util.List; 20 import java.util.List;
  21 +import java.util.Objects;
18 import java.util.stream.Collectors; 22 import java.util.stream.Collectors;
19 23
20 /** 24 /**
@@ -45,10 +49,14 @@ public class DatabaseTableServiceImpl implements DatabaseTableService { @@ -45,10 +49,14 @@ public class DatabaseTableServiceImpl implements DatabaseTableService {
45 // 获得数据源配置 49 // 获得数据源配置
46 DataSourceConfigDO config = dataSourceConfigService.getDataSourceConfig(dataSourceConfigId); 50 DataSourceConfigDO config = dataSourceConfigService.getDataSourceConfig(dataSourceConfigId);
47 Assert.notNull(config, "数据源({}) 不存在!", dataSourceConfigId); 51 Assert.notNull(config, "数据源({}) 不存在!", dataSourceConfigId);
  52 + DbType dbType = JdbcUtils.getDbType(config.getUrl());
48 53
49 // 使用 MyBatis Plus Generator 解析表结构 54 // 使用 MyBatis Plus Generator 解析表结构
50 - DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(config.getUrl(), config.getUsername(),  
51 - config.getPassword()).build(); 55 + DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(config.getUrl(), config.getUsername(),
  56 + config.getPassword());
  57 + if (Objects.equals(dbType, DbType.SQL_SERVER)) { // 特殊:SQLServer jdbc 非标准,参见 https://github.com/baomidou/mybatis-plus/issues/5419
  58 + dataSourceConfigBuilder.databaseQueryClass(SQLQuery.class);
  59 + }
52 StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder().enableSkipView(); // 忽略视图,业务上一般用不到 60 StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder().enableSkipView(); // 忽略视图,业务上一般用不到
53 if (StrUtil.isNotEmpty(name)) { 61 if (StrUtil.isNotEmpty(name)) {
54 strategyConfig.addInclude(name); 62 strategyConfig.addInclude(name);
@@ -61,7 +69,7 @@ public class DatabaseTableServiceImpl implements DatabaseTableService { @@ -61,7 +69,7 @@ public class DatabaseTableServiceImpl implements DatabaseTableService {
61 } 69 }
62 70
63 GlobalConfig globalConfig = new GlobalConfig.Builder().dateType(DateType.TIME_PACK).build(); // 只使用 LocalDateTime 类型,不使用 LocalDate 71 GlobalConfig globalConfig = new GlobalConfig.Builder().dateType(DateType.TIME_PACK).build(); // 只使用 LocalDateTime 类型,不使用 LocalDate
64 - ConfigBuilder builder = new ConfigBuilder(null, dataSourceConfig, strategyConfig.build(), 72 + ConfigBuilder builder = new ConfigBuilder(null, dataSourceConfigBuilder.build(), strategyConfig.build(),
65 null, globalConfig, null); 73 null, globalConfig, null);
66 // 按照名字排序 74 // 按照名字排序
67 List<TableInfo> tables = builder.getTableInfoList(); 75 List<TableInfo> tables = builder.getTableInfoList();