美文网首页
逆向工程遇坑篇

逆向工程遇坑篇

作者: 还没想好ONE | 来源:发表于2023-01-05 17:16 被阅读0次

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

背景:
数据库:Oracle

先看下表结构:


image.png
  • 问题1
    之前创建表结构时,前任的创建表语句中的表名和字段名都是加引号的,因为Oracle是区分大小写的,我推测,他是想要表名和字段名可以展示为小写原始状态,才会这么做,这就导致了我们写sql语句的时候,要这样写:表名和列名都要加引号
   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是反引号)

  • 效果如下:


    image.png

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

  • 问题2
    当我们开始使用mapper.xml时,会发现一个jdbcType=OTHER的陌生情况



    如果我们不做更改继续使用时(以Insert为例),就会有如下情况报错:

  • 执行语句:


    image.png
  • 报错信息:
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;

  • 方法:
    修改generatorConfig.xml中的<table>配置:
<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>
  • 生成mapper.xml样式:


    image.png

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

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

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

相关文章

网友评论

      本文标题:逆向工程遇坑篇

      本文链接:https://www.haomeiwen.com/subject/jldjcdtx.html