org.mybatis.generator.plugins.SerializablePlugin

在generatorConfig.xml中加上配置:

  1. <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

运行MBG,生成Userinfo类,我们发现和不加SerializablePlugin插件之前生成的类相比较区别如下:


  1. public class Userinfo implements Serializable {
  2. ......
  3. private static final long serialVersionUID = 1L;
  4. ......
  5. }
public class Userinfo implements Serializable {
......
private static final long serialVersionUID = 1L;
......

}

区别1:实现了Serializable接口

区别2:增加了private static final long serialVersionUID = 1L;

下面我们看SerializablePlugin的代码:
1.

  1. public class SerializablePlugin extends PluginAdapter
public class SerializablePlugin extends PluginAdapter

继承PluginAdapter;

2.

  1. private FullyQualifiedJavaType serializable;    //对应java.io.Serializable的java类型
  2. private FullyQualifiedJavaType gwtSerializable; //对应com.google.gwt.user.client.rpc.IsSerializable的java类型
  3. private boolean addGWTInterface;                //是否实现com.google.gwt.user.client.rpc.IsSerializable接口
  4. private boolean suppressJavaInterface;          //是否实现java.io.Serializable接口
  5. public SerializablePlugin() {
  6. super();
  7. serializable = new FullyQualifiedJavaType("java.io.Serializable"); //$NON-NLS-1$   实例化
  8. gwtSerializable = new FullyQualifiedJavaType("com.google.gwt.user.client.rpc.IsSerializable"); //$NON-NLS-1$  实例化
  9. }
private FullyQualifiedJavaType serializable;    //对应java.io.Serializable的java类型
private FullyQualifiedJavaType gwtSerializable; //对应com.google.gwt.user.client.rpc.IsSerializable的java类型
private boolean addGWTInterface; //是否实现com.google.gwt.user.client.rpc.IsSerializable接口
private boolean suppressJavaInterface; //是否实现java.io.Serializable接口 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$ 实例化

}

成员变量和构造方法,详细看代码注释。

3.

  1. public boolean validate(List<String> warnings) {
  2. // this plugin is always valid
  3. return true;
  4. }
    public boolean validate(List<String> warnings) {
    // this plugin is always valid
return true;
}</pre>不需要参数,所以直接返回true

4.

  1. @Override
  2. public void setProperties(Properties properties) {
  3. super.setProperties(properties);
  4. addGWTInterface = Boolean.valueOf(properties.getProperty("addGWTInterface")); //$NON-NLS-1$
  5. suppressJavaInterface = Boolean.valueOf(properties.getProperty("suppressJavaInterface")); //$NON-NLS-1$
  6. }
    @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$
}</pre>获取addGWTInterface 和 suppressJavaInterface参数,给成员变量赋值。

5.

  1. @Override
  2. public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
  3. IntrospectedTable introspectedTable) {
  4. makeSerializable(topLevelClass, introspectedTable);
  5. return true;
  6. }
    @Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable) {
makeSerializable(topLevelClass, introspectedTable);
return true;
}</pre>调用了makeSerializable方法给BaeRecordClass添加序列化接口

6.

  1. @Override
  2. public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass,
  3. IntrospectedTable introspectedTable) {
  4. makeSerializable(topLevelClass, introspectedTable);
  5. return true;
  6. }
    @Override
public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable) {
makeSerializable(topLevelClass, introspectedTable);
return true;
}</pre><pre style="background-color:rgb(255,255,255);font-family:'宋体';">调用了makeSerializable方法给PrimaryKeyClass添加序列化接口
7.

  1. @Override
  2. public boolean modelRecordWithBLOBsClassGenerated(
  3. TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
  4. makeSerializable(topLevelClass, introspectedTable);
  5. return true;
  6. }
    @Override
public boolean modelRecordWithBLOBsClassGenerated(
TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
makeSerializable(topLevelClass, introspectedTable);
return true;
}
调用了makeSerializable方法给RecordWithBLOBsClass添加序列化接口

8.接下来看看具体的实现方法


  1. protected void makeSerializable(TopLevelClass topLevelClass,
  2. IntrospectedTable introspectedTable) {
  3. if (addGWTInterface) {  //是否要实现com.google.gwt.user.client.rpc.IsSerializable接口
  4. topLevelClass.addImportedType(gwtSerializable); //import com.google.gwt.user.client.rpc.IsSerializable;
  5. topLevelClass.addSuperInterface(gwtSerializable);//实现接口
  6. }
  7. if (!suppressJavaInterface) { //不禁止实现java.io.Serializable
  8. topLevelClass.addImportedType(serializable);  //import java.io.Serializable;
  9. topLevelClass.addSuperInterface(serializable); //实现java.io.Serializable接口
  10. //添加serialVersionUID字段
  11. //最终生成代码private static final long serialVersionUID = 1L;
  12. Field field = new Field();
  13. field.setFinal(true);  //添加final修饰
  14. field.setInitializationString("1L"); //$NON-NLS-1$  赋值为1L
  15. field.setName("serialVersionUID"); //$NON-NLS-1$   设置字段名称为serialVersionUID
  16. field.setStatic(true); //添加static关键字
  17. field.setType(new FullyQualifiedJavaType("long")); //$NON-NLS-1$  声明类型
  18. field.setVisibility(JavaVisibility.PRIVATE);  //声明为私有
  19. context.getCommentGenerator().addFieldComment(field, introspectedTable);  //生成注解
  20. n style="white-space:pre;">     </span>
  21. //把拼装好的方法DOM添加到topLevelClass中,完成接口的实现和字段的添加
  22. topLevelClass.addField(field);
  23. }
  24. }
    protected void makeSerializable(TopLevelClass topLevelClass,
        IntrospectedTable introspectedTable) {
if (addGWTInterface) { //是否要实现com.google.gwt.user.client.rpc.IsSerializable接口
topLevelClass.addImportedType(gwtSerializable); //import com.google.gwt.user.client.rpc.IsSerializable;
topLevelClass.addSuperInterface(gwtSerializable);//实现接口
} if (!suppressJavaInterface) { //不禁止实现java.io.Serializable
topLevelClass.addImportedType(serializable); //import java.io.Serializable;
topLevelClass.addSuperInterface(serializable); //实现java.io.Serializable接口 //添加serialVersionUID字段
//最终生成代码private static final long serialVersionUID = 1L;
Field field = new Field();
field.setFinal(true); //添加final修饰
field.setInitializationString("1L"); //$NON-NLS-1$ 赋值为1L
field.setName("serialVersionUID"); //$NON-NLS-1$ 设置字段名称为serialVersionUID
field.setStatic(true); //添加static关键字
field.setType(new FullyQualifiedJavaType("long")); //$NON-NLS-1$ 声明类型
field.setVisibility(JavaVisibility.PRIVATE); //声明为私有
context.getCommentGenerator().addFieldComment(field, introspectedTable); //生成注解

//把拼装好的方法DOM添加到topLevelClass中,完成接口的实现和字段的添加

topLevelClass.addField(field);

}

}





                </div>

MyBatis Generator插件之SerializablePlugin的更多相关文章

  1. Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数 (转)

    众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页. ...

  2. Myeclipse2014添加mybatis generator插件

    Myeclipse2014把mybatis generator插件直接放在dropins文件夹下,重启后不能成功安装mybatis插件. 既然离线安装不成功,可以选择在线安装 1.选择 Help-&g ...

  3. mybatis generator 插件安装及使用

    现在Mybatis特别火,但是在开发中却要经常写实体类和配置文件,会不会特别烦人,所以可以利用Mybatis的代码生成插件来生成这部分代码: 1,打开eclipse,点击Help>Softwar ...

  4. Eclipse 使用mybatis generator插件自动生成代码

    Eclipse 使用mybatis generator插件自动生成代码 标签: mybatis 2016-12-07 15:10 5247人阅读 评论(0) 收藏 举报 .embody{ paddin ...

  5. Eclipse MyBatis Generator插件安装

    目录 Eclipse MyBatis Generator插件安装 Eclipse MyBatis Generator插件安装 1.进入Eclipse Marketplace [Help] -> ...

  6. Mybatis-Generator_学习_02_使用Mapper专用的MyBatis Generator插件

    源码见:https://github.com/shirayner/tk-mybatis-generator 一.要点 二.具体实现 1.项目结构 2.配置 pm.xml <?xml versio ...

  7. Mybatis Generator插件和PageHelper使用

    最近,开始接触web项目开发,项目使用springboot和mybatis,以前一直以为开发过程中实体类,mybatis的xml文件都需要自己手动的去创建. 同事推荐说Mybatis Generato ...

  8. mybatis generator插件系列--分页插件

    1.首先定义分页插件 MysqlPagePlugin.java package com.demo.mybatis.plugin; import org.mybatis.generator.api.Co ...

  9. mybatis generator插件系列--lombok插件 (减少百分之九十bean代码)

    经常使用mybatis generator生成代码的你 有没有因为生成的getter/setter而烦恼呢? 有没有生成后又手动加toString/hashCode/Equals方法呢? 有没有改一个 ...

随机推荐

  1. View_01_LayoutInflater的原理、使用方法

    View_01_LayoutInflater的原理.使用方法 本篇博客是郭神博客Android视图状态及重绘流程分析,带你一步步深入了解View(一)的读书笔记的笔记. LayoutInflater简 ...

  2. Spring有用功能--Profile、WebService、缓存、消息、ORM

    本篇介绍一些Spring与其它框架结合的有用功能,包含:Apache CXF WebService框架.Redis缓存.RabbitMQ消息.MyBatis框架. 另外对于Profile,也是Spri ...

  3. 【项目基础】容器、AOP理论篇

    一.容器(砂锅) 1.概念: 容器是应用server中位于组件和平台之间的接口集合 2.应用: 容器一般位于应用server之内,由应用server负责载入和维护.一个容器仅仅能存在于一个应用serv ...

  4. Elasticsearch中JAVA API的使用

    1.Elasticsearch中Java API的简介 Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等. 通过添加jar包,不需要编写HTTP层的代码就可以开始 ...

  5. screen-Orientation 横竖屏设置

    1.xml中设置,这个主要是在AndroidManifest.xml 中查找activity,然后在里面设置属性,如下 <application android:label="@str ...

  6. 10.查看npm安装信息和版本号

    转自:http://www.runoob.com/nodejs/nodejs-express-framework.html 你可以使用以下命令来查看所有全局安装的模块: $ npm list -g ├ ...

  7. 4.使用 WSDL 指定的标准 SOAP 消息格式

    转自:https://technet.microsoft.com/zh-cn/sysinternals/x2ccke44(v=vs.94) 为 XML 文档(定义 Web 服务)定义架构的行业标准 W ...

  8. sql跳过非工作日(周末和节假日)

    简介:场景1:基于开始日期和工期,推算结束日期. 场景2:基于开始日期和结束日期,计算工期 注:需要自己做界面维护工作日表(s_WorkDay)和节假日表(s_SpecialDay) 涉及到的数据表 ...

  9. linux创建新用户并给予root权限

    root比windows的系统管理员的能力更大,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用.所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机.所以,在 ...

  10. Java 函数的参数说

    java函数参数传递的到底是值还是引用对确实容易让人迷糊.而很多时候因为对这个问题的模糊甚至造成一些错误.最常见的说法是基本类型传的是值,对象传的引用.对于基本类型,大家都达成共识,没有什么可以争论的 ...