Dameng データベースに適応した RuoYi プロジェクト (1)

新しいプロジェクトは、RuoYi フレームワーク (フロントエンドとバックエンドを分離しないバージョン、V4.7.5) を使用し、Dameng データベースを使用します。SpringBoot プロジェクト自体のデータベースを変更することは難しくありません.唯一の変数は、国内のデータベースで見つけることができる情報がそれほど豊富ではないことです.このプロジェクトの変更プロセスを通じて、テキストに記録されます.将来のトレースに便利です。


1. JDBC 依存関係

  1. 過去にDamengデータベースを使用した経験によると、Damengは正式にMavenバージョンのjdbcパッケージを提供していませんでした。インターネットでの経験は、基本的にDamengデータベースのインストールパスの下にあるjarパッケージを使用してインストールすることですローカルの Maven ウェアハウス; ローカル インストールの jar パッケージまたはプロジェクト リソース ディレクトリに jar パッケージを配置する方法に違和感を常に感じており、Maven ウェアハウスで検索してみましたが、実際には存在しません。それが公式に提供されているかどうかを確認してください;まあ、持っている方が便利です。
  2. admin サブモジュールの pom ファイルを変更し、mysql-jdbc 依存関係を dm-jdbc 依存関係に置き換えます。
  3. 次のようにファイルを変更します。
    	<dependencies>
        
            <!-- 其他依赖省略 -->
            
            <!-- Mysql驱动包 -->
    <!--        <dependency>-->
    <!--            <groupId>mysql</groupId>-->
    <!--            <artifactId>mysql-connector-java</artifactId>-->
    <!--        </dependency>-->
    
            <!-- 达梦驱动包 -->
            <dependency>
                <groupId>com.dameng</groupId>
                <artifactId>Dm7JdbcDriver18</artifactId>
                <version>7.6.0.165</version>
            </dependency>
        </dependencies>
    
  4. jdbc パッケージのバージョンに注意してください。Dm7JdbcDriver18 の 7 は DM データベースのバージョンで、18 は JDK のバージョンです。

2. データベース接続プールの構成

  • 構成は次のように変更されます。
    # 数据源配置
    spring:
        datasource:
            type: com.alibaba.druid.pool.DruidDataSource
            driverClassName: dm.jdbc.driver.DmDriver
            druid:
                # 主库数据源
                master:
                    url: jdbc:dm://[ip]:[port]
                    username: SYSDBA
                    password: ***
    

三、Pagehelperの方言設定

  • 次のように変更します。
    # PageHelper分页插件
    pagehelper: 
      helperDialect: oracle
      supportMethodsArguments: true
      params: count=countSql 
    

4. DM がサポートしていない SQL 関数に適応する

  1. 関数への置き換え: オンライン ユーザー関数を記録します。SysUserOnlineMapper の saveOnline メソッドは、サポートされていない関数への置換を使用します。これは関数へのマージに置き換える必要があります。

    • 元の文:
    <insert id="saveOnline" parameterType="SysUserOnline">
        replace into sys_user_online(sessionId, login_name, dept_name, ipaddr, login_location, browser, os, status, start_timestamp, last_access_time, expire_time)
        values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime})
    </insert>
    
    • 変更されたステートメント:
    <insert id="saveOnline" parameterType="SysUserOnline">
    	merge into sys_user_online
    		using (select #{sessionId} sessionId, #{loginName} login_name, #{deptName} dept_name, #{ipaddr} ipaddr, #{loginLocation} login_location, #{browser} browser, #{os} os,
    			              #{tatus} status, #{startTimestamp} start_timestamp, #{lastAccessTime} last_access_time, #{expireTime} expire_time from dual) d
    			on sys_user_online.sessionId = d.sessionId
    			when matched then
    				update set sys_user_online.login_name = d.login_name, sys_user_online.dept_name = d.dept_name, sys_user_online.ipaddr = d.ipaddr,
    				    sys_user_online.login_location = d.login_location, sys_user_online.browser = d.browser, sys_user_online.os = d.os, sys_user_online.status = d.status,
    				    sys_user_online.start_timestamp = d.start_timestamp, sys_user_online.last_access_time = d.last_access_time, sys_user_online.expire_time = d.expire_time
    			when not matched then
    				insert (sessionId, login_name, dept_name, ipaddr, login_location, browser, os, status, start_timestamp, last_access_time, expire_time)
    				    values(d.sessionId, d.login_name, d.dept_name, d.ipaddr, d.login_location, d.browser, d.os, d.status, d.start_timestamp, d.last_access_time, d.expire_time)
    </insert>
    
  2. find_in_set: 部門管理。サポートされていない find_in_set 関数が SysDeptMapper で使用されています。これは instr 関数に置き換えることができます。

    • 例は次のとおりです。
    -- 原函数
    find_in_set(#{deptId}, ancestors)
    -- 新函数
    instr(','||ancestors||',' ,  ','|| #{deptId} ||',') 
    

5. 注意事項

  1. char 型の場合、長さは 1 から 4 に変化し、読み取ったデータは「1」などの空白で埋められます。これにより、システムが異常に表示/バックフィルします。

6. まとめ

  1. この時点で、プロジェクト全体 (コード生成モジュールを除く) は基本的に正常に実行でき、プロジェクトの適応の第 1 段階は終了します。
  2. 発見されていない SQL 関数の問題が存在する可能性があり、それらの問題が発生した後にのみ修正できます。
  3. コード生成モジュールは、データベースのテーブル構造などの情報を読み取る必要がありますが、これは多くの変更が加えられていて、まだ実装されていないため、最初に DM の関連情報を検索する必要があり、それが正しいかどうかはわかりません。適応可能であれば、別の記事が記録されます。

おすすめ

転載: blog.csdn.net/xhp312098226/article/details/126993755