码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-03-02 12:18:54      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:等等   navig   roo   ted   git   手动   前台   额外   插件   

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,隔离机器生成代码和额外增加代码

标签:等等   navig   roo   ted   git   手动   前台   额外   插件   

原文地址:https://www.cnblogs.com/bukong/p/mybatis-generator-insulate.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!