新增达梦数据库支持
This commit is contained in:
11
pom.xml
11
pom.xml
@@ -74,6 +74,17 @@
|
||||
<artifactId>jtds</artifactId>
|
||||
<version>1.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.oracle</groupId>
|
||||
<artifactId>ojdbc14</artifactId>
|
||||
<version>12</version>
|
||||
</dependency>
|
||||
<!--达梦数据库驱动-->
|
||||
<dependency>
|
||||
<groupId>com.dameng</groupId>
|
||||
<artifactId>DmJdbcDriver18</artifactId>
|
||||
<version>8.1.1.193</version>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.oracle</groupId>-->
|
||||
<!-- <artifactId>ojdbc6</artifactId>-->
|
||||
|
||||
@@ -51,6 +51,15 @@
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.oracle</groupId>
|
||||
<artifactId>ojdbc14</artifactId>
|
||||
</dependency>
|
||||
<!--达梦数据库驱动-->
|
||||
<dependency>
|
||||
<groupId>com.dameng</groupId>
|
||||
<artifactId>DmJdbcDriver18</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.sourceforge.jtds</groupId>
|
||||
<artifactId>jtds</artifactId>
|
||||
|
||||
@@ -17,6 +17,7 @@ public class TableDdlVo {
|
||||
private String mysql;
|
||||
private String sqlserver;
|
||||
private String oracle;
|
||||
private String dm;
|
||||
private String postgresql;
|
||||
private String hive;
|
||||
|
||||
@@ -31,6 +32,9 @@ public class TableDdlVo {
|
||||
if (Objects.equals(current, DatabaseProductEnum.ORACLE.name().toLowerCase())) {
|
||||
return oracle;
|
||||
}
|
||||
if (Objects.equals(current, DatabaseProductEnum.DM.name().toLowerCase())) {
|
||||
return dm;
|
||||
}
|
||||
if (Objects.equals(current, DatabaseProductEnum.POSTGRESQL.name().toLowerCase())) {
|
||||
return postgresql;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ public class DatasourceUtil {
|
||||
put(DatabaseProductEnum.MYSQL.getDriverClassName(), new MysqlAnalysis());
|
||||
put(DatabaseProductEnum.HIVE.getDriverClassName(), new HiveAnalysis());
|
||||
put(DatabaseProductEnum.ORACLE.getDriverClassName(), new OracleAnalysis());
|
||||
put(DatabaseProductEnum.DM.getDriverClassName(), new DmAnalysis());
|
||||
put(DatabaseProductEnum.POSTGRESQL.getDriverClassName(), new PostgresqlAnalysis());
|
||||
put(DatabaseProductEnum.SQLSERVER.getDriverClassName(), new SqlserverAnalysis());
|
||||
}};
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.zyplayer.doc.db.framework.configuration.analysis;
|
||||
|
||||
import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean;
|
||||
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
|
||||
/**
|
||||
* 达梦链接url解析
|
||||
*
|
||||
* @author diantu
|
||||
* @since 2023-02-01
|
||||
*/
|
||||
public class DmAnalysis implements AnalysisApi{
|
||||
|
||||
@Override
|
||||
public Resource[] process(String dbUrl, DatabaseFactoryBean databaseFactoryBean) throws Exception {
|
||||
// jdbc:dm://127.0.0.1:5236?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
|
||||
String[] urlParamArr = dbUrl.split("\\?");
|
||||
String[] urlDbNameArr = urlParamArr[0].split("://");
|
||||
urlDbNameArr = urlDbNameArr[0].split(":");
|
||||
databaseFactoryBean.setDbName(urlDbNameArr[urlDbNameArr.length - 1]);
|
||||
databaseFactoryBean.setDatabaseProduct(DatabaseProductEnum.DM);
|
||||
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
|
||||
return resolver.getResources("classpath:com/zyplayer/doc/db/framework/db/mapper/dm/*.xml");
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,6 @@ public class OracleAnalysis implements AnalysisApi {
|
||||
@Override
|
||||
public Resource[] process(String dbUrl, DatabaseFactoryBean databaseFactoryBean) throws Exception {
|
||||
// jdbc:oracle:thin:@127.0.0.1:1521:user_info
|
||||
// 代码是写好的,但还没有oracle的库让我测试过~
|
||||
String[] urlParamArr = dbUrl.split("\\?")[0].split("@");
|
||||
String[] urlDbNameArr = urlParamArr[0].split("/");
|
||||
if (urlDbNameArr.length <= 1) {
|
||||
|
||||
@@ -10,6 +10,7 @@ public enum DatabaseProductEnum {
|
||||
MYSQL("com.mysql.jdbc.Driver"),
|
||||
SQLSERVER("net.sourceforge.jtds.jdbc.Driver"),
|
||||
ORACLE("oracle.jdbc.driver.OracleDriver"),
|
||||
DM("dm.jdbc.driver.DmDriver"),
|
||||
POSTGRESQL("org.postgresql.Driver"),
|
||||
HIVE("org.apache.hive.jdbc.HiveDriver"),
|
||||
;
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.zyplayer.doc.db.framework.db.mapper.base.BaseMapper">
|
||||
|
||||
<resultMap id="TableColumnDescDtoMap" type="com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto" >
|
||||
<result column="TABLE_NAME" property="tableName" jdbcType="VARCHAR" />
|
||||
<result column="COLUMN_NAME" property="name" jdbcType="VARCHAR" />
|
||||
<result column="DATA_TYPE" property="type" jdbcType="VARCHAR" />
|
||||
<result column="NULLABLE" property="nullable" jdbcType="VARCHAR" />
|
||||
<result column="COMMENTS" property="description" jdbcType="VARCHAR" />
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="QueryTableColumnDescDtoMap" type="com.zyplayer.doc.db.framework.db.dto.QueryTableColumnDescDto" >
|
||||
<result column="TABLE_NAME" property="tableName" jdbcType="VARCHAR" />
|
||||
<result column="COLUMN_NAME" property="columnName" jdbcType="VARCHAR" />
|
||||
<result column="COMMENTS" property="description" jdbcType="VARCHAR" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 获取用户列表 -->
|
||||
<select id="getDatabaseList" resultType="com.zyplayer.doc.db.framework.db.dto.DatabaseInfoDto">
|
||||
select USERNAME dbName from all_users
|
||||
</select>
|
||||
|
||||
<select id="getTableStatus" resultType="com.zyplayer.doc.db.controller.vo.TableStatusVo">
|
||||
select dt.TABLE_NAME as name,
|
||||
dt.NUM_ROWS as "rows",
|
||||
dt.AVG_ROW_LEN as avgRowLength,
|
||||
do.CREATED as createTime,
|
||||
do.LAST_DDL_TIME as updateTime,
|
||||
dtc.COMMENTS as "comment"
|
||||
from dba_tables dt
|
||||
left join dba_objects do on do.owner = dt.owner and do.object_name = dt.table_name
|
||||
left join dba_tab_comments dtc on dtc.owner = dt.owner and dtc.table_name = dt.table_name
|
||||
where dt.owner = #{dbName} and dt.table_name = #{tableName}
|
||||
</select>
|
||||
|
||||
<!-- 获取表列表 -->
|
||||
<select id="getTableList" resultType="com.zyplayer.doc.db.framework.db.dto.TableInfoDto">
|
||||
select t.OWNER as dbName,t.TABLE_NAME as tableName,c.COMMENTS as tableComment from all_tables t left join user_tab_comments c on t.TABLE_NAME = c.TABLE_NAME
|
||||
<where>
|
||||
<if test="dbName != null">t.owner = #{dbName}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<!-- 获取表字段集合 -->
|
||||
<select id="getTableColumnList" resultMap="TableColumnDescDtoMap">
|
||||
select t.TABLE_NAME,t.COLUMN_NAME,t.DATA_TYPE,case t.NULLABLE when 'Y' then '1' when 'N' then '0' end NULLABLE, c.COMMENTS,
|
||||
s.POSITION as primaryKey from user_tab_columns t
|
||||
left join user_col_comments c on t.COLUMN_NAME = c.COLUMN_NAME and t.TABLE_NAME = c.TABLE_NAME
|
||||
left join user_cons_columns s on t.COLUMN_NAME = s.COLUMN_NAME and t.TABLE_NAME = s.TABLE_NAME and s.POSITION = 1
|
||||
<where>
|
||||
t.table_name in (select table_name from all_tables where owner = #{dbName} )
|
||||
<if test="tableName != null"> and t.TABLE_NAME = #{tableName}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<!-- 条件查询表字段 -->
|
||||
<select id="getTableAndColumnBySearch" resultMap="QueryTableColumnDescDtoMap">
|
||||
select t.TABLE_NAME,t.COLUMN_NAME,t.DATA_TYPE,case t.NULLABLE when 'Y' then 1 when 'N' then 0 end NULLABLE, c.COMMENTS
|
||||
from user_tab_columns t
|
||||
left join user_col_comments c on t.COLUMN_NAME = c.COLUMN_NAME and t.TABLE_NAME = c.TABLE_NAME
|
||||
where t.TABLE_NAME = #{tableName} AND (t.COLUMN_NAME like #{searchText} or c.COMMENTS like #{searchText})
|
||||
</select>
|
||||
|
||||
<!-- 条件查询表 -->
|
||||
<select id="getTableDescList" resultType="com.zyplayer.doc.db.framework.db.dto.TableDescDto">
|
||||
select t.OWNER,t.TABLE_NAME as tableName,c.COMMENTS as description
|
||||
from all_tables t
|
||||
left join user_tab_comments c on t.TABLE_NAME = c.TABLE_NAME
|
||||
<where>
|
||||
<if test="dbName != null">and t.owner = #{dbName}</if>
|
||||
<if test="tableName != null">and t.TABLE_NAME = #{tableName}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="getTableDdl" resultType="java.util.Map">
|
||||
SELECT DBMS_METADATA.GET_DDL('TABLE','${tableName}','${dbName}') createTable FROM DUAL
|
||||
</select>
|
||||
|
||||
<!-- 增加表注释 -->
|
||||
<insert id="updateTableDesc">
|
||||
comment on table ${dbName}.${tableName} is #{new Desc}
|
||||
</insert>
|
||||
|
||||
<!-- 增加表字段注释 -->
|
||||
<insert id="updateTableColumnDesc">
|
||||
comment on column ${dbName}.${tableName}.${columnName} is #{new Desc}
|
||||
</insert>
|
||||
|
||||
<delete id="deleteTableLineData">
|
||||
delete from ${dbName}.${tableName} where
|
||||
<foreach collection="lineParam.entrySet()" index="key" item="value">
|
||||
${key} = #{value}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.zyplayer.doc.db.framework.db.mapper.dm;
|
||||
|
||||
/**
|
||||
* 达梦数据库的mapper持有对象
|
||||
*
|
||||
* @author diantu
|
||||
* @since 2023年2月1日
|
||||
*/
|
||||
public interface DmMapper {
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.zyplayer.doc.db.service.database;
|
||||
|
||||
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 达梦数据查询服务实现类
|
||||
*
|
||||
* @author diantu
|
||||
* @since 2023-02-01
|
||||
*/
|
||||
@Service
|
||||
public class DmServiceImpl extends DbBaseService {
|
||||
|
||||
@Override
|
||||
public DatabaseProductEnum getDatabaseProduct() {
|
||||
return DatabaseProductEnum.DM;
|
||||
}
|
||||
|
||||
/**
|
||||
* 达梦数据库中没有也不需要use语句,指定数据库名的情况下直接返回空即可
|
||||
* @author diantu
|
||||
* @since 2023-02-01
|
||||
*/
|
||||
@Override
|
||||
public String getUseDbSql(String dbName) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -61,6 +61,15 @@
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.oracle</groupId>
|
||||
<artifactId>ojdbc14</artifactId>
|
||||
</dependency>
|
||||
<!--达梦数据库驱动-->
|
||||
<dependency>
|
||||
<groupId>com.dameng</groupId>
|
||||
<artifactId>DmJdbcDriver18</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
<el-option label="oracle.jdbc.driver.OracleDriver" value="oracle.jdbc.driver.OracleDriver"></el-option>
|
||||
<el-option label="org.postgresql.Driver" value="org.postgresql.Driver"></el-option>
|
||||
<el-option label="org.apache.hive.jdbc.HiveDriver" value="org.apache.hive.jdbc.HiveDriver"></el-option>
|
||||
<el-option label="dm.jdbc.driver.DmDriver" value="dm.jdbc.driver.DmDriver"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据源URL:">
|
||||
@@ -278,7 +279,9 @@
|
||||
this.urlPlaceholder = "例:jdbc:postgresql://127.0.0.1:5432/user_info";
|
||||
} else if (this.newDatasource.driverClassName == 'org.apache.hive.jdbc.HiveDriver') {
|
||||
this.urlPlaceholder = "例:jdbc:hive2://127.0.0.1:21050/user_info;auth=noSasl";
|
||||
}
|
||||
} else if (this.newDatasource.driverClassName == 'dm.jdbc.driver.DmDriver'){
|
||||
this.urlPlaceholder = "例:jdbc:dm://127.0.0.1:5236?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8";
|
||||
}
|
||||
},
|
||||
handleCurrentChange(to) {
|
||||
this.currentPage = to;
|
||||
|
||||
Reference in New Issue
Block a user