逆向工程遇坑篇

2023-01-05  本文已影响0人  还没想好ONE

因维护老项目,项目中没有逆向工程生成工具,只能自己添加,但是前任设计数据
库表结构略显与众不同,导致我陷入半天。
参考:generatorConfig.xml配置格式

背景:
数据库:Oracle

先看下表结构:


image.png
   SELECT a."bean_name", a."method_name" , a.* FROM "sys_async_task" a ;

所以在逆向工程的表配置中要加上delimitIdentifiers= true 和 delimitAllColumns=true 配置。

<table tableName= "sys_async_task" domainObjectName="SysAsyncTask" 
delimitIdentifiers="true" delimitAllColumns="true" 
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
       </table>

可以理解为:
delimitIdentifiers=true :生成的文件中,表名会被标识符引起来(Oracle是双引号,Mysql是反引号)
delimitAllColumns=true : 生成的文件中,列名会被标识符引起来(Oracle是双引号,Mysql是反引号)

这样修改后,我们就可以生成一个mapper.xml文件了,但是好戏才刚刚开始!

Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. 
Cause: java.sql.SQLException: 无效的列类型: 1111",

报错原因就是因为OTHER类型的字段值有空值/null的存在,如果jdbcType=VARCHAR就不会出现这种情况,所以我们就要把OTHER类型转变为VARCHAR;

<table tableName= "sys_async_task" delimitIdentifiers="true" delimitAllColumns="true" domainObjectName="SysAsyncTask" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <columnOverride column="bean_name" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="method_name" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="parameter_names" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="parameter_types" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="data_type" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="data_type_name" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="data_code" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="data_title" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="data_content" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="at_state" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="at_group_type" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="at_group_name" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="at_group_code" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="at_send_type" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="at_exc_hand" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="at_stop_interval" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="created_by" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="updated_by" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="arguments" javaType="java.lang.String" jdbcType="VARCHAR" />
            <columnOverride column="at_stack_trace" javaType="java.lang.String" jdbcType="VARCHAR" />
        </table>

这样就可正常使用逆向工程生成的文件了。

如果你比较了解逆向工程文件的配置,这些问题估计就迎刃而解,洒洒水一样简单,经过此次入坑后,可以增加自己的解决同种问题的思路,使自己更快更高效的发现问题并解决问题。希望本篇文档对大家有所帮助。

以上仅是个人观点,如表述有问题,请指出,共同进步!

上一篇 下一篇

猜你喜欢

热点阅读