Mybatis generator着实减少了平时开发中的很多工作量,但是每次生成的东西必须的修修改改才可以用,何不让其生成的东西一次性就可以使用呢?
参照官网链接:http://generator.sturgeon.mopaas.com/reference/extending.html 参照小码各博客:http://www.jianshu.com/u/231b43e2c05f
我这里用的是mybatis-generator-maven-plugin,用eclipse或者直接跑mybatis-generator-core源码的,可以借鉴插件的写法和编译等。
创建一个maven骨架工程,没有合适的,就先创建webapp,然后手动改为jar项目
mvn archetype:generate -DgroupId=com.arlen -DartifactId=mybatis-generator-plugin -DarchetypeArtifactId=maven-archetype-webapp
手动修改pom文件packaging为jar方式,添加mybatis-generator-core依赖,添加maven-compiler-plugin编译插件。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.arlen</groupId>
<artifactId>mybatis-generator-plugin</artifactId>
<packaging>jar</packaging>
<version>1.0.0</version>
<name>mybatis-generator-plugin</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>
<finalName>mybatis-generator-plugin</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
编写自己的插件,可以通过对PluginAdapter的扩展来实现,基本你想要的功能都能实现。我总共开发了五个插件,分别为 生成自定义注释插件、分页插件、批量操作插件、字典项插件、重命名java client类名
下面以最简单的自定义注释插件为例
public class DBColumnCommentPlugin extends PluginAdapter {
/**
* 无任何参数,无需校验
*/
public boolean validate(List<String> warnings) {
return true;
}
/**
* 生成字段时调用方法
*/
@Override
public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,
IntrospectedTable introspectedTable, ModelClassType modelClassType) {
String comment = introspectedColumn.getRemarks();
if (comment != null && comment.trim().length() > 0) {
field.addJavaDocLine("/**");
field.addJavaDocLine(" * " + introspectedColumn.getRemarks());
field.addJavaDocLine(" */");
}
return super.modelFieldGenerated(field, topLevelClass, introspectedColumn, introspectedTable, modelClassType);
}
@Override
public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass,
IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
String comment = introspectedColumn.getRemarks();
if (comment != null && comment.trim().length() > 0) {
method.addJavaDocLine("/**");
method.addJavaDocLine(" * @return " + introspectedColumn.getActualColumnName() + " " + introspectedColumn.getRemarks());
method.addJavaDocLine(" */");
}
return super.modelGetterMethodGenerated(method, topLevelClass, introspectedColumn, introspectedTable, modelClassType);
}
@Override
public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass,
IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
String comment = introspectedColumn.getRemarks();
if (comment != null && comment.trim().length() > 0) {
Parameter param = method.getParameters().get(0);
method.addJavaDocLine("/**");
method.addJavaDocLine(" * @param " + param + " " + introspectedColumn.getRemarks());
method.addJavaDocLine(" */");
}
return super.modelSetterMethodGenerated(method, topLevelClass, introspectedColumn, introspectedTable, modelClassType);
}
}
写好的插件要打包,让mybatis-generator插件来依赖,在pom目录打包
mvn clean install -Dmaven.test.skip=true
为了让maven很方便的依赖,而不是把jar包拷到mybatis-generator源码里再打包一次,我们讲自己的插件安装到本地仓库
mvn install:install-file -Dfile=target/mybatis-generator-plugin.jar -DgroupId=com.arlen -DartifactId=mybatis-generator-plugin -Dversion=1.0.0 -Dpackaging=jar
为了让mybatis-generator的maven插件可以使用自己写的插件,需要在自己项目的pom文件中添加
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sample</groupId>
<artifactId>sample</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>sample Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- ...你自己项目的一堆依赖和配置... -->
<build>
<finalName>sample</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>src/main/resources/config/generator/generator-sample.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>com.arlen</groupId>
<artifactId>mybatis-generator-plugin</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
下面的配置中总共配了6个插件。分别是:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
<classPathEntry
location="D:\maven\repository\mysql\mysql-connector-java\5.1.19\mysql-connector-java-5.1.19.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8" />
<property name="beginningDelimiter" value="`" />
<property name="endingDelimiter" value="`" />
<plugin type="com.arlen.generator.plugin.DBColumnCommentPlugin" />
<plugin type="com.arlen.generator.plugin.DictionaryAnnotationPlugin" />
<plugin type="com.arlen.generator.plugin.PagePlugin" />
<plugin type="com.arlen.generator.plugin.BatchPlugin" />
<plugin type="com.arlen.generator.plugin.RenameClientClassPlugin">
<property name="searchRegex" value="Mapper" />
<property name="replaceString" value="Dao" />
<property name="prefix" value="I" />
</plugin>
<plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example" />
<property name="replaceString" value="Query" />
</plugin>
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/greenpass"
userId="root"
password="123456"
/>
<javaTypeResolver>
<property name="forceBigDecimals" value="true" />
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal -->
</javaTypeResolver>
<javaModelGenerator targetPackage="com.hongkun.greenpass.member.order.domain"
targetProject="./src/main/java">
<property name="enableSubPackages" value="true" />
<!-- set的时候是否去除尾部空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="reportorder-gen" targetProject="./src/main/resources/mybatis">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.hongkun.greenpass.member.order.dao" targetProject="./src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table tableName="order_extra_fee" alias="oef" domainObjectName="OrderExtraFee"
enableDeleteByExample="false" enableUpdateByExample="false">
<generatedKey column="id" sqlStatement="JDBC" identity="true" />
</table>
</context>
</generatorConfiguration>
右击自己的项目–>Run as–>Run configurations…–>选择自己的项目–>Goals填mybatis-generator:generate–>运行
然后代码就生成了。
或者直接用maven直接打包自己的maven项目。
mvn deploy:deploy-file -DgroupId=com.arlen -DartifactId=mybatis-generator-plugin -Dversion=1.0.0 -Dpackaging=jar -Dfile=target/mybatis-generator-plugin.jar -Durl=http://192.168.226.68:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
首先得确保私服开了上传jar包的权限,其次,本地maven配置文件中得配置对应的用户名密码,祥见 Maven–》如何上传jar包到Maven私服