From 49c18dab63a609539c1f99db1853f3094143b5dd Mon Sep 17 00:00:00 2001
From: AprilWind <2100166581@qq.com>
Date: 星期五, 19 七月 2024 16:44:12 +0800
Subject: [PATCH] update 优化根据表名称查询列信息
---
ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java | 30 +++++++++
ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java | 13 ----
ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml | 83 ---------------------------
3 files changed, 28 insertions(+), 98 deletions(-)
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java
index f38d39c..ed8ed20 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/mapper/GenTableColumnMapper.java
@@ -1,12 +1,8 @@
package org.dromara.generator.mapper;
-import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
-import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.generator.domain.GenTableColumn;
-
-import java.util.List;
/**
* 涓氬姟瀛楁 鏁版嵁灞�
@@ -15,14 +11,5 @@
*/
@InterceptorIgnore(dataPermission = "true", tenantLine = "true")
public interface GenTableColumnMapper extends BaseMapperPlus<GenTableColumn, GenTableColumn> {
- /**
- * 鏍规嵁琛ㄥ悕绉版煡璇㈠垪淇℃伅
- *
- * @param tableName 琛ㄥ悕绉�
- * @param dataName 鏁版嵁婧愬悕绉�
- * @return 鍒椾俊鎭�
- */
- @DS("#dataName")
- List<GenTableColumn> selectDbTableColumnsByName(@Param("tableName") String tableName, String dataName);
}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
index 431092c..3fcd33f 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
@@ -14,6 +14,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.anyline.metadata.Column;
import org.anyline.metadata.Table;
import org.anyline.proxy.ServiceProxy;
import org.apache.velocity.Template;
@@ -239,7 +240,7 @@
int row = baseMapper.insert(table);
if (row > 0) {
// 淇濆瓨鍒椾俊鎭�
- List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName, dataName);
+ List<GenTableColumn> genTableColumns = selectDbTableColumnsByName(tableName, dataName);
List<GenTableColumn> saveColumns = new ArrayList<>();
for (GenTableColumn column : genTableColumns) {
GenUtils.initColumnField(column, table);
@@ -253,6 +254,31 @@
} catch (Exception e) {
throw new ServiceException("瀵煎叆澶辫触锛�" + e.getMessage());
}
+ }
+
+ /**
+ * 鏍规嵁琛ㄥ悕绉版煡璇㈠垪淇℃伅
+ *
+ * @param tableName 琛ㄥ悕绉�
+ * @param dataName 鏁版嵁婧愬悕绉�
+ * @return 鍒椾俊鎭�
+ */
+ @DS("#dataName")
+ private List<GenTableColumn> selectDbTableColumnsByName(String tableName, String dataName) {
+ LinkedHashMap<String, Column> columns = ServiceProxy.service().metadata().table(tableName).getColumns();
+ List<GenTableColumn> tableColumns = new ArrayList<>();
+ columns.forEach((columnName, column) -> {
+ GenTableColumn tableColumn = new GenTableColumn();
+ tableColumn.setIsPk(String.valueOf(column.isPrimaryKey()));
+ tableColumn.setColumnName(column.getName());
+ tableColumn.setColumnComment(column.getComment());
+ tableColumn.setColumnType(column.getTypeName().toLowerCase());
+ tableColumn.setSort(column.getPosition());
+// tableColumn.setIsRequired();
+// tableColumn.setIsIncrement();
+ tableColumns.add(tableColumn);
+ });
+ return tableColumns;
}
/**
@@ -350,7 +376,7 @@
List<GenTableColumn> tableColumns = table.getColumns();
Map<String, GenTableColumn> tableColumnMap = StreamUtils.toIdentityMap(tableColumns, GenTableColumn::getColumnName);
- List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(table.getTableName(), table.getDataName());
+ List<GenTableColumn> dbTableColumns = selectDbTableColumnsByName(table.getTableName(), table.getDataName());
if (CollUtil.isEmpty(dbTableColumns)) {
throw new ServiceException("鍚屾鏁版嵁澶辫触锛屽師琛ㄧ粨鏋勪笉瀛樺湪");
}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
index 123d51a..fc1c610 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
@@ -7,87 +7,4 @@
<resultMap type="org.dromara.generator.domain.GenTableColumn" id="GenTableColumnResult">
</resultMap>
- <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
- <if test="@org.dromara.common.mybatis.helper.DataBaseHelper@isMySql()">
- select column_name,
- (case when (is_nullable = 'no' <![CDATA[ && ]]> column_key != 'PRI') then '1' else '0' end) as is_required,
- (case when column_key = 'PRI' then '1' else '0' end) as is_pk,
- ordinal_position as sort,
- column_comment,
- (case when extra = 'auto_increment' then '1' else '0' end) as is_increment,
- column_type
- from information_schema.columns where table_schema = (select database()) and table_name = (#{tableName})
- order by ordinal_position
- </if>
- <if test="@org.dromara.common.mybatis.helper.DataBaseHelper@isOracle()">
- select lower(temp.column_name) as column_name,
- (case when (temp.nullable = 'N' and temp.constraint_type != 'P') then '1' else '0' end) as is_required,
- (case when temp.constraint_type = 'P' then '1' else '0' end) as is_pk,
- temp.column_id as sort,
- temp.comments as column_comment,
- (case when temp.constraint_type = 'P' then '1' else '0' end) as is_increment,
- lower(temp.data_type) as column_type
- from (
- select col.column_id, col.column_name,col.nullable, col.data_type, colc.comments, uc.constraint_type, row_number()
- over (partition by col.column_name order by uc.constraint_type desc) as row_flg
- from user_tab_columns col
- left join user_col_comments colc on colc.table_name = col.table_name and colc.column_name = col.column_name
- left join user_cons_columns ucc on ucc.table_name = col.table_name and ucc.column_name = col.column_name
- left join user_constraints uc on uc.constraint_name = ucc.constraint_name
- where col.table_name = upper(#{tableName})
- ) temp
- WHERE temp.row_flg = 1
- ORDER BY temp.column_id
- </if>
- <if test="@org.dromara.common.mybatis.helper.DataBaseHelper@isPostgerSql()">
- SELECT column_name, is_required, is_pk, sort, column_comment, is_increment, column_type
- FROM (
- SELECT c.relname AS table_name,
- a.attname AS column_name,
- d.description AS column_comment,
- CASE WHEN a.attnotnull AND con.conname IS NULL THEN 1 ELSE 0
- END AS is_required,
- CASE WHEN con.conname IS NOT NULL THEN 1 ELSE 0
- END AS is_pk,
- a.attnum AS sort,
- CASE WHEN "position"(pg_get_expr(ad.adbin, ad.adrelid),
- ((c.relname::text || '_'::text) || a.attname::text) || '_seq'::text) > 0 THEN 1 ELSE 0
- END AS is_increment,
- btrim(
- CASE WHEN t.typelem <![CDATA[ <> ]]> 0::oid AND t.typlen = '-1'::integer THEN 'ARRAY'::text ELSE
- CASE WHEN t.typtype = 'd'::"char" THEN format_type(t.typbasetype, NULL::integer)
- ELSE format_type(a.atttypid, NULL::integer) END
- END, '"'::text
- ) AS column_type
- FROM pg_attribute a
- JOIN (pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid) ON a.attrelid = c.oid
- LEFT JOIN pg_description d ON d.objoid = c.oid AND a.attnum = d.objsubid
- LEFT JOIN pg_constraint con ON con.conrelid = c.oid AND (a.attnum = ANY (con.conkey))
- LEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum
- LEFT JOIN pg_type t ON a.atttypid = t.oid
- WHERE (c.relkind = ANY (ARRAY ['r'::"char", 'p'::"char"]))
- AND a.attnum > 0
- AND n.nspname = 'public'::name
- ORDER BY c.relname, a.attnum
- ) temp
- WHERE table_name = (#{tableName})
- AND column_type <![CDATA[ <> ]]> '-'
- </if>
- <if test="@org.dromara.common.mybatis.helper.DataBaseHelper@isSqlServer()">
- SELECT
- cast(A.NAME as nvarchar) as column_name,
- cast(B.NAME as nvarchar) + (case when B.NAME = 'numeric' then '(' + cast(A.prec as nvarchar) + ',' + cast(A.scale as nvarchar) + ')' else '' end) as column_type,
- cast(G.[VALUE] as nvarchar) as column_comment,
- (SELECT 1 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE Z WHERE TABLE_NAME = D.NAME and A.NAME = Z.column_name ) as is_pk,
- colorder as sort
- FROM SYSCOLUMNS A
- LEFT JOIN SYSTYPES B ON A.XTYPE = B.XUSERTYPE
- INNER JOIN SYSOBJECTS D ON A.ID = D.ID AND D.XTYPE='U' AND D.NAME != 'DTPROPERTIES'
- LEFT JOIN SYS.EXTENDED_PROPERTIES G ON A.ID = G.MAJOR_ID AND A.COLID = G.MINOR_ID
- LEFT JOIN SYS.EXTENDED_PROPERTIES F ON D.ID = F.MAJOR_ID AND F.MINOR_ID = 0
- WHERE D.NAME = #{tableName}
- ORDER BY A.COLORDER
- </if>
- </select>
-
</mapper>
--
Gitblit v1.9.3