`
dinguangx
  • 浏览: 244846 次
  • 性别: 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项目的最新、最完整的源代码和资源,可能包括了前端界面、后端服务、数据库脚本、配置文件、测试用例等所有必要的组成部分,使得开发者能够直接进行编译、运行和定制。 【标签】"jshop...

    jshop-mall-master.zip

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

    Jshop B2C商城系统

    1. 技术栈选择:Jshop采用的技术栈主要包括SpringMVC、MyBatis、MySQL、Redis、JavaScript等,这些技术都是目前Web开发中的主流选择,具有广泛的支持和成熟的社区。 2. 分层架构:Jshop遵循经典的三层架构设计,...

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

    - "sdywcd-ostocy-jshop-a816fd9"可能代表项目的版本号或者Git提交ID,这通常用于版本控制和代码管理。 - 这个文件可能是源代码包,包含了项目的各个模块和资源文件,如XML布局文件、Java或Kotlin源码、图片、样式...

    京东JSHOP右侧悬浮

    ### 京东JSHOP右侧悬浮知识点解析 #### 一、悬浮技术概述 悬浮技术是指网页元素在用户滚动页面时保持相对固定位置的一种前端技术。通过CSS样式中的`position`属性配合`fixed`值来实现,使得特定元素能够在浏览器...

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

    开源商城Jshop是一款深受开发者喜爱的电子商务平台,其强大的功能和灵活的可定制性使得它在众多开源商城系统中脱颖而出。在Jshop的后台管理界面,多页签功能是一项非常实用的设计,它允许管理员在同一浏览器窗口内...

    小程序商城 Jshop

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

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

    《ostocy-jshop系统商品体系结构详解》 在IT行业中,构建一个高效、灵活的商品管理系统是电子商务平台的核心任务之一。ostocy-jshop系统作为一个专业的电商解决方案,其商品体系结构设计至关重要。本文将深入探讨该...

    jshop2任务规划

    JSHOP2是一种基于Java语言的高级规划系统,它是SHOP2(Simple Hierarchical Ordered Planner)的一个实现版本。SHOP2以及其前身SHOP的算法最初是由Dana S. Nau教授设计的,并由SHOP研究小组进行实现、维护和更新。要...

    JSHOP2.tar.gz

    这个压缩包“JSHOP2.tar.gz”包含了JSHOP2的源代码,使得用户可以深入理解其工作原理,同时也方便进行定制化开发或教学研究。 HTN规划是一种高级的规划方法,它扩展了经典的离散事件规划模型。HTN规划器如JSHOP2将...

    电商项目-jshop.zip

    在“jshop-master”目录下,前端代码可能分布在诸如“static”或“public”这样的文件夹中,包含各种资源文件如图片、字体和样式表,以及用于交互的JavaScript脚本。 2. **后台管理系统**:后台通常包括管理员登录...

    JSHOP2.zip

    **JSHOP2规划器与HTN任务分解技术详解** JSHOP2是一款开源的基于规划的推理引擎,专门用于解决复杂的任务规划问题。它采用了高级任务网络(HTN)方法,这是一种将任务分解为子任务的高级规划技术。HTN规划器能够...

    JSHOP2规划器下载

    - **模块化设计**:JSHOP2采用模块化设计,包括解析器、计划生成器和执行器等组件,各部分独立且可替换,方便进行定制和优化。 - **层次化表示**:状态、操作和情况的层次结构有助于解决复杂问题,同时减少规划时间...

    jshop3完美的界面

    【jshop3完美的界面】是基于Java技术的电商系统,其设计目标是提供一个美观、易用且功能全面的在线商店平台。...通过深入理解并运用这些知识点,开发者可以进一步完善和定制jshop3,满足特定的商业需求。

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

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

    JSHOP2资源,可以直接运行的版本。

    这个资源包提供了完整的JSHOP2源代码,让开发者能够深入了解其内部工作原理,并进行定制化开发。在描述中提到,该压缩包内含了可以直接运行的版本,这对于初学者和研究人员来说非常便利,他们无需从头构建环境,可以...

    JSHOP2GUI_1.0.1.zip

    《JSHOP2GUI_1.0.1:Java实现的智能服务任务规划系统》 JSHOP2GUI_1.0.1.zip是一个压缩包,它包含的是JSHOP2的图形用户界面版本,这是一个基于Java的智能规划系统,专门用于服务任务规划。在深入探讨这个系统之前,...

    Jshop小程序商城-PHP

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

    Jshop小程序商城 v3.1.0.zip

    在IT行业中,源码源代码是开发人员进行软件开发的基础,它们是程序的语言表述,可以被程序员理解和修改,以满足特定需求或定制化服务。 毕业设计论文常常会引用这样的系统作为研究或实践项目,学生可以通过分析和...

    Jshop短信插件_小程序商城短信接口开发_B2B商城短信发送设置

    Jshop短信插件是针对B2B商城设计的一款专门用于短信接口开发和管理的工具,它旨在提升用户体验,增强商家与用户之间的沟通效率,同时确保交易过程的安全性。下面我们将详细探讨Jshop短信插件的核心功能、开发过程...

Global site tag (gtag.js) - Google Analytics