MyBatis Generator插件之SerializablePlugin
org.mybatis.generator.plugins.SerializablePlugin
在generatorConfig.xml中加上配置:
- <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
运行MBG,生成Userinfo类,我们发现和不加SerializablePlugin插件之前生成的类相比较区别如下:
- public class Userinfo implements Serializable {
- ......
- private static final long serialVersionUID = 1L;
- ......
- }
public class Userinfo implements Serializable {
......
private static final long serialVersionUID = 1L;
......
}
区别1:实现了Serializable接口
区别2:增加了private static final long serialVersionUID = 1L;
下面我们看SerializablePlugin的代码:
1.
- public class SerializablePlugin extends PluginAdapter
public class SerializablePlugin extends PluginAdapter
继承PluginAdapter;
2.
- 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$ 实例化
- }
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.
- public boolean validate(List<String> warnings) {
- // this plugin is always valid
- return true;
- }
public boolean validate(List<String> warnings) {
// this plugin is always valid
return true;
}</pre>不需要参数,所以直接返回true
4.
- @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 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.
- @Override
- public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
- IntrospectedTable introspectedTable) {
- makeSerializable(topLevelClass, introspectedTable);
- return true;
- }
@Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable) {
makeSerializable(topLevelClass, introspectedTable);
return true;
}</pre>调用了makeSerializable方法给BaeRecordClass添加序列化接口
6.
- @Override
- public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass,
- IntrospectedTable introspectedTable) {
- makeSerializable(topLevelClass, introspectedTable);
- return true;
- }
@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.
- @Override
- public boolean modelRecordWithBLOBsClassGenerated(
- TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
- makeSerializable(topLevelClass, introspectedTable);
- return true;
- }
@Override
public boolean modelRecordWithBLOBsClassGenerated(
TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
makeSerializable(topLevelClass, introspectedTable);
return true;
}
调用了makeSerializable方法给RecordWithBLOBsClass添加序列化接口
8.接下来看看具体的实现方法
- 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); //生成注解
- n style="white-space:pre;"> </span>
- //把拼装好的方法DOM添加到topLevelClass中,完成接口的实现和字段的添加
- topLevelClass.addField(field);
- }
- }
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的更多相关文章
- Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数 (转)
众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页. ...
- Myeclipse2014添加mybatis generator插件
Myeclipse2014把mybatis generator插件直接放在dropins文件夹下,重启后不能成功安装mybatis插件. 既然离线安装不成功,可以选择在线安装 1.选择 Help-&g ...
- mybatis generator 插件安装及使用
现在Mybatis特别火,但是在开发中却要经常写实体类和配置文件,会不会特别烦人,所以可以利用Mybatis的代码生成插件来生成这部分代码: 1,打开eclipse,点击Help>Softwar ...
- Eclipse 使用mybatis generator插件自动生成代码
Eclipse 使用mybatis generator插件自动生成代码 标签: mybatis 2016-12-07 15:10 5247人阅读 评论(0) 收藏 举报 .embody{ paddin ...
- Eclipse MyBatis Generator插件安装
目录 Eclipse MyBatis Generator插件安装 Eclipse MyBatis Generator插件安装 1.进入Eclipse Marketplace [Help] -> ...
- Mybatis-Generator_学习_02_使用Mapper专用的MyBatis Generator插件
源码见:https://github.com/shirayner/tk-mybatis-generator 一.要点 二.具体实现 1.项目结构 2.配置 pm.xml <?xml versio ...
- Mybatis Generator插件和PageHelper使用
最近,开始接触web项目开发,项目使用springboot和mybatis,以前一直以为开发过程中实体类,mybatis的xml文件都需要自己手动的去创建. 同事推荐说Mybatis Generato ...
- mybatis generator插件系列--分页插件
1.首先定义分页插件 MysqlPagePlugin.java package com.demo.mybatis.plugin; import org.mybatis.generator.api.Co ...
- mybatis generator插件系列--lombok插件 (减少百分之九十bean代码)
经常使用mybatis generator生成代码的你 有没有因为生成的getter/setter而烦恼呢? 有没有生成后又手动加toString/hashCode/Equals方法呢? 有没有改一个 ...
随机推荐
- 最简单的基于FFmpeg的移动端例子:Android 视频转码器
http://blog.csdn.net/leixiaohua1020/article/details/47056365
- 用了Redis里面的map和set
map的操作用 hset,hget等 set的操作有 sadd sismember等 参考下面: http://blog.csdn.net/kwsy2008/article/details/48467 ...
- 【UWP通用应用开发】控件、应用栏
控件的属性.事件与样式资源 怎样加入控件 加入控件的方式有多种,大家更喜欢以下哪一种呢? 1)使用诸如Blend for Visual Studio或Microsoft Visual Studio X ...
- 停止使用域名 boypay.net
停止使用域名 boypay.net boypay.net 这个域名当时注册的时候打算开发网店--" 情侣商城",表面意思是 "男生支付",情侣和婚姻是人生中必须 ...
- 购买VPS时机房的选择
购买VPS时机房的选择 对于配置差不多的VPS,距离越近的一般网速越快,所以有必要使用谷歌地图,查看城市的所在位置 比如ChicagoVPS,不时有邮件销售它的VPS,虽然说不上怎么好,但是一般的使用 ...
- 关于搭建Session服务器(转载)
Session服务器配置指南与使用经验 一.摘要 所有Web程序都会使用Session保存数据. 使用独立的Session服务器可以解决负载均衡场景中的Session共享问题.本文介绍.NET平台下建 ...
- 【LightOJ - 1205】Palindromic Numbers
[链接]https://cn.vjudge.net/problem/LightOJ-1205 [题意] 求出L..R范围内的回文个数 [题解] 数位DP; 先求出1..x里面的回文串个数.则做一下前缀 ...
- 上传excel数据到数据库中
上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../up ...
- asp.net 查询sql数据表的网页模板
最近因为工作需求,要制作一个网页模板,主要是用于快速开发,可以查询Sql数据表信息的模板, 昨天做好了,这个只是一个Demo,但是功能已经齐全了, 开发新的网站时,需要新增一个xml,复制粘贴网页的前 ...
- 《ASP.NET》数据绑定—DropDownList、ListBox
DropDownList和ListBox实现两级联动功能.他们也能够将从后台数据库中搜选的出来的信息加以绑定.这里要实现的功能是在DropDownList中选择"省",然后让Lis ...