MyBatis Generator生成DAO——序列化
2015-07-01 17:41
211 查看
MyBatis Generator生成DAO 的时候,生成的类都是没有序列化的。
还以为要手工添加(开始是手工添加的
),今天遇到分页的问题,才发现生成的时候可以添加插件。既然分页可以有插件,序列化是不是也有呢。
果然SerializablePlugin,已经给我们提供好了。
马上高端大气了起来。每个model对象都乖乖的带上了Serializable接口。
无奈只有model对象是不够的,做分布式开发的话,Example对象也必须要序列化。
于是下载了SerializablePlugin的源码,model可以有,Example肯定也可以有。不出所料稍作修改就加上了。(直接用原来的源码添加了自己的代码)
哇咔咔,太好用了。Example都加上了。
不过问题还没有完,Example里还有内部类,如果不序列化还是会报错。
这次明显更刚才的套路不一样了。没有抱太大希望。
无意间发现了另一个插件类,也是包里自带的。发现了宝藏,这里竟然有对内部类的操作。
把原来的方法再优化一下下。
哇咔咔,成功了。
还以为要手工添加(开始是手工添加的
),今天遇到分页的问题,才发现生成的时候可以添加插件。既然分页可以有插件,序列化是不是也有呢。
果然SerializablePlugin,已经给我们提供好了。
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
马上高端大气了起来。每个model对象都乖乖的带上了Serializable接口。
无奈只有model对象是不够的,做分布式开发的话,Example对象也必须要序列化。
于是下载了SerializablePlugin的源码,model可以有,Example肯定也可以有。不出所料稍作修改就加上了。(直接用原来的源码添加了自己的代码)
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; /** * Created by tiantao on 15-7-1. */ 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); 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); } } }
哇咔咔,太好用了。Example都加上了。
不过问题还没有完,Example里还有内部类,如果不序列化还是会报错。
这次明显更刚才的套路不一样了。没有抱太大希望。
无意间发现了另一个插件类,也是包里自带的。发现了宝藏,这里竟然有对内部类的操作。
import java.util.List; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; import org.mybatis.generator.api.dom.java.InnerClass; import org.mybatis.generator.api.dom.java.JavaVisibility; import org.mybatis.generator.api.dom.java.Method; import org.mybatis.generator.api.dom.java.Parameter; import org.mybatis.generator.api.dom.java.TopLevelClass; import org.mybatis.generator.codegen.ibatis2.Ibatis2FormattingUtilities; /** * This plugin demonstrates adding methods to the example class to enable * case-insensitive LIKE searches. It shows hows to construct new methods and * add them to an existing class. * * This plugin only adds methods for String fields mapped to a JDBC character * type (CHAR, VARCHAR, etc.) * * @author Jeff Butler * */ public class CaseInsensitiveLikePlugin extends PluginAdapter { /** * */ public CaseInsensitiveLikePlugin() { super(); } public boolean validate(List<String> warnings) { return true; } @Override public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { InnerClass criteria = null; // first, find the Criteria inner class for (InnerClass innerClass : topLevelClass.getInnerClasses()) { if ("GeneratedCriteria".equals(innerClass.getType().getShortName())) { //$NON-NLS-1$ criteria = innerClass; break; } } if (criteria == null) { // can't find the inner class for some reason, bail out. return true; } for (IntrospectedColumn introspectedColumn : introspectedTable .getNonBLOBColumns()) { if (!introspectedColumn.isJdbcCharacterColumn() || !introspectedColumn.isStringColumn()) { continue; } Method method = new Method(); method.setVisibility(JavaVisibility.PUBLIC); method.addParameter(new Parameter(introspectedColumn .getFullyQualifiedJavaType(), "value")); //$NON-NLS-1$ StringBuilder sb = new StringBuilder(); sb.append(introspectedColumn.getJavaProperty()); sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); sb.insert(0, "and"); //$NON-NLS-1$ sb.append("LikeInsensitive"); //$NON-NLS-1$ method.setName(sb.toString()); method.setReturnType(FullyQualifiedJavaType.getCriteriaInstance()); sb.setLength(0); sb.append("addCriterion(\"upper("); //$NON-NLS-1$ sb.append(Ibatis2FormattingUtilities .getAliasedActualColumnName(introspectedColumn)); sb.append(") like\", value.toUpperCase(), \""); //$NON-NLS-1$ sb.append(introspectedColumn.getJavaProperty()); sb.append("\");"); //$NON-NLS-1$ method.addBodyLine(sb.toString()); method.addBodyLine("return (Criteria) this;"); //$NON-NLS-1$ criteria.addMethod(method); } return true; } }
把原来的方法再优化一下下。
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; /** * Created by tiantao on 15-7-1. */ 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); } } }
哇咔咔,成功了。
相关文章推荐
- uil的简单常用操作
- UIDatePicker获取时间
- 请求转发与重定向的区别
- Android消息推送
- 孵化器的一些简单理解
- C# 中的扩展方法
- python编程之bomb catcher 小游戏
- Android GPS学习笔记—LMS初始化
- [Objective-C] 使用Category给类添加private方法
- [转载]Linux 性能监控、测试、优化工具
- 登陆mysql时出现unknown variable 'character_set_client=UTF8' 的错误
- 织梦调用指定栏目名称
- 2种方法解决mysql主从不同步 .
- MySQL保存jpg图片 测试通过
- 2种方法解决mysql主从不同步 .
- Android中的颜色使用
- vs2010 mfc 添加下拉菜单
- 2014年年终总结——获得集团优秀员工称号的心得体会
- SAP EXCEL OLE常用方法和属性+例子
- TortoiseGit连接github不用每次输入用户名和密码的方法