2 Commits

Author SHA1 Message Date
c65bd7b36f 代码优化 2025-06-05 12:59:32 +08:00
721cd48d96 支持达梦数据库V8 2025-06-05 12:58:18 +08:00
6 changed files with 29 additions and 19 deletions

View File

@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.yanghuanglin</groupId> <groupId>com.yanghuanglin</groupId>
<artifactId>seq</artifactId> <artifactId>seq</artifactId>
<version>1.11.0</version> <version>1.12.0</version>
<name>seq</name> <name>seq</name>
<description>seq</description> <description>seq</description>
<properties> <properties>
@@ -34,6 +34,12 @@
<version>42.7.3</version> <version>42.7.3</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.3.140</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>

View File

@@ -3,6 +3,7 @@ package com.yanghuanglin.seq.config;
import com.yanghuanglin.seq.enums.DbType; import com.yanghuanglin.seq.enums.DbType;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
/** /**
@@ -133,7 +134,8 @@ public class GeneratorConfig {
public DbType getDbType() { public DbType getDbType() {
if (this.dbType == null) { if (this.dbType == null) {
try { try {
String productName = this.dataSource.getConnection().getMetaData().getDatabaseProductName(); Connection connection = dataSource.getConnection();
String productName = connection.getMetaData().getDatabaseProductName();
this.dbType = DbType.of(productName); this.dbType = DbType.of(productName);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException("获取数据库类型失败", e); throw new RuntimeException("获取数据库类型失败", e);

View File

@@ -50,6 +50,7 @@ public abstract class SequencesBase {
sql = sql.replaceAll("`create_time`", String.format("`%s`", tableConfig.getCreateTimeColumn())); sql = sql.replaceAll("`create_time`", String.format("`%s`", tableConfig.getCreateTimeColumn()));
break; break;
case Dameng: case Dameng:
case DM_DBMS:
case PostgreSQL: case PostgreSQL:
case KingbaseES: case KingbaseES:
sql = sql.replaceAll("\"sequences(_unused|_unlock)\"", String.format("%s$1", tableConfig.getTable())); sql = sql.replaceAll("\"sequences(_unused|_unlock)\"", String.format("%s$1", tableConfig.getTable()));
@@ -79,6 +80,7 @@ public abstract class SequencesBase {
break; break;
case PostgreSQL: case PostgreSQL:
case Dameng: case Dameng:
case DM_DBMS:
case KingbaseES: case KingbaseES:
sqlString = sqlString.replaceAll("`(.+?)`", "\"$1\""); sqlString = sqlString.replaceAll("`(.+?)`", "\"$1\"");
break; break;

View File

@@ -5,6 +5,8 @@ public enum DbType {
MySQL("mysql"), MySQL("mysql"),
//达梦数据库 //达梦数据库
Dameng("dm"), Dameng("dm"),
//达梦数据库
DM_DBMS("dm"),
//人大金仓数据库 //人大金仓数据库
KingbaseES("pgsql"), KingbaseES("pgsql"),
//PostgreSQL数据库 //PostgreSQL数据库
@@ -28,7 +30,7 @@ public enum DbType {
*/ */
public static DbType of(String productName) { public static DbType of(String productName) {
for (DbType value : DbType.values()) { for (DbType value : DbType.values()) {
if (value.name().equalsIgnoreCase(productName)) { if (value.name().equalsIgnoreCase(productName.replace(" ", "_"))) {
return value; return value;
} }
} }

View File

@@ -3,24 +3,11 @@ CREATE TABLE IF NOT EXISTS "sequences"
"key" VARCHAR(64) NOT NULL, "key" VARCHAR(64) NOT NULL,
"type" VARCHAR(64) NOT NULL, "type" VARCHAR(64) NOT NULL,
"seq" BIGINT NOT NULL, "seq" BIGINT NOT NULL,
"update_time" TIMESTAMP, "update_time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ("key", "type") PRIMARY KEY ("key", "type")
); );
COMMENT ON TABLE "sequences" IS '当前序号表'; COMMENT ON TABLE "sequences" IS '当前序号表';
COMMENT ON COLUMN "sequences"."key" IS '序号英文名称'; COMMENT ON COLUMN "sequences"."key" IS '序号英文名称';
COMMENT ON COLUMN "sequences"."type" IS '序号类型'; COMMENT ON COLUMN "sequences"."type" IS '序号类型';
COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号'; COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号';
COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间'; COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间';
/*
@触发器设置,功能:自动记录更新时间
@触发器名为 SEQUENCES_UPDATE_TIME
@触发器执行范围为每行生效
*/
CREATE OR REPLACE TRIGGER SEQUENCES_UPDATE_TIME BEFORE UPDATE ON "sequences" FOR EACH ROW
BEGIN
NEW."update_time":=SYSDATE;
END;
/*启动触发器*/
ALTER TRIGGER SEQUENCES_UPDATE_TIME ENABLE;

View File

@@ -5,10 +5,12 @@ import com.yanghuanglin.seq.config.TableConfig;
import com.yanghuanglin.seq.generator.Generator; import com.yanghuanglin.seq.generator.Generator;
import com.yanghuanglin.seq.generator.impl.SequencesGenerator; import com.yanghuanglin.seq.generator.impl.SequencesGenerator;
import com.yanghuanglin.seq.po.Sequences; import com.yanghuanglin.seq.po.Sequences;
import dm.jdbc.driver.DmdbDataSource;
import org.junit.Test; import org.junit.Test;
import org.postgresql.ds.PGSimpleDataSource; import org.postgresql.ds.PGSimpleDataSource;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.sql.DatabaseMetaData;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ArrayBlockingQueue;
@@ -24,7 +26,7 @@ public class SeqTest {
private static final Generator generator; private static final Generator generator;
static { static {
dataSource = mysql(); dataSource = dm();
GeneratorConfig generatorConfig = new GeneratorConfig(dataSource); GeneratorConfig generatorConfig = new GeneratorConfig(dataSource);
System.out.println("DbType: " + generatorConfig.getDbType()); System.out.println("DbType: " + generatorConfig.getDbType());
@@ -65,6 +67,14 @@ public class SeqTest {
return pgDataSource; return pgDataSource;
} }
private static DataSource dm() {
DmdbDataSource dmdbDataSource = new DmdbDataSource();
dmdbDataSource.setURL("jdbc:dm://127.0.0.1:5236?schema=sequence");
dmdbDataSource.setUser("SYSDBA");
dmdbDataSource.setPassword("SYSDBA");
return dmdbDataSource;
}
@Test @Test
public void createTable() { public void createTable() {
generator.createTable(); generator.createTable();
@@ -137,6 +147,7 @@ public class SeqTest {
@Test @Test
public void lockTest() { public void lockTest() {
generator.generate("0010001$distrainCode2024","MISSION");
Sequences sequences = new Sequences(); Sequences sequences = new Sequences();
sequences.setKey("0010001$distrainCode2024"); sequences.setKey("0010001$distrainCode2024");
sequences.setType("MISSION"); sequences.setType("MISSION");