自定义mybaits的数据格式和内容
1.使用maven的MyBatis-Generator。
2.定制自己的mybtis-generator-core.jar
1)git clone https://github.com/VoofChat/mybatis-generator-1.3.2 到本地
2)安装这个jar到本地仓库
mvn install -Dmaven.test.skip=true
3) 修改pom.xml文件
<build>
<finalName>webapp</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>com.voofchat.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
4)修改generatorConfig.xml文件
<commentGenerator type="org.mybatis.generator.internal.VoofchatCommentGenerator">
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false" />
<property name="suppressDate" value="true" />
</commentGenerator>
5)执行 mvn mybatis-generator:generate
MyBatis Generator 具体修改
参考:
mybatis配置说明:http://generator.sturgeon.mopaas.com/index.html
大象修改博客http://www.blogjava.net/bolo/archive/2015/03/25/423826.html
Mybatis-Generator详细配置:http://www.jianshu.com/p/e09d2370b796
修改记录:
修改记录: 1、Mapper.xml空格改成四个空格
修改详情:
org.mybatis.generator.api.dom.OutputUtilities
mybatis-generator 里面我觉得首先最应该改的就是 OutputUtilities 这个类,它里面有个 xmlIndent 方法是用来控制生成的 xml 文件中空格的缩进,默认是两个空格
但四个空格对于我们来说已经深入骨髓了,所以必须改。 在 sb.append( " " ) 里面增加两个空格就可以了。
2、修改dao包下的名称,由原来的XXXMapper改成XXXDao
修改详情:
org.mybatis.generator.api.IntrospectedTable
calculateJavaClientAttributes方法(大概820行)
sb.append("Mapper");注释掉改成 sb.append("Dao");
3、修改Mybatis的Model生成JavaDoc注释内容:
1)generatorConfig.xml配置里面设置成:<property name="suppressAllComments" value="false"/>
代码修改详情:
org.mybatis.generator.internal.DefaultCommentGenerator里面的添加注释代码去掉,改成
------------------------------ code start ----------------------------------------
field.addJavaDocLine("/**");
field.addJavaDocLine(" * @Fields "+field.getName()+" "+introspectedColumn.getRemarks());
field.addJavaDocLine(" */");
------------------------------ code end ---------------------------------------------
4、org.mybatis.generator.internal.DefaultCommentGenerator修改XXXDao.java(XXXMapper.java)的接口方法的Javadoc注释
搜索org.mybatis.generator.internal.DefaultCommentGenerator如下方法,并注释方法里面内容,
public void addGeneralMethodComment(Method method,
IntrospectedTable introspectedTable)
改成:
method.addJavaDocLine("/**");
method.addJavaDocLine(" * @Title " + method.getName());
for (Parameter parameter : method.getParameters()) {
method.addJavaDocLine(" * @param " + parameter.getName());
}
String returnType = method.getReturnType().toString();
returnType = returnType.lastIndexOf(".") != -1 ? returnType.substring(returnType.lastIndexOf(".") + 1) : returnType;
method.addJavaDocLine(" * @return " + returnType);
method.addJavaDocLine(" */");
5、注释掉Model里面Getter和Setter方法的注释,根据需要自己加上配置
搜索org.mybatis.generator.internal.DefaultCommentGenerator如下方法:
public void addGetterComment(Method method,
IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn)
public void addSetterComment(Method method,
IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn)
6、注释掉Mapper.xml里面的<!-- 注释 -->,实际使用未用到
搜索org.mybatis.generator.internal.DefaultCommentGenerator如下方法:
public void addComment(XmlElement xmlElement)
7、XML里面每个SQL增加一个换行
org.mybatis.generator.api.dom.xml.XmlElement里面getFormattedContent里面加上:
if(indentLevel == 1) {
//每个insert/update/select之间插入一个空行
OutputUtilities.newLine(sb);
}
8、修改mybatis的mapper.xml文件里面insert和update不根据字段判断的非动态SQL
org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator
里面的getSqlMapElement方法
注释掉:
addInsertElement(answer);
addUpdateByPrimaryKeyWithoutBLOBsElement(answer);
对应的是mapper.xml里面的
<insert id="insert" parameterType="xxx" ></insert>
<update id="updateByPrimaryKey" parameterType="xxx" ></update>
9.自生成包路径
DefaultShellCallback.java,由于运行时,如果找不到xml配置的包名,在此类中会抛出异常,因此在这里,修改一下,直接创建文件
在这个类中第50行处,注释掉1,添加2
File project = new File(targetProject);
if (!project.isDirectory()) {
// throw new ShellException(getString("Warning.9", //$NON-NLS-1$
// targetProject));
project.mkdirs();
}
10.自定义实体类名称
IntrospectedTable.java中calculateModelAttributes方法中修改如下:
sb.setLength(0);
sb.append(pakkage);
sb.append('.');
sb.append("MiniappHaowu"); // add by zzx
sb.append(fullyQualifiedTable.getDomainObjectName());
sb.append("Po");//add by zzx
setBaseRecordType(sb.toString());
11.自定义dao类名称
IntrospectedTable.java中calculateJavaClientAttributes方法中修改如下:
sb.setLength(0);
sb.append(calculateJavaClientInterfacePackage());
sb.append('.');
sb.append(fullyQualifiedTable.getDomainObjectName());
// sb.append("Mapper"); //$NON-NLS-1$
sb.append("Dao");
12.自定义mapper文件名称
protected String calculateMyBatis3XmlMapperFileName() {
StringBuilder sb = new StringBuilder();
sb.append("MiniappHaowu");
sb.append(fullyQualifiedTable.getDomainObjectName());
sb.append("Dao.xml"); //$NON-NLS-1$
return sb.toString();
}
13.SQL生成中修改数据库表名称
/Users/bjhl/Desktop/javaPorjects/mybatis-generator-core/src/main/java/org/mybatis/generator/api/IntrospectedTable.java
public String getFullyQualifiedTableNameAtRuntime() {
// return internalAttributes
// .get(InternalAttribute.ATTR_FULLY_QUALIFIED_TABLE_NAME_AT_RUNTIME);
String tableNameAtRuntime =
AppConfig.DATABASE_NAME + ".`"
+ internalAttributes.get(InternalAttribute.ATTR_FULLY_QUALIFIED_TABLE_NAME_AT_RUNTIME)
+ "`";
return tableNameAtRuntime;
}
/**
* Gets the aliased fully qualified table name at runtime.
*
* @return the aliased fully qualified table name at runtime
*/
public String getAliasedFullyQualifiedTableNameAtRuntime() {
// return internalAttributes
// .get(InternalAttribute.ATTR_ALIASED_FULLY_QUALIFIED_TABLE_NAME_AT_RUNTIME);
String tableNameAtRuntime =
AppConfig.DATABASE_NAME + ".`"
+ internalAttributes.get(InternalAttribute.ATTR_ALIASED_FULLY_QUALIFIED_TABLE_NAME_AT_RUNTIME)
+ "`";
return tableNameAtRuntime;
}
效果如下: