`

编写mybatis generator插件

阅读更多
1、需求
如果使用mybatis generator进行代码生成,将会自动生成model类,类中将会包括所有数据库字段的定义及get/set方法,如果数据库结构进行更改,那我们将再次进行代码生成,然后覆盖掉之前的model类。
这里存在一个很大的问题就是,如果项目我们已经在model中添加了其它辅助字段或者方法,那么文件就不能直接覆盖,因为会把以前的逻辑一起覆盖掉。

2、解决方案
将所有数据库字段提升至model类的父类,而在model类中实现业务逻辑,这样如果需要数据库结构有变,也只需要覆盖model类的父类即可,业务逻辑并不受影响。
举例:
User表拥有字段username,password,之前对应model类User,数据库字段及业务逻辑都写在这里,处理后,将原User类中的数据库字段全部提至AbstractUser类中,User类继承AbstractUser类,User类中则专门用于实现业务逻辑,之后如果User表需要添加字段如sex,则只需要覆盖AbstractUser类即可。
而这一切,我们希望跟以前一样进行生成即可

3、编写插件

mybatis generator插件继承自PluginAdapter,通过重写相关方法,实现功能,所有提供的方法在调用上有前后顺序关系,具体可以参考generator API http://generator.sturgeon.mopaas.com/

public class ModelAbstractPlugin extends PluginAdapter {
	
	@Override
	public boolean validate(List<String> list) {
		return true;
	}
	
	@Override
	public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) {
		List<GeneratedJavaFile> list = new ArrayList<GeneratedJavaFile>();
		
		List<TopLevelClass> units = new ArrayList<TopLevelClass>();
		if (introspectedTable.getRules().generateBaseRecordClass())
			units.add(generateRealRecordClass(introspectedTable, new FullyQualifiedJavaType(introspectedTable.getBaseRecordType())));
		if (introspectedTable.getRules().generateRecordWithBLOBsClass())
			units.add(generateRealRecordClass(introspectedTable, new FullyQualifiedJavaType(introspectedTable.getRecordWithBLOBsType())));
		
		CompilationUnit unit;
		for (Iterator<TopLevelClass> iterator = units.iterator(); iterator.hasNext();) {
			unit = (CompilationUnit)iterator.next();
			list.add(new GeneratedJavaFile(unit, getContext().getJavaModelGeneratorConfiguration().getTargetProject(), getContext().getJavaFormatter()));
		}
		return list;
	}
	
	@Override
	public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
		makeSerializable(topLevelClass, introspectedTable);
		ReflectUtils.getInstance().setFieldValue(topLevelClass, "type", getAbstractType(topLevelClass));
		return true;
	}
	
	@Override
	public boolean modelRecordWithBLOBsClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
		makeSerializable(topLevelClass, introspectedTable);
		ReflectUtils.getInstance().setFieldValue(topLevelClass, "type", getAbstractType(topLevelClass));
		return true;
	}
	
	protected void makeSerializable(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
		Field field = new Field();
		field.setFinal(true);
		field.setInitializationString("1L");
		field.setName("serialVersionUID");
		field.setStatic(true);
		field.setType(new FullyQualifiedJavaType("long"));
		field.setVisibility(JavaVisibility.PRIVATE);
		
		List<Field> fields = topLevelClass.getFields();
		fields.add(0, field);
	}
	
	protected TopLevelClass generateRealRecordClass(IntrospectedTable introspectedTable, FullyQualifiedJavaType recordType) {
		TopLevelClass answer = new TopLevelClass(recordType);
		answer.setSuperClass(getAbstractType(answer));
		answer.setVisibility(JavaVisibility.PUBLIC);
		makeSerializable(answer, introspectedTable);
		return answer;
	}
	
	protected FullyQualifiedJavaType getAbstractType(TopLevelClass topLevelClass) {
		return new FullyQualifiedJavaType(getAbstractTypeName(topLevelClass));
	}
	
	protected String getAbstractTypeName(TopLevelClass topLevelClass) {
        String prefix = "Abstract";
        return (new StringBuilder(String.valueOf(topLevelClass.getType().getPackageName()))).append(".").append(prefix).append(topLevelClass.getType().getShortName()).toString();
    }

}


4、配置文件中注册插件
<plugin type="com.test.mybatis.generator.plugins.ModelAbstractPlugin"></plugin>


这样就可以在代码生成时使用插件了
分享到:
评论

相关推荐

    eclipse mybatis generator插件及使用

    Eclipse MyBatis Generator插件是一款强大的自动化代码生成工具,它极大地简化了开发过程中与数据库交互的代码编写工作。MyBatis Generator可以帮助开发者自动生成Java实体类、Mapper接口及XML配置文件,从而节省了...

    mybatis generator Myeclipse插件

    文件名"mybatisgenerator_myeclipse10-sql-oracle"可能表示这是一个适用于Myeclipse 10版本的Mybatis Generator插件,并且重点支持Oracle数据库的配置和使用。"sql"可能代表SQL数据库的通用性,而"oracle"则强调了对...

    mybatis generator

    Mybatis Generator是一款强大的工具,它为开发者自动化生成Mybatis的Mapper接口、XML映射文件以及实体类,大大减轻了在使用Mybatis时手动编写这些文件的工作负担。在Java开发环境中,ORM(Object-Relational Mapping)...

    Mybatis Generator eclipse 插件

    在Eclipse环境中,我们可以安装Mybatis Generator插件来方便地进行这些操作。下面将详细介绍如何在Eclipse中安装和使用Mybatis Generator插件。 首先,我们需要获取Mybatis Generator的插件文件。通常,这是一个....

    Mybatis Generator插件的手动安装及插件教程

    main = 'org.mybatis.generator.api.MyBatisGenerator' classpath configurations.compile args '-configfile', 'src/main/resources/generatorConfig.xml', '-overwrite' } ``` 这样,每次运行`mvn clean ...

    mybatis generator插件包

    标题"mybatis generator插件包"指的是Mybatis Generator的插件形式,通常是为了方便在集成开发环境中如Eclipse使用。这个插件包是离线版本,意味着开发者无需网络连接即可在本地安装和使用,这对于那些网络环境不...

    MyBatis Generator工具

    MyBatis Generator是一款强大的自动化工具,它极大地简化了在使用MyBatis框架时的数据访问层(DAL)代码编写工作。通过配置XML文件,Generator能够自动生成Java实体类、Mapper接口及实现类、XML配置文件等,从而极大地...

    mybatis generator 插件

    - 创建一个新的Java Application,导入MBG的主类`org.mybatis.generator.api.MyBatisGenerator`,并传入配置文件路径作为参数运行。 - 或者,你可以将MBG的执行集成到构建脚本(如Maven或Gradle)中,这样每次构建...

    myBatis Generator自动创建代码插件

    在SSM(Spring、SpringMVC、MyBatis)框架中,MyBatis Generator作为一款必备插件,使得数据库表与Java对象之间的映射工作变得简单易行。 首先,我们需要理解MyBatis Generator的工作原理。它通过读取数据库元数据...

    mybatis generator插件的手动安装即使用

    总之,MyBatis Generator插件通过简单的配置就能自动生成与数据库表对应的Java代码,大大减少了开发人员的手动编写工作,提高了开发效率。手动安装MBG插件到MyEclipse 10的过程中,关键在于正确放置`features`和`...

    使用MyBatis Generator插件自动生成映射文件

    MyBatis Generator(MBG)是一款强大的Java工具,它能够自动生成MyBatis相关的代码,包括DAO接口、Mapper映射文件以及实体类,极大地提高了开发效率。本篇将详细介绍如何利用MyBatis Generator来实现自动代码生成,...

    mybatis generator eclipse plugin

    Eclipse Mybatis Generator 插件是这个工具在 Eclipse 开发环境中的集成,让开发者可以直接在 IDE 中方便地使用。 1. **Mybatis Generator 简介** Mybatis Generator 是 Mybatis 框架的一个扩展,通过简单的配置,...

    myeclipse mybatis-generator 插件

    标题中的"myeclipse mybatis-generator 插件"指的是在MyEclipse中使用的MyBatis Generator插件。这个插件允许开发者通过简单的配置,自动生成与数据库交互的Java代码,包括Mapper接口、Mapper XML文件、实体类和DAO...

    通过mybatis generator反向工程生成pojo及mapper类 带序列化插件

    例如,使用Maven时,可以在pom.xml中添加执行Generator的插件配置,并在命令行执行`mvn mybatis-generator:generate`。 通过以上步骤,你已经成功地使用MyBatis Generator进行了反向工程,生成了带有序列化功能的...

    mybatis-generator

    MyBatis Generator(MBG)是一个强大的工具,用于自动生成MyBatis的SQL映射文件、Java模型类和DAO接口。这个工具极大地提高了开发效率,减少了手动编写这些基础代码的工作量。MBG支持多种数据库,包括MySQL,它可以...

    mybatis_generator使用手册

    安装:在 pom.xml 中设置 MyBatis Generator 插件: ``` &lt;groupId&gt;org.mybatis.generator &lt;artifactId&gt;mybatis-generator-core &lt;version&gt;1.3.7 ``` 三、 使用-Demo 实例 使用 MyBatis Generator 生成代码...

    Myeclipse8~10安装mybatis-generator插件

    下面将详细介绍如何在Myeclipse 8到10版本中安装并使用Mybatis Generator插件。 首先,了解Mybatis Generator的基本概念是必要的。Mybatis Generator基于XML配置文件,通过读取数据库表信息,可以自动生成与数据库...

    MybatisGenerator.rar

    MybatisGenerator是一个强大的工具,主要用于简化Mybatis框架的模型、Mapper接口及XML配置文件的创建。这个工具基于Java,能够通过数据库元数据自动生成相关的Java源代码,极大地提高了开发效率,尤其是在处理大量的...

    MyBatis Generator.rar

    - 安装Eclipse插件:下载并安装MyBatis Generator的Eclipse插件,重启Eclipse。 - 配置MBG:创建XML配置文件,设置数据库连接信息和生成规则。 - 运行MBG:在Eclipse中运行配置文件,选择生成的代码目录。 - ...

Global site tag (gtag.js) - Google Analytics