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

逆向工程遇坑篇

作者: 还没想好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