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

一、GenTableColumnMapper
这里是一个方法

<select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">select t3.COLUMN_NAME                     as column_name,(CASEWHEN (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,(  CASEWHEN (t3.TYPE = 'INT' OR t3.TYPE = 'INTEGER' OR t3.TYPE = 'BIGINT' OR t3.TYPE = 'TINYINT' ORt3.TYPE = 'SMALLINT') and t4.CONSTRAINT_TYPE = 'P' THEN '1'ELSE '0' END  )                 AS is_increment,DATA_TYPE as DATA_TYPEfrom ((select COLUMN_NAME,COLUMN_ID,concat(DATA_TYPE, '(', DATA_LENGTH, ')') as DATA_TYPE,DATA_TYPE                                as TYPE,TABLE_NAME,NULLABLEfrom SYS.USER_TAB_COLUMNSWHERE table_name = (#{tableName})) t3left join (select COMMENTS, COLUMN_NAME, TABLE_NAME from SYS.USER_COL_COMMENTS) t5ON (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_NAMEfrom (select CONSTRAINT_NAME, CONSTRAINT_TYPE, OWNER, TABLE_NAME from SYS.USER_CONSTRAINTS) t1inner join (select CONSTRAINT_NAME, OWNER, TABLE_NAME, COLUMN_NAME from SYS.USER_CONS_COLUMNS) t2ON (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>

二、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_timefrom SYS.USER_TABLES t1inner join SYS.USER_TAB_COMMENTS t2 ON t1.TABLE_NAME = t2.TABLE_NAMEWHERE 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>
 <select id="selectDbTableListByNames" resultMap="GenTableResult">select t1.TABLE_NAME as table_name, t2.COMMENTS as table_comment, NULL as create_time, NULL as update_timefrom SYS.USER_TABLES t1inner join SYS.USER_TAB_COMMENTS t2 ON t1.TABLE_NAME = t2.TABLE_NAMEWHERE 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>
<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_timefrom SYS.USER_TABLES t1inner join SYS.USER_TAB_COMMENTS t2 ON t1.TABLE_NAME = t2.TABLE_NAMEwhere t2.COMMENTS <![CDATA[ <> ]]> ''and t1.TABLE_NAME = #{tableName}
</select>

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

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

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

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

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部