SSM开发 | 合理配置 mybatis-generator,隔离机器生成代码和额外增加代码

Posted bukong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSM开发 | 合理配置 mybatis-generator,隔离机器生成代码和额外增加代码相关的知识,希望对你有一定的参考价值。

1.提要

  本文是 小小商城-SSM版的 细节详解系列 之一,项目 github:https://github.com/xenv/S-mall-ssm 本文代码大部分在 github 中 可以找到。

  在中小型项目I中,我们常常使用 mybatis-generator 直接生成实体类、mapper、example代码。但是,在实际开发中,我们有可能会需要增加实体类的变量(比如一些前台的临时变量和一对多、多对一变量等等),修改mapper代码,如果在机器生成的代码上面直接修改,那么我们下次修改了数据库,想重新生成的时候就会覆盖掉旧的手写代码了。所以必须要想出一种解决办法来隔离生成代码和额外增加代码。

  最简单的方法,就是使用 IDE 的插件,但是这种方法没有普适性,可能换一个IDE就傻眼了,或者在实际部署的时候,也不一定有IDE的环境 ,所以这种做法可行,但是不是太好。

  一般的方法,就是 另起炉灶,开一个 Extension 类 / VO 类,再继承机器生成的类。如下图。然而,这种方法意味着 mapper 也要 重写,工作量大不说,还很容易出错,也不容易管理,使用 mybatis-generator 的意义也不是太大。

  技术分享图片

  在这里,我提出了一种新的解决方案,如下图:

  技术分享图片

  这种方法的巧妙之处在于,Service层调用的就是机器直接生成的代码,而让机器的代码去继承我们自己写的代码,这样,mapper不用额外写,example也可以支持,调用的时候又隐藏了 实体扩展类,干净整洁。

2.具体实现

  具体实现其实非常简单。小小商城的完整配置见 generatorConfig.xml

  1.修改mybatis-generator设置 ,让生成的实体类继承我们手写 Extension

  mybatis-generator其实支持我们直接去继承指定的类,只要在 table 配置中加入 "rootClass"  一行即可

        <table tableName="category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
            <property name="rootClass" value="tmall.pojo.extension.CategoryExtension"/>
            <property name="my.isgen.usekeys" value="true"/>
            <property name="useActualColumnNames" value="true"/>
            <generatedKey column="id" sqlStatement="JDBC"/>
        </table>

  2 手动新建 Extension 类,重新生成代码即可

以上是关于SSM开发 | 合理配置 mybatis-generator,隔离机器生成代码和额外增加代码的主要内容,如果未能解决你的问题,请参考以下文章

毕设利器 SSM到Spring Boot 从零开发校园商铺平台

SSM到Spring Boot -从零开发校园商铺平台

搭建ssm开发环境配置

ssm开发关于web.xml配置

SSM的开发步骤分析

SSM商城系统开发笔记-配置01-web.xml