`
dinguangx
  • 浏览: 240420 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[jshop]mybatis-generator定制

阅读更多

JShop简介:jshop是一套使用Java语言开发的B2C网店系统,致力于为个人和中小企业提供免费、好用的网店系统。

项目主页:http://git.oschina.net/dinguangx/jshop

在线演示:

mybatis-generator生成的代码文件主要有:

(1)mapper映射文件

(2)client(如果mybatis是ClientMapper接口类,而ibatis2则是DAO和DAOImpl)

(3)model:即与数据库字段一一对应的POJO

(4)model example

为这些代码文件提供的与数据库交互的方法有:

 

countByExample
deleteByExample
deleteByPrimaryKey
insert
insertSelective
selectByExampleWithBLOBs
selectByExampleWithoutBLOBs
selectByPrimaryKey
updateByExampleSelective
updateByExampleWithBLOBs
updateByExampleWithoutBLOBs
updateByPrimaryKeySelective
updateByPrimaryKeyWithBLOBs
updateByPrimaryKeyWithoutBLOBs

 

围绕这几类的代码文件,mybatis generaotr提供了高度可定制化的扩展点,如对这些文件如何生成注释提供了CommentGenerator,控制整个代码生成过程的Plugin等。

jshop在集成mybatis gerarator时,主要针对实际的使用情况,定制了代码注释生成器和控制生成哪些方法的Plugin

(1) CommentGenerator定制

CommentGenerator对代码中的注释生成过程进行拦截和扩展,注释的类型包括文档注释,属性注释,方法注释,日期注释,setter/getter注释等。实际上,大部分的注释都是无意义的,仅仅为了表明生成的时间和标示是自动生成的。所以jshop中对comment generator进行定制,只保留model bean中的field注释,取的是字段的comment,其他注释全部去除,如下:

具体定制的代码见CommentGeneratorExt

生成的model文件示例如下:

public class ArticleCatalog implements Serializable {
    /** ID */
    private Integer id;

    /** 分类名称 */
    private String name;

    /** 父级ID */
    private Integer pid;

    /** 顺序 */
    private Integer order;

    /** 类型 */
    private String type;

    /** 分类编码 */
    private String code;

    private static final long serialVersionUID = 1L;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public Integer getPid() {
        return pid;
    }

    public void setPid(Integer pid) {
        this.pid = pid;
    }

    public Integer getOrder() {
        return order;
    }

    public void setOrder(Integer order) {
        this.order = order;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type == null ? null : type.trim();
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code == null ? null : code.trim();
    }
}

 

 

(2) Plugin定制-生成的method取舍

为了减少可能出现的代码bug,去除了updateByExample,deleteByExample, updateByExampleSelective和deleteByExampleSelective相关的方法,因为这几个方法会根据条件批量更新数据库,容易引入潜在的bug,保留updateByPrimaryKey和deleteByPrimaryKey进行数据库更新操作。

具体代码见JshopCustomPlugin

 

(3) Plugin扩展-mapper代码生成的问题

默认情况下,不删除原来已经生成过的代码文件时,dao,model文件可以在再次生成时被覆盖,而mapper文件则不会,所以对plguin进行扩展,可以在再次生成代码文件时,将原mapper文件覆盖掉。

 

/**
 * mapper文件可被重写的插件,默认情况下,重新生成代码时,mapper文件不会被覆盖
 * 通过参数mapperOverwrite决定是否覆盖mapper文件,该值默认为true
 */
public class MapperFileOverwritePlugin extends PluginAdapter {
    @Override
    public boolean validate(List<String> warnings) {
        return true;
    }
    private boolean mapperOverwrite = true;

    @Override
    public void setProperties(Properties properties) {
        super.setProperties(properties);
        mapperOverwrite = Boolean.valueOf(properties.getProperty("mapperOverwrite", String.valueOf(mapperOverwrite)));
    }

    @Override
    public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) {
        if(mapperOverwrite){
            try {
                Field mergedField = GeneratedXmlFile.class.getDeclaredField("isMergeable");
                mergedField.setAccessible(true);
                mergedField.setBoolean(sqlMap, false);
                return true;
            } catch (Exception e){
                e.printStackTrace();
            }
        }
        return super.sqlMapGenerated(sqlMap, introspectedTable);
    }
}

 

 

jshop自动生成代码规范:

所有生成的代码位于src/main/gen目录,如果需要扩展model或client文件,则在src/main/java下新建一个继承于生成的model或client类的新类;如果需要扩展mapper文件,则在src/main/resources/mapper/ext中新建mapper文件。以便于在数据库有变动时,可以再次调用代码生成程序重新生成相关的文件。

 

1
1
分享到:
评论

相关推荐

    jshop2-master.zip

    jshop2-master.zip 全的

    jshop-mall-master.zip

    Jshop小程序商城,是一款开源的支持可视化布局的电商系统,包含微信小程序、支付宝小程序、APP、公众号、H5端、PC端、抖音小程序、今日头条小程序、皮皮虾小程序、西瓜视频小程序,为大中小企业提供移动电子商务优秀...

    京东JSHOP右侧悬浮

    京东JSHOP店铺装修右侧悬浮代码。可调整为左侧悬浮。

    Jshop B2C商城系统

    Jshop是开源的springMVC B2C电商系统

    开源商城Jshop的后台多页签功能

    开源商城Jshop的后台多页签功能,请按文件中操作说明操作,做好备份。

    小程序商城 Jshop

    功能介绍 商品管理,单规格、多规格商品管理,品牌、分类管理、商品评价 订单管理,订单支付、发货、取消、售后等 会员管理,会员列表,消息管理等 运营管理,广告管理、文章管理 微信管理,小程序管理、微信公众号...

    sdywcd-ostocy-jshop(在线商城程序)

    sdywcd-ostocy-jshop 是Android平台下的在线商城程序,内有详细介绍!

    电商项目-jshop.zip

    电商项目-jshop

    Jshop小程序商城基于Thinkphp5.1框架开发

    并且Jshop小程序商城上手难度低,可大量节省定制化开发周期。 前台使用uni-app开发,适配性多,在页面的打开和渲染效率上更快,下单流程流畅自然,可大大增加用户体验,提升订单量。 强大的促销引擎,多种促销方式...

    关于ostocy-jshop系统的商品体系结构说明文档

    NULL 博文链接:https://sdywcd.iteye.com/blog/1617013

    jshop3完美的界面

    jshop3完美的界面

    JSHOP2.tar.gz

    文件中包含的是HTN规划器JSHOP2源码,用于配置JSHOP2环境,详细的教程请参考个人博客内容,JSHOP2环境配置

    jshop2任务规划

    主要是有关jshop2的介绍以及使用的一篇文档,因为使用jshop2的人不是很多,所以资源找起来相对比较困难,这是我看jshop2主要的文档信息,很有用

    Jshop小程序商城-PHP

    并且Jshop小程序商城上手难度低,可大量节省定制化开发周期。 前台H5使用Vue开发,在页面的打开和渲染效率上更快,下单流程流畅自然,可大大增加用户体验,提升订单量。 强大的促销引擎,多种促销方式自由搭配,满足...

    JSHOP2.zip

    附带make.bat文件,并做了自己的修改。可以直接运行bat文件,添加环境变量即可exe中运行。详细配置过程见我的一篇博客《JSHOP2的环境配置——详细教程(原创)》中

    JSHOP2规划器下载

    JSHOP2_1.0.3规划器下载,最新版

    jshoperv2:欧斯塔克在线商城系统

    ostocy-jshop ostocy-jshop已经更称为jshoper3x 请大家关注新版jshoper3x地址 ostocy-jshop的功能会陆续移植到jshoper3x中 欧斯塔克在线商城系统 基于java技术开发有如下特性: 1,使用spring + hibernate + ...

    JSHOP2GUI_1.0.1.zip

    JSHOP2为SHOP的Java版本,智能规划系统,可用于服务任务规划

    jshop源码jshop源码

    Jeeshop独立网店系统(B2C)jar包齐全,可运行,欢迎各位热爱java的朋友学习spring,Mybatis,Framemaker,bootStrap

    【Jshop小程序商城 v2.4.0】开源电商系统+一套前端代码发布多个平台+五端合一

    并且Jshop小程序商城上手难度低,可大量节省定制化开发周期。 前台H5使用Vue开发,在页面的打开和渲染效率上更快,下单流程流畅自然,可大大增加用户体验,提升订单量。 强大的促销引擎,多种促销方式自由搭配,满足...

Global site tag (gtag.js) - Google Analytics