• 解决若依框架中只适配MySQL的问题,若依框架完美适配达梦数据库的代码生成,适配其他框架原理相似。


    一、GenTableColumnMapper
    这里是一个方法

    <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
        select t3.COLUMN_NAME                     as column_name,
               (CASE
                    WHEN (t3.NULLABLE = 'N' and t4.CONSTRAINT_TYPE !='P') THEN '1'
                    ELSE NULL END)
                                                  as is_required,
               IF(t4.CONSTRAINT_TYPE = 'P', 1, 0) as is_pk,
               t3.COLUMN_ID                       as sort,
               t5.COMMENTS                        as column_comment,
               (  CASE
                      WHEN (t3.TYPE = 'INT' OR t3.TYPE = 'INTEGER' OR t3.TYPE = 'BIGINT' OR t3.TYPE = 'TINYINT' OR
                            t3.TYPE = 'SMALLINT') and t4.CONSTRAINT_TYPE = 'P' THEN '1'
                      ELSE '0' END  )                 AS is_increment,
               DATA_TYPE as DATA_TYPE
        from ((select COLUMN_NAME,
                      COLUMN_ID,
                      concat(DATA_TYPE, '(', DATA_LENGTH, ')') as DATA_TYPE,
                      DATA_TYPE                                as TYPE,
                      TABLE_NAME,
                      NULLABLE
               from SYS.USER_TAB_COLUMNS
               WHERE table_name = (#{tableName})) t3
                 left join (select COMMENTS, COLUMN_NAME, TABLE_NAME from SYS.USER_COL_COMMENTS) t5
                           ON (t3.COLUMN_NAME = t5.COLUMN_NAME and t3.TABLE_NAME = t5.TABLE_NAME)
                 left join
             (select t1.CONSTRAINT_TYPE, t1.OWNER, t1.TABLE_NAME, t2.CONSTRAINT_NAME, t2.COLUMN_NAME
              from (select CONSTRAINT_NAME, CONSTRAINT_TYPE, OWNER, TABLE_NAME from SYS.USER_CONSTRAINTS) t1
                       inner join (select CONSTRAINT_NAME, OWNER, TABLE_NAME, COLUMN_NAME from SYS.USER_CONS_COLUMNS) t2
                                  ON (t1.TABLE_NAME = t2.TABLE_NAME and t1.CONSTRAINT_NAME = t2.CONSTRAINT_NAME)
              where t1.CONSTRAINT_TYPE = 'P') t4 ON (t3.COLUMN_NAME = t4.COLUMN_NAME and t3.TABLE_NAME = t4.TABLE_NAME))
        order by t3.COLUMN_ID
    </select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    二、GenTableMapper
    这里是三个方法

      <select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
            select t1.TABLE_NAME as table_name, t2.COMMENTS as table_comment, NULL as create_time, NULL as update_time
            from SYS.USER_TABLES t1
            inner join SYS.USER_TAB_COMMENTS t2 ON t1.TABLE_NAME = t2.TABLE_NAME
            WHERE t1.TABLE_NAME NOT LIKE 'qrtz_%'
            AND t1.TABLE_NAME NOT LIKE 'gen_%'
            AND t1.TABLE_NAME NOT IN (select table_name as TABLE_NAME from gen_table)
            <if test="tableName != null and tableName != ''">
                AND lower(t1.TABLE_NAME) like lower(concat('%', #{tableName}, '%'))
            </if>
            <if test="tableComment != null and tableComment != ''">
                AND lower(t1.TABLE_NAME) like lower(concat('%', #{tableName}, '%'))
            </if>
        </select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
     <select id="selectDbTableListByNames" resultMap="GenTableResult">
            select t1.TABLE_NAME as table_name, t2.COMMENTS as table_comment, NULL as create_time, NULL as update_time
            from SYS.USER_TABLES t1
            inner join SYS.USER_TAB_COMMENTS t2 ON t1.TABLE_NAME = t2.TABLE_NAME
            WHERE t1.TABLE_NAME NOT LIKE 'qrtz_%'
            AND t1.TABLE_NAME NOT LIKE 'gen_%'
            and t1.TABLE_NAME in
            <foreach collection="array" item="name" open="(" separator="," close=")">
                #{name}
            </foreach>
        </select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    <select id="selectTableByName" parameterType="String" resultMap="GenTableResult">
        select t1.TABLE_NAME as table_name, t2.COMMENTS as table_comment, NULL as create_time, NULL as update_time
        from SYS.USER_TABLES t1
                 inner join SYS.USER_TAB_COMMENTS t2 ON t1.TABLE_NAME = t2.TABLE_NAME
        where t2.COMMENTS <![CDATA[ <> ]]> ''
          and t1.TABLE_NAME = #{tableName}
    </select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    系统表中有ALL、DBA、USER类型的,为了防止权限有问题,取的系统表全是取的是USER中的。
    找到对应的SQL方法直接替换就行了

    使用时注意传入的参数是tableName
    有个select Database,这个没做处理,不过不影响使用,

    identity这个自增的字段在系统表中没有找到,
    我是用int类型并且是主键的情况是判断的,
    这个主要是因为ID自增的问题,
    如果有找到的话,可以给评论下,我优化下,

    全部的数据来源都是从SYS的视图中获取的,关联关系的都是通过视图中的字段和数据对应找的,

    现在我们这边使用的是UUID,所以不会出现问题。
    暂时的话,在生成代码的时候,没发现什么问题,代码生成正常,一切使用正常。

  • 相关阅读:
    OpenCV4之特征提取与对象检测
    BootStrap响应式项目实战之世界杯网页设计
    Kaggle | Titanic - Machine Learning from Disaster | baseline
    [PyTorch][chapter 56][GAN 代码实现]
    【深入浅出 Yarn 架构与实现】4-5 RM 行为探究 - 启动 ApplicationMaster
    天津化工杂志天津化工杂志社天津化工编辑部2022年第3期目录
    分享一个开发者和设计者的免费图标库
    如何看待PyTorch 2.0?
    使用Ref还是Reactive?
    Elasticsearch —索引性能技巧
  • 原文地址:https://blog.csdn.net/qq_41840735/article/details/127877595