欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-flex整合達(dá)夢(mèng)數(shù)據(jù)庫的實(shí)現(xiàn)示例

 更新時(shí)間:2024年10月14日 10:50:41   作者:我不是王廚  
本文討論了國產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫與Mybatis-flex框架的整合過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.前言:

國產(chǎn)化趨勢(shì)下,達(dá)夢(mèng)數(shù)據(jù)庫作為作為關(guān)系型數(shù)據(jù)庫的代表,在國產(chǎn)數(shù)據(jù)庫中占據(jù)一席之地。好了,不拍馬屁了相信很多人和我一樣是中軟杯賽項(xiàng)要求或者做信創(chuàng)項(xiàng)目才會(huì)用國產(chǎn)數(shù)據(jù)庫的??。

2.Mybatis-flex概述:

Mybatis-flex是一個(gè)為Mybatis增強(qiáng)而生的框架,它在保持Mybatis原有優(yōu)勢(shì)的基礎(chǔ)上,通過提供更靈活的QueryWrapper、支持多表查詢、聯(lián)接查詢、子查詢等高級(jí)功能,以及對(duì)多數(shù)據(jù)源的管理和優(yōu)化,顯著提升了開發(fā)效率和性能。

3.環(huán)境準(zhǔn)備:

3.1達(dá)夢(mèng)數(shù)據(jù)庫安裝

參考:Docker安裝 | 達(dá)夢(mèng)技術(shù)文檔 (dameng.com)

3.2mysql遷移達(dá)夢(mèng)、

參考:從 MySQL 移植到 DM | 達(dá)夢(mèng)技術(shù)文檔 (dameng.com)

4.整合步驟:

4.1添加依賴

達(dá)夢(mèng)數(shù)據(jù)庫驅(qū)動(dòng)版本:8.1.2.141

            <dependency>
                <groupId>com.dameng</groupId>
                <artifactId>DmJdbcDriver18</artifactId>
                <version>8.1.2.141</version>
            </dependency>

            <dependency>
                <groupId>com.mybatis-flex</groupId>
                <artifactId>mybatis-flex-processor</artifactId>
                <version>1.8.9</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>com.mybatis-flex</groupId>
                <artifactId>mybatis-flex-codegen</artifactId>
                <version>1.8.9</version>
            </dependency>

4.2配置代碼生成器

public class Codegen {

   static class MyDialect extends AbstractJdbcDialect {

//添加雙引號(hào)
       @Override
       protected String forBuildColumnsSql(String schema, String tableName) {
           return "SELECT * FROM " + (StringUtil.isNotBlank(schema) ? schema + ".\"" : "") + tableName + "\" WHERE 1 = 2";
       }
    }

    public static void main(String[] args) {
        //配置數(shù)據(jù)源
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName("dm.jdbc.driver.DmDriver");
        //url
        dataSource.setJdbcUrl("jdbc:dm://192.168.123.80:30236");
        //用戶名
        dataSource.setUsername("SYSDBA");
        //密碼
        dataSource.setPassword("SYSDBA001");


        //創(chuàng)建配置內(nèi)容,兩種風(fēng)格都可以。
        GlobalConfig globalConfig = createGlobalConfigUseStyle1();
        globalConfig.setGenerateSchema("RC");
        //通過 datasource 和 globalConfig 創(chuàng)建代碼生成器
        Generator generator = new Generator(dataSource, globalConfig,new MyDialect());
        //數(shù)據(jù)庫模式的名稱
        dataSource.setSchema("RC");

        //生成代碼
        generator.generate();
    }

    public static GlobalConfig createGlobalConfigUseStyle1() {
        //創(chuàng)建配置內(nèi)容
        GlobalConfig globalConfig = new GlobalConfig();
       
        //設(shè)置根包
        globalConfig.getPackageConfig()
                .setBasePackage("com.rc.pojo.po");
        //設(shè)置生成 entity 并啟用 Lombok
        globalConfig.enableEntity()
                .setWithLombok(true)
                .setWithBasePackage("po")
                .setJdkVersion(17);
        globalConfig.enableController();
        globalConfig.enableTableDef();
        globalConfig.enableMapper();
        //代碼生成的地址
        globalConfig.setSourceDir("F:\\Java\\rural-classroom\\rc-pojo\\src\\main\\java");
        return globalConfig;
    }
}

4.3application.yml配置

url、username、password記得改成自己的

spring:
  datasource:
    driver-class-name: dm.jdbc.driver.DmDriver
    url: jdbc:dm://10.2.17.218:30236?clobAsString=1
    username: SYSDBA
    password: SYSDBA001

4.4配置數(shù)據(jù)庫方言

例如order、comment、user這些詞在達(dá)夢(mèng)中屬于關(guān)鍵字需要用雙引號(hào)轉(zhuǎn)義

public class MyDmDialect extends CommonsDialectImpl {
    public static final Set<String> keywords = CollectionUtil.newHashSet(
            "ACCESS", "ELSE", "MODIFY", "START", "ADD", "EXCLUSIVE", "NOAUDIT", "SELECT",
            "ALL", "EXISTS", "NOCOMPRESS", "SESSION", "ALTER", "FILE", "NOT", "SET", "AND", "FLOAT",
            "NOTFOUND", "SHARE", "ANY", "FOR", "NOWAIT", "SIZE", "ARRAYLEN", "FROM", "NULL", "SMALLINT",
            "AS", "GRANT", "NUMBER", "SQLBUF", "ASC", "GROUP", "OF", "SUCCESSFUL", "AUDIT", "HAVING",
            "OFFLINE", "SYNONYM", "BETWEEN", "IDENTIFIED", "ON", "SYSDATE", "BY", "IMMEDIATE", "ONLINE",
            "TABLE", "CHAR", "IN", "OPTION", "THEN", "CHECK", "INCREMENT", "OR", "TO", "CLUSTER", "INDEX",
            "ORDER", "TRIGGER", "COLUMN", "INITIAL", "PCTFREE", "UID", "COMMENT", "INSERT", "PRIOR",
            "UNION", "COMPRESS", "INTEGER", "PRIVILEGES", "UNIQUE", "CONNECT", "INTERSECT", "PUBLIC",
            "UPDATE", "CREATE", "INTO", "RAW", "USER", "CURRENT", "IS", "RENAME", "VALIDATE", "DATE", "LEVEL",
            "RESOURCE", "VALUES", "DECIMAL", "LIKE", "REVOKE", "VARCHAR", "DEFAULT", "LOCK", "ROW", "VARCHAR2",
            "DELETE", "LONG", "ROWID", "VIEW", "DESC", "MAXEXTENTS", "ROWLABEL", "WHENEVER", "DISTINCT", "MINUS",
            "ROWNUM", "WHERE", "DROP", "MODE", "ROWS", "WITH", "ADMIN", "CURSOR", "FOUND", "MOUNT", "AFTER", "CYCLE",
            "FUNCTION", "NEXT", "ALLOCATE", "DATABASE", "GO", "NEW", "ANALYZE", "DATAFILE", "GOTO", "NOARCHIVELOG",
            "ARCHIVE", "DBA", "GROUPS", "NOCACHE", "ARCHIVELOG", "DEC", "INCLUDING", "NOCYCLE", "AUTHORIZATION",
            "DECLARE", "INDICATOR", "NOMAXVALUE", "AVG", "DISABLE", "INITRANS", "NOMINVALUE", "BACKUP", "DISMOUNT",
            "INSTANCE", "NONE", "BEGIN", "DOUBLE", "INT", "NOORDER", "BECOME", "DUMP", "KEY", "NORESETLOGS", "BEFORE",
            "EACH", "LANGUAGE", "NORMAL", "BLOCK", "ENABLE", "LAYER", "NOSORT", "BODY", "END", "LINK", "NUMERIC", "CACHE",
            "ESCAPE", "LISTS", "OFF", "CANCEL", "EVENTS", "LOGFILE", "OLD", "CASCADE", "EXCEPT", "MANAGE", "ONLY", "CHANGE",
            "EXCEPTIONS", "MANUAL", "OPEN", "CHARACTER", "EXEC", "MAX", "OPTIMAL", "CHECKPOINT", "EXPLAIN", "MAXDATAFILES",
            "OWN", "CLOSE", "EXECUTE", "MAXINSTANCES", "PACKAGE", "COBOL", "EXTENT", "MAXLOGFILES", "PARALLEL", "COMMIT",
            "EXTERNALLY", "MAXLOGHISTORY", "PCTINCREASE", "COMPILE", "FETCH", "MAXLOGMEMBERS", "PCTUSED", "CONSTRAINT",
            "FLUSH", "MAXTRANS", "PLAN", "CONSTRAINTS", "FREELIST", "MAXVALUE", "PLI", "CONTENTS", "FREELISTS", "MIN",
            "PRECISION", "CONTINUE", "FORCE", "MINEXTENTS", "PRIMARY", "CONTROLFILE", "FOREIGN", "MINVALUE", "PRIVATE",
            "COUNT", "FORTRAN", "MODULE", "PROCEDURE", "PROFILE", "SAVEPOINT", "SQLSTATE", "TRACING", "QUOTA", "SCHEMA",
            "STATEMENT_ID", "TRANSACTION", "READ", "SCN", "STATISTICS", "TRIGGERS", "REAL", "SECTION", "STOP", "TRUNCATE",
            "RECOVER", "SEGMENT", "STORAGE", "UNDER", "REFERENCES", "SEQUENCE", "SUM", "UNLIMITED", "REFERENCING", "SHARED",
            "SWITCH", "UNTIL", "RESETLOGS", "SNAPSHOT", "SYSTEM", "USE", "RESTRICTED", "SOME", "TABLES", "USING", "REUSE",
            "SORT", "TABLESPACE", "WHEN", "ROLE", "SQL", "TEMPORARY", "WRITE", "ROLES", "SQLCODE", "THREAD", "WORK", "ROLLBACK",
            "SQLERROR", "TIME", "ABORT", "BETWEEN", "CRASH", "DIGITS", "ACCEPT", "BINARY_INTEGER", "CREATE", "DISPOSE", "ACCESS",
            "BODY", "CURRENT", "DISTINCT", "ADD", "BOOLEAN", "CURRVAL", "DO", "ALL", "BY", "CURSOR", "DROP", "ALTER", "CASE", "DATABASE",
            "ELSE", "AND", "CHAR", "DATA_BASE", "ELSIF", "ANY", "CHAR_BASE", "DATE", "END", "ARRAY", "CHECK", "DBA", "ENTRY", "ARRAYLEN",
            "CLOSE", "DEBUGOFF", "EXCEPTION", "AS", "CLUSTER", "DEBUGON", "EXCEPTION_INIT", "ASC", "CLUSTERS", "DECLARE", "EXISTS",
            "ASSERT", "COLAUTH", "DECIMAL", "EXIT", "ASSIGN", "COLUMNS", "DEFAULT", "FALSE", "AT", "COMMIT", "DEFINITION", "FETCH",
            "AUTHORIZATION", "COMPRESS", "DELAY", "FLOAT", "AVG", "CONNECT", "DELETE", "FOR", "BASE_TABLE", "CONSTANT", "DELTA", "FORM",
            "BEGIN", "COUNT", "DESC", "FROM", "FUNCTION", "NEW", "RELEASE", "SUM", "GENERIC", "NEXTVAL", "REMR", "TABAUTH",
            "GOTO", "NOCOMPRESS", "RENAME", "TABLE", "GRANT", "NOT", "RESOURCE", "TABLES", "GROUP", "NULL", "RETURN", "TASK", "HAVING",
            "NUMBER", "REVERSE", "TERMINATE", "IDENTIFIED", "NUMBER_BASE", "REVOKE", "THEN", "IF", "OF", "ROLLBACK", "TO", "IN", "ON",
            "ROWID", "TRUE", "INDEX", "OPEN", "ROWLABEL", "TYPE", "INDEXES", "OPTION", "ROWNUM", "UNION", "INDICATOR", "OR", "ROWTYPE",
            "UNIQUE", "INSERT", "ORDER", "RUN", "UPDATE", "INTEGER", "OTHERS", "SAVEPOINT", "USE", "INTERSECT", "OUT", "SCHEMA", "VALUES",
            "INTO", "PACKAGE", "SELECT", "VARCHAR", "IS", "PARTITION", "SEPARATE", "VARCHAR2", "LEVEL", "PCTFREE", "SET", "VARIANCE",
            "LIKE", "POSITIVE", "SIZE", "VIEW", "LIMITED", "PRAGMA", "SMALLINT", "VIEWS", "LOOP", "PRIOR", "SPACE", "WHEN", "MAX", "PRIVATE",
            "SQL", "WHERE", "MIN", "PROCEDURE", "SQLCODE", "WHILE", "MINUS", "PUBLIC", "SQLERRM", "WITH", "MLSLABEL", "RAISE", "START",
            "WORK", "MOD", "RANGE", "STATEMENT", "XOR", "MODE", "REAL", "STDDEV", "NATURAL", "RECORD", "SUBTYPE", "GEN", "KP", "L",
            "NA", "NC", "ND", "NL", "NM", "NR", "NS", "NT", "NZ", "TTC", "UPI", "O", "S", "XA"

    );

    public MyDmDialect() {
        this(LimitOffsetProcessor.MYSQL);
    }

    public MyDmDialect(LimitOffsetProcessor limitOffsetProcessor) {
        //出現(xiàn)以上關(guān)鍵字時(shí),添加 "" 
        this(new KeywordWrap(false, true, keywords, "\"", "\""), limitOffsetProcessor);
    }

    public MyDmDialect(KeywordWrap keywordWrap, LimitOffsetProcessor limitOffsetProcessor) {
        super(keywordWrap, limitOffsetProcessor);
    }
}

設(shè)置到flex中

@Configuration
public class FlexConfig implements ConfigurationCustomizer {
    public FlexConfig(){
        DialectFactory.registerDialect(DbType.DM,new MyDmDialect());
        FlexGlobalConfig.getDefaultConfig().setDbType(DbType.DM);
    }
}

到這里就可以像以前一樣crud了

5可能遇到的問題和解決方案。

5.1不支持LocalDateTime類的數(shù)據(jù)處理。

舊版本達(dá)夢(mèng)處理不支持將時(shí)間戳轉(zhuǎn)為LocalDateTime,這里用的8.1.2.141是可以的,但是如果因?yàn)樘厥庠蚴褂玫桶姹究梢宰约簩懸粋€(gè)TypeHandler把數(shù)據(jù)轉(zhuǎn)一下

5.2長文本顯示問題

長文本類型如text類型達(dá)夢(mèng)驅(qū)動(dòng)會(huì)把它用Clob類型封裝而不是String類型,這時(shí)候需要在url上配置clobAsString=1

到此這篇關(guān)于Mybatis-flex整合達(dá)夢(mèng)數(shù)據(jù)庫的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Mybatis-flex整合達(dá)夢(mèng)數(shù)據(jù)庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot中的自定義攔截器及原理詳解

    Springboot中的自定義攔截器及原理詳解

    這篇文章主要介紹了Springboot中的自定義攔截器及原理詳解,攔截器主要是用于在用戶請(qǐng)求控制中,對(duì)于請(qǐng)求識(shí)別,鑒權(quán),以及區(qū)分資源是否可以被目標(biāo)方法調(diào)用的安全機(jī)制,需要的朋友可以參考下
    2023-12-12
  • Spring?容器初始化?register?與?refresh方法

    Spring?容器初始化?register?與?refresh方法

    這篇文章主要介紹了Spring?容器初始化?register?與?refresh方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • SpringBoot應(yīng)用監(jiān)控帶郵件警報(bào)的實(shí)現(xiàn)示例

    SpringBoot應(yīng)用監(jiān)控帶郵件警報(bào)的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot應(yīng)用監(jiān)控帶郵件警報(bào)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • java通過isAccessAllowed方法實(shí)現(xiàn)訪問控制

    java通過isAccessAllowed方法實(shí)現(xiàn)訪問控制

    在Web應(yīng)用開發(fā)中,使用Apache Shiro框架的isAccessAllowed方法可以有效管理用戶的訪問權(quán)限,本文詳細(xì)解析了該方法的實(shí)現(xiàn)過程,包括用戶身份驗(yàn)證、權(quán)限判斷和安全性分析,下面就一起來了解一下
    2024-09-09
  • 解讀yml文件中配置時(shí)間類型的轉(zhuǎn)換方式

    解讀yml文件中配置時(shí)間類型的轉(zhuǎn)換方式

    這篇文章主要介紹了yml文件中配置時(shí)間類型的轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring從@Aspect到Advisor使用演示實(shí)例

    Spring從@Aspect到Advisor使用演示實(shí)例

    這篇文章主要介紹了Spring從@Aspect到Advisor使用演示實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • SpringBoot配置外部靜態(tài)資源映射問題

    SpringBoot配置外部靜態(tài)資源映射問題

    這篇文章主要介紹了SpringBoot配置外部靜態(tài)資源映射問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java使用sigar 遇到問題的快速解決方法

    java使用sigar 遇到問題的快速解決方法

    下面小編就為大家?guī)硪黄猨ava使用sigar 遇到問題的快速解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java CompletableFuture如何實(shí)現(xiàn)超時(shí)功能

    Java CompletableFuture如何實(shí)現(xiàn)超時(shí)功能

    這篇文章主要為大家介紹了實(shí)現(xiàn)超時(shí)功能的基本思路以及CompletableFuture(之后簡稱CF)是如何通過代碼實(shí)現(xiàn)超時(shí)功能的,需要的小伙伴可以了解下
    2025-01-01
  • Mybatis詳細(xì)對(duì)比一級(jí)緩存與二級(jí)緩存

    Mybatis詳細(xì)對(duì)比一級(jí)緩存與二級(jí)緩存

    MyBatis 包含一個(gè)非常強(qiáng)大的查詢緩存特性,它可以非常方便地配置和定制,緩存可以極大的提升查詢效率。MyBatis中默認(rèn)定義了兩級(jí)緩存,分別是一級(jí)緩存和二級(jí)緩存
    2022-10-10

最新評(píng)論