文档章节

mybatis-generator 插件扩展,序列化针对 实体类(model)、 example类

alexgaoyh
 alexgaoyh
发布于 2015/11/12 11:47
字数 502
阅读 4270
收藏 6

    MyBatis Generator生成DAO 的时候,生成的类都是没有序列化的,查看源码,Mybatis Generator 默认提供的是有序列化插件的,但是这个插件是仅仅针对model类生成的,针对 Example 类是没有这个插件扩展功能的;

    如果我们的环境是分布式环境开发的话,这个 Example 也是需要序列化的,故扩展这个插件,使他不仅仅针对model 类,同样针对 Example 类;

    http://git.oschina.net/alexgaoyh/MutiModule-parent/blob/master/MutiModule-common/src/main/java/com/MutiModule/common/mybatis/plugin/serializable/SerializablePlugin.java/?dir=0&filepath=MutiModule-common/src/main/java/com/MutiModule/common/mybatis/plugin/serializable/SerializablePlugin.java&oid=a36d7cc2d1d4ce40fa1ddffbfdc7653b7be7e2ae&sha=377ef54737b723905ff27aeaf6442503b82409a0

package com.MutiModule.common.mybatis.plugin.serializable;

import org.mybatis.generator.api.IntrospectedTable;  
import org.mybatis.generator.api.PluginAdapter;  
import org.mybatis.generator.api.dom.java.*;  
  
import java.util.List;  
import java.util.Properties;  

/**
 * 分布式开发的话,Example对象也必须要序列化
 * 扩展一个 mybatis generator 插件,用于不仅仅在生成的实体类 还有 *Example 类都序列化
 * @author alexgaoyh
 *
 */
public class SerializablePlugin extends PluginAdapter {  
  
    private FullyQualifiedJavaType serializable;  
    private FullyQualifiedJavaType gwtSerializable;  
    private boolean addGWTInterface;  
    private boolean suppressJavaInterface;  
  
    public SerializablePlugin() {  
        super();  
        serializable = new FullyQualifiedJavaType("java.io.Serializable"); //$NON-NLS-1$  
        gwtSerializable = new FullyQualifiedJavaType("com.google.gwt.user.client.rpc.IsSerializable"); //$NON-NLS-1$  
    }  
  
    public boolean validate(List<String> warnings) {  
        // this plugin is always valid  
        return true;  
    }  
  
    @Override  
    public void setProperties(Properties properties) {  
        super.setProperties(properties);  
        addGWTInterface = Boolean.valueOf(properties.getProperty("addGWTInterface")); //$NON-NLS-1$  
        suppressJavaInterface = Boolean.valueOf(properties.getProperty("suppressJavaInterface")); //$NON-NLS-1$  
    }  
  
    @Override  
    public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,  
                                                 IntrospectedTable introspectedTable) {  
        makeSerializable(topLevelClass, introspectedTable);  
        return true;  
    }  
  
    @Override  
    public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass,  
                                                 IntrospectedTable introspectedTable) {  
        makeSerializable(topLevelClass, introspectedTable);  
        return true;  
    }  
  
    @Override  
    public boolean modelRecordWithBLOBsClassGenerated(  
            TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {  
        makeSerializable(topLevelClass, introspectedTable);  
        return true;  
    }  
  
    /** 
     * 添加给Example类序列化的方法 
     * @param topLevelClass 
     * @param introspectedTable 
     * @return 
     */  
    @Override  
    public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,IntrospectedTable introspectedTable){  
        makeSerializable(topLevelClass, introspectedTable);  
  
        for (InnerClass innerClass : topLevelClass.getInnerClasses()) {  
            if ("GeneratedCriteria".equals(innerClass.getType().getShortName())) { //$NON-NLS-1$  
                innerClass.addSuperInterface(serializable);  
            }  
            if ("Criteria".equals(innerClass.getType().getShortName())) { //$NON-NLS-1$  
                innerClass.addSuperInterface(serializable);  
            }  
            if ("Criterion".equals(innerClass.getType().getShortName())) { //$NON-NLS-1$  
                innerClass.addSuperInterface(serializable);  
            }  
        }  
  
        return true;  
    }  
  
    protected void makeSerializable(TopLevelClass topLevelClass,  
                                    IntrospectedTable introspectedTable) {  
        if (addGWTInterface) {  
            topLevelClass.addImportedType(gwtSerializable);  
            topLevelClass.addSuperInterface(gwtSerializable);  
        }  
  
        if (!suppressJavaInterface) {  
            topLevelClass.addImportedType(serializable);  
            topLevelClass.addSuperInterface(serializable);  
  
            Field field = new Field();  
            field.setFinal(true);  
            field.setInitializationString("1L"); //$NON-NLS-1$  
            field.setName("serialVersionUID"); //$NON-NLS-1$  
            field.setStatic(true);  
            field.setType(new FullyQualifiedJavaType("long")); //$NON-NLS-1$  
            field.setVisibility(JavaVisibility.PRIVATE);  
            context.getCommentGenerator().addFieldComment(field, introspectedTable);  
  
            topLevelClass.addField(field);  
        }  
    }  
}




© 著作权归作者所有

共有 人打赏支持
alexgaoyh

alexgaoyh

粉丝 76
博文 82
码字总数 65212
作品 1
郑州
后端工程师
私信 提问
加载中

评论(2)

1
1160068538
插件怎么配置到逆向工程?
i
itxx2016
呵呵,这个已经out了.
推荐国内[最著名]的mybatis代码生成网站 --- fwjava.com
使用MyBatis Generator自动生成代码

本文给出一个在Maven工程中,使用MyBatis Generator代码生成工具生成代码的示例。 自动生成的文件有如下几个部分: Dao (Mapper) Entity 以及 Entity对应的Example XML 环境准备 数据库表 创...

王孟君
2016/11/08
649
0
mybatis-genarator 自定义插件

http://git.oschina.net/alexgaoyh/MutiModule-parent 一些自定义的mybatis-generator 代码生成器部分的插件: 1、自定义的序列化 类文件 插件 ; 2、mysql oracle 两种数据源的分页配置插件...

alexgaoyh
2016/06/29
2K
1
Mybatis 通用 Mapper 2.1.0 发布

Mybatis通用Mapper 极其方便的使用Mybatis单表的增删改查 本项目支持两种类型的通用Mapper,这两种Mapper都可以极大的方便开发人员。 为了让您更方便的了解这两种通用Mapper,这里分别贴一段...

Liuzh_533
2015/03/09
4.5K
7
MyBatis Eclipse插件安装

MyBatis Eclipse插件安装 1在线安装generator插件 2离线安装generator插件 3generator调用 MyBatis Generator中文文档 MyBatis Generator中文文档 运行MyBatis Generator XML配置详解 genera...

hapier
2016/12/20
145
0
数据库逆向框架代码生成工具:MyBatis Generator的使用

MyBatis Generator的详细介绍http://mybatis.github.io/generator/index.html MyBatis Generator With Maven http://mybatis.github.io/generator/running/runningWithMaven.html 1前言 前段......

蛙牛
2014/02/16
0
28

没有更多内容

加载失败,请刷新页面

加载更多

树形结构的数据库表Schema设计

程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数...

太菜鸟
9分钟前
0
0
Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用...

迷你芊宝宝
18分钟前
0
0
使用maven命令上传jar包到仓库

mvn deploy:deploy-file -DgroupId=com.jz.tss.service -DartifactId=tss-service -Dversion=1.9.02-SNAPSHOT -Dfile=E:/Workspace/tss-service/build/oracle/TSS-Service/WEB-INF/lib/TSS-S......

GodIsCj
19分钟前
0
0
mysql 向下无限递归(不使用函数,单纯sql)

表结构和数据 CREATE TABLE table1(id int, name varchar(10), parent_id int); INSERT table1 VALUES (1, 'Home', 0), (2, 'About', 1), (3, 'Contact', 1), (4, 'Legal', 2), ......

一雨成东
19分钟前
0
0
面试官问:ZooKeeper 一致性协议 ZAB 原理

一致性协议有很多种,比如 Paxos,Raft,2PC,3PC等等,今天我们讲一种协议,ZAB 协议,该协议应该是所有一致性协议中生产环境中应用最多的了。为什么呢?因为他是为 Zookeeper 设计的分布式...

Java爬坑之路
22分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部