Generator 插件开发:
完整实例:http://download.csdn.net/detail/ht_00001/9514922
1 继承:org.mybatis.generator.api.PluginAdapter;
public class RepositoryPlugin extends PluginAdapter{}
2 对DAO类的修改:
重写:
public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(
IntrospectedTable introspectedTable);
3 复写创建DAO类
继承:org.mybatis.generator.codegen.AbstractJavaGenerator
public class RepositoryJavaGenerator extends AbstractJavaGenerator{}
重写:
public List<CompilationUnit> getCompilationUnits(){}
新创建DAO类
Interface inter =new Interface(new FullyQualifiedJavaType(String className));
设置类的修饰符
inter.setVisibility(JavaVisibility.PUBLIC);//public 属性
导入包
inter.addImportedType(new FullyQualifiedJavaType(String importName))
或
inter.addImportedType(String importName)
继承接口
inter.addSuperInterface(new FullyQualifiedJavaType(String fatherName))
实例:
package plugin; import java.util.ArrayList; import java.util.List; import org.mybatis.generator.api.dom.java.CompilationUnit; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; import org.mybatis.generator.api.dom.java.Interface; import org.mybatis.generator.api.dom.java.JavaVisibility; import org.mybatis.generator.codegen.AbstractJavaGenerator; public class RepositoryJavaGenerator extends AbstractJavaGenerator { @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public List<CompilationUnit> getCompilationUnits() { String pack = context.getProperty("repositoryTargetPackage"); FullyQualifiedJavaType type = new FullyQualifiedJavaType( new StringBuffer(pack).append("."). append(introspectedTable.getFullyQualifiedTable().getDomainObjectName()). append("Mapper").toString()); Interface inter = new Interface(type); inter.setVisibility(JavaVisibility.PUBLIC); inter.addImportedType(new FullyQualifiedJavaType (introspectedTable.getBaseRecordType())); inter.addSuperInterface(new FullyQualifiedJavaType( new StringBuffer("BaseRepository<"). append(introspectedTable.getFullyQualifiedTable().getDomainObjectName()). append(">").toString() )); List answer = new ArrayList(); answer.add(inter); return answer; } }
package plugin; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.mybatis.generator.api.GeneratedJavaFile; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.java.CompilationUnit; import org.mybatis.generator.api.dom.xml.Attribute; import org.mybatis.generator.api.dom.xml.Document; import org.mybatis.generator.api.dom.xml.XmlElement; public class RepositoryPlugin extends PluginAdapter { @Override public boolean validate(List<String> warnings) { return true; } /** * dao类 */ @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles( IntrospectedTable introspectedTable) { RepositoryJavaGenerator repository = new RepositoryJavaGenerator(); repository.setContext(context); repository.setIntrospectedTable(introspectedTable); List units = repository.getCompilationUnits(); List generatedFile = new ArrayList(); GeneratedJavaFile gif; for (Iterator iterator = units.iterator(); iterator.hasNext();generatedFile.add(gif)) { CompilationUnit unit = (CompilationUnit) iterator.next(); gif = new GeneratedJavaFile(unit,context.getJavaModelGeneratorConfiguration().getTargetProject(), context.getProperty("javaFileEncoding"),context.getJavaFormatter()); } return generatedFile; } }
4 获取generator.xml 中context的property属性值
context.getProperty("name")
5 获取实体类的全类名
introspectedTable.getBaseRecordType()
6 获取实体类的类名
introspectedTable.getFullyQualifiedTable().getDomainObjectName()
或者
context.getTableConfigurations().get(0).getDomainObjectName()//0表示第几张表的实体类
7 对XML修改:
重写:
public boolean sqlMapDocumentGenerated(Document document,
IntrospectedTable introspectedTable);
实例:
package plugin; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.mybatis.generator.api.GeneratedJavaFile; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.java.CompilationUnit; import org.mybatis.generator.api.dom.xml.Attribute; import org.mybatis.generator.api.dom.xml.Document; import org.mybatis.generator.api.dom.xml.XmlElement; public class RepositoryPlugin extends PluginAdapter { @Override public boolean validate(List<String> warnings) { return true; } /** * xml的命名空间定义 */ @Override public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) { String pack = context.getProperty("repositoryTargetPackage"); XmlElement rootElement = document.getRootElement(); rootElement.getAttributes().clear(); rootElement.addAttribute(new Attribute("namespace", new StringBuffer(pack).append("."). append(introspectedTable.getFullyQualifiedTable().getDomainObjectName()). append("Mapper").toString() )); return super.sqlMapDocumentGenerated(document, introspectedTable); } }
8 获取根节点
XmlElement rootElement = document.getRootElement()
9 添加属性
rootElement.addAttribute(new Attribute(String name, String value))
10 清除节点的所有属性
rootElement.getAttributes().clear();
11 新增节点
rootElement.addElement(XmlElement element)
12 新增SQL的文本信息
rootElement.addElement(TextElement element)
13 获取所有的表字段
List<IntrospectedColumn> list = introspectedTable.getAllColumns();
14 获取表名
introspectedTable.getFullyQualifiedTableNameAtRuntime()
15 获取主键
List<IntrospectedColumn> list = introspectedTable.getPrimaryKeyColumns();
16 获取表字段的名称
MyBatis3FormattingUtilities.getSelectListPhrase(IntrospectedColumn introspectedColumn)
分页查询实例:
package plugin; import java.util.Iterator; import java.util.List; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.xml.Attribute; import org.mybatis.generator.api.dom.xml.Document; import org.mybatis.generator.api.dom.xml.TextElement; import org.mybatis.generator.api.dom.xml.XmlElement; import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities; /** * mySql的分也查询 * @author huang_tao * */ public class SelectPagePlugin extends PluginAdapter { @Override public boolean validate(List<String> warnings) { return true; } @Override public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) { XmlElement rootElement = document.getRootElement(); XmlElement answer = new XmlElement("select"); answer.addAttribute(new Attribute("id","selectByPage")); answer.addAttribute(new Attribute("resultMap","BaseResultMap")); answer.addAttribute(new Attribute("parameterType", "java.lang.Integer")); StringBuffer sb = new StringBuffer(); Iterator<IntrospectedColumn> iter = introspectedTable.getAllColumns().iterator(); sb.append("select "); makeXmlElement(answer,sb); sb.append(" "); while(iter.hasNext()){ sb.append(" "+MyBatis3FormattingUtilities.getSelectListPhrase(iter.next())); if(iter.hasNext()){ sb.append(" ,"); } } makeXmlElement(answer,sb); sb.append("from "); makeXmlElement(answer,sb); sb.append(" "); sb.append(" "+introspectedTable.getFullyQualifiedTableNameAtRuntime()); makeXmlElement(answer,sb); sb.append("order by "); iter = introspectedTable.getPrimaryKeyColumns().iterator(); while(iter.hasNext()){ sb.append(" "+MyBatis3FormattingUtilities.getSelectListPhrase(iter.next())); if(iter.hasNext()){ sb.append(" ,"); } } makeXmlElement(answer,sb); sb.append("limit ").append("10 * (#{page,jdbcType=INTEGER}-1)"). append(" , ").append("10 * #{page,jdbcType=INTEGER}"); makeXmlElement(answer,sb); rootElement.addElement(answer); return super.sqlMapDocumentGenerated(document, introspectedTable); } private void makeXmlElement(XmlElement answer,StringBuffer sb){ if(sb.length()>0){ answer.addElement(new TextElement(sb.toString())); sb.setLength(0); } } }
17 对实体类的修改
重写
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable)
添加修饰符
context.getCommentGenerator().addFieldComment(Field file,
IntrospectedTable introspectedTable);
topLevelClass.addField(Field file);
添加方法
context.getCommentGenerator().addGeneralMethodComment(Method method,
IntrospectedTable introspectedTable);
topLevelClass.addMethod(Method method);
添加标签
method.addAnnotation("@Override")
设置属性
method.setVisibility(JavaVisibility.PUBLIC);//public 属性
添加返回值
method.setReturnType(FullyQualifiedJavaType returnType)
设置名称
method.setName("toString")
方法添加方法体
method.addBodyLine(String message)
获取所有的属性
topLevelClass.getFields()
设是否为final
method.setFinal(Boolean boolean); //默认false
设置是否为static
method.setStatic(Boolean boolean); //默认false
设置方法是否带锁
method.setSynchronized(Boolean boolean); //默认false
属性设置类型
field.setType(new FullyQualifiedJavaType(String));
属性设置值
field.setInitializationString(String message)
实例可见 mybatis-generator-core.jar
添加方法:org.mybatis.generator.plugins.ToStringPlugin{};
添加属性:org.mybatis.generator.plugins.SerializablePlugin
相关推荐
下面我们将详细介绍如何在Eclipse中安装和使用MyBatis Generator插件。 首先,我们需要获取MBG的插件文件。通常,你可以从官方网站或者第三方资源站点下载到`mybatis-generator-eclipse-plugin`的zip压缩包。下载...
通过以上步骤,你可以成功地手动安装并使用Mybatis Generator插件,实现数据库表结构到Java代码的自动化转换,从而提高开发效率。在实际应用中,可以根据项目需求调整配置,比如选择生成的代码风格、是否生成注释等...
本实例将详细讲解如何进行SSM整合,并介绍mybatis-generator插件的使用,帮助开发者提高开发效率。 首先,Spring作为核心容器,管理着应用中的对象,提供了依赖注入(DI)和面向切面编程(AOP)的能力。在SSM整合中...
总的来说,MyEclipse MyBatis Generator插件是提高Java开发效率的重要工具,它简化了与数据库交互的代码生成过程。通过UpdateSite进行插件安装,利用generatorConfig.xml配置文件定制生成规则,开发者可以快速地为...
在Java开发领域,Generator插件是一种非常实用的工具,它能够极大地提高开发效率,通过自动根据数据表生成相应的实体类、接口以及SQL语句,从而减少了手动编写这些基础代码的工作量。这个"generator插件完整配置文件...
在本文中,我们将深入探讨如何在Spring Boot项目中结合MyBatis框架,使用MyBatis Generator(MBG)插件自动生成数据库模型、Mapper接口和XML配置文件,从而提高开发效率。Spring Boot以其简洁的配置和强大的依赖管理...
Eclipse MyBatis Generator插件是一款强大的自动化代码生成工具,它极大地简化了开发过程中与数据库交互的代码编写工作。MyBatis Generator可以帮助开发者自动生成Java实体类、Mapper接口及XML配置文件,从而节省了...
总的来说,Mybatis Generator插件包是一个便捷的开发工具,适用于使用Eclipse的Java开发人员。通过这个插件,开发者可以自动生成Mybatis项目中的核心代码,包括XML映射文件、Mapper接口和实体类,从而减少手动编写的...
MyEclipse MyBatis Generator插件是一款专门为MyEclipse集成开发环境设计的代码生成工具,极大地提升了开发效率。它基于MyBatis框架,能够自动生成Java实体类、Mapper接口及XML配置文件,使得开发者无需手动编写重复...
总结一下,MyBatis Generator插件是IDEA中用于自动化生成MyBatis相关代码的强大工具,通过XML配置文件来指定生成规则,极大地提高了开发效率。了解并熟练掌握其使用方法,能帮助开发者快速地搭建数据访问层,专注于...
MyBatis Generator(MBG)是MyBatis框架的一个强大工具,它允许用户自动生成Java实体类、Mapper接口和XML映射文件,大大减轻了开发人员的手动编码工作,提高了开发效率,减少了出错的可能性。在Java开发中,尤其是...
文件名"mybatisgenerator_myeclipse10-sql-oracle"可能表示这是一个适用于Myeclipse 10版本的Mybatis Generator插件,并且重点支持Oracle数据库的配置和使用。"sql"可能代表SQL数据库的通用性,而"oracle"则强调了对...
MyBatis Generator是一款强大的自动化工具,它能够帮助开发者自动生成Java实体类、DAO接口以及Mapping映射文件,极大地提高了开发效率。在SSM(Spring、SpringMVC、MyBatis)框架中,MyBatis Generator作为一款必备...
下面将详细介绍如何在Myeclipse 8到10版本中安装并使用Mybatis Generator插件。 首先,了解Mybatis Generator的基本概念是必要的。Mybatis Generator基于XML配置文件,通过读取数据库表信息,可以自动生成与数据库...
Eclipse MyBatis Generator Eclipse Site 插件是一个用于Eclipse集成开发环境的工具,它极大地简化了MyBatis Generator的使用。MyBatis Generator是一个强大的Java库,它能够自动生成MyBatis框架所需的SQL映射文件、...
通过使用MyBatis Generator Eclipse插件,开发者可以专注于业务逻辑的实现,而无需为数据访问层的代码编写花费太多时间,提高了开发效率和代码质量。它还支持自定义生成模板,可以根据团队的编码规范进行定制,使得...
在Eclipse环境中,我们可以安装Mybatis Generator插件来方便地进行这些操作。下面将详细介绍如何在Eclipse中安装和使用Mybatis Generator插件。 首先,我们需要获取Mybatis Generator的插件文件。通常,这是一个....
总的来说,Mybatis Generator插件是Java开发中的得力助手,它通过自动化代码生成,减轻了开发人员的工作负担,提高了开发效率,同时保证了代码质量。熟练掌握并运用这个工具,无疑会提升你在项目开发中的工作效率。
总之,MyBatis Generator插件通过简单的配置就能自动生成与数据库表对应的Java代码,大大减少了开发人员的手动编写工作,提高了开发效率。手动安装MBG插件到MyEclipse 10的过程中,关键在于正确放置`features`和`...
MyBatis Generator...综上所述,MyBatis Generator是一个强大且灵活的工具,可以帮助开发者快速生成MyBatis框架所需的代码,提高开发效率。正确配置和使用MBG是提升开发体验的关键,同时也要注意其可能带来的风险。