新增达梦数据库支持

This commit is contained in:
diantu
2023-02-02 14:36:34 +08:00
parent 683585c527
commit 584fa48d0d
12 changed files with 209 additions and 9 deletions

11
pom.xml
View File

@@ -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>-->

View File

@@ -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>

View File

@@ -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;
}

View File

@@ -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());
}};

View File

@@ -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");
}
}

View File

@@ -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) {

View File

@@ -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"),
;

View File

@@ -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>

View File

@@ -0,0 +1,10 @@
package com.zyplayer.doc.db.framework.db.mapper.dm;
/**
* 达梦数据库的mapper持有对象
*
* @author diantu
* @since 2023年2月1日
*/
public interface DmMapper {
}

View File

@@ -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;
}
}

View File

@@ -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>

View File

@@ -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;