mybatis-generator-coreコード修正
参考文献:http://generator.sturgeon.mopaas.com/reference/extending.html http://blog.csdn.net/wu6660563/article/details/52093364 http://www.blogjava.net/bolo/archive/2015/04/10/424271.html
まずgithubに行ってソースコードをダウンロードします
generator-master.zipファイルをダウンロードし、次のように解凍します:
二mybatis-generator-coreプロジェクトをIdeaにインポート
それからmybatis-generator-coreプロジェクトをideaで開きます.MySQLを使ったのでpom.xmlファイルにmysqlドライバを導入する必要があります.私が使ったアリソースmybatisは最新3.4.2で、プロジェクトは最新3.5バージョンです.
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.9version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.4.2version>
dependency>
三修正開始
これは核心的なもので、私たちが本当に変えなければならないものです.
1生成したxmlファイルのインデントを変更する
クラスを変更する必要がありますorg.mybatis.generator.api.dom.OutputUtilities
public static void xmlIndent(StringBuilder sb, int indentLevel) {
for (int i = 0; i < indentLevel; i++) {
sb.append(" ").append(" "); // 2
}
}
2プロパティとメソッド間の改行を変更する
クラスorg.mybatis.generator.api.dom.java.InnerClassを変更する必要があります
public String getFormattedContent(int indentLevel, CompilationUnit compilationUnit) {
...
sb.append(" {"); //$NON-NLS-1$
indentLevel++;
OutputUtilities.newLine(sb); //
Iterator fldIter = fields.iterator();
while (fldIter.hasNext()) {
OutputUtilities.newLine(sb);
Field field = fldIter.next();
sb.append(field.getFormattedContent(indentLevel, compilationUnit));
if (fldIter.hasNext()) {
OutputUtilities.newLine(sb); //
}
}
......
}
3 xmlファイルがマージされるかどうかを制御する
クラスorg.mybatis.generator.api.dom.java.InnerClassを変更する必要があります
public List getGeneratedXmlFiles() {
List answer = new ArrayList();
if (xmlMapperGenerator != null) {
Document document = xmlMapperGenerator.getDocument();
GeneratedXmlFile gxf = new GeneratedXmlFile(document,
getMyBatis3XmlMapperFileName(), getMyBatis3XmlMapperPackage(),
context.getSqlMapGeneratorConfiguration().getTargetProject(),
false, context.getXmlFormatter()); // xml
if (context.getPlugins().sqlMapGenerated(gxf, this)) {
answer.add(gxf);
}
}
しかし、falseに変更した後、shellCallback.isOverwriteEnabled()を有効にしてxmlファイルオーバーライド生成を実現するには、実行するコマンドラインにoverwriteパラメータを追加する必要があります.
4わけのわからないExample類を取り除く
関連するクラスorg.mybatis.generator.codegen.mybatis 3.IntrospectedTableMyBatis 3 Impl
最初はtableの構成が簡単でした
,, Example , , ExampleGenerator null,(⊙﹏⊙)b public List getGeneratedJavaFiles() {
List answer = new ArrayList();
/**
*
*/
for (AbstractJavaGenerator javaGenerator : javaModelGenerators) {
List compilationUnits = javaGenerator
.getCompilationUnits();
if (compilationUnits == null) {
// ExampleGenerator null
}else{
for (CompilationUnit compilationUnit : compilationUnits) {
GeneratedJavaFile gjf = new GeneratedJavaFile(compilationUnit,
context.getJavaModelGeneratorConfiguration()
.getTargetProject(),
context.getProperty(PropertyRegistry.CONTEXT_JAVA_FILE_ENCODING),
context.getJavaFormatter());
answer.add(gjf);
}
}
}
xml
<table tableName="nami_user_and_web_site" enableCountByExample="false" enableDeleteByExample="false" enableUpdateByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
table>
OK ,xml id=”xxxByExample” ,
5
org.mybatis.generator.internal.DefaultCommentGenerator
,
addComment xml
addJavaFileComment java
addClassComment
, org.mybatis.generator.codegen.mybatis3.model.BaseRecordGenerator 64
commentGenerator.addClassComment(topLevelClass,introspectedTable);
, , , , 。
FullyQualifiedTable remarks , DatabaseIntrospector calculateIntrospectedTables
Statement stmt = null;
try {
stmt = databaseMetaData.getConnection().createStatement();
ResultSet rs = stmt.executeQuery("SHOW TABLE STATUS LIKE '" + atn.getTableName() + "'");
while (rs.next()) {
table.setRemarks(rs.getString("COMMENT"));
}
closeResultSet(rs);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
6
: _
String domainName = fullyQualifiedTable.getDomainObjectName()
xxx_user , org.mybatis.generator.api.getDomainObjectName
public String getDomainObjectName() {
if (stringHasValue(domainObjectName)) {
return domainObjectName;
} else if (stringHasValue(runtimeTableName)) {
return getCamelCaseStringByIronC(runtimeTableName, true);
} else {
return getCamelCaseStringByIronC(introspectedTableName, true);
}
}
getCamelCaseStringByIronC org.mybatis.generator.internal.util.JavaBeansUtil
public static String getCamelCaseStringByIronC(String inputString,
boolean firstCharacterUppercase) {
String substring = inputString.substring(inputString.indexOf("_")+1, inputString.length()); //
return getCamelCaseString(substring, firstCharacterUppercase);
}
<table tableName="nami_tag" domainObjectName="tag" enableCountByExample="false" enableDeleteByExample="false" enableUpdateByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
<columnOverride column="tag_status" jdbcType="TINYINT" javaType="java.lang.Integer"/>
table>
7 xml dao
org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator org.mybatis.generator.codegen.mybatis3.javamapper.JavaMapperGenerator
protected XmlElement getSqlMapElement() {
FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
progressCallback.startTask(getString(
"Progress.12", table.toString())); //$NON-NLS-1$
XmlElement answer = new XmlElement("mapper"); //$NON-NLS-1$
String namespace = introspectedTable.getMyBatis3SqlMapNamespace();
answer.addAttribute(new Attribute("namespace", //$NON-NLS-1$
namespace));
context.getCommentGenerator().addRootComment(answer);
addResultMapWithoutBLOBsElement(answer);
addResultMapWithBLOBsElement(answer);
addExampleWhereClauseElement(answer);
addMyBatis3UpdateByExampleWhereClauseElement(answer);
addBaseColumnListElement(answer);
addBlobColumnListElement(answer);
// addSelectByExampleWithBLOBsElement(answer);
// addSelectByExampleWithoutBLOBsElement(answer);
addSelectByPrimaryKeyElement(answer);
addDeleteByPrimaryKeyElement(answer);
// addDeleteByExampleElement(answer);
addInsertElement(answer);
addInsertSelectiveElement(answer);
// addCountByExampleElement(answer);
// addUpdateByExampleSelectiveElement(answer);
// addUpdateByExampleWithBLOBsElement(answer);
// addUpdateByExampleWithoutBLOBsElement(answer);
addUpdateByPrimaryKeySelectiveElement(answer);
// addUpdateByPrimaryKeyWithBLOBsElement(answer);
// addUpdateByPrimaryKeyWithoutBLOBsElement(answer);
return answer;
}
public List<CompilationUnit> getCompilationUnits() {
progressCallback.startTask(getString("Progress.17", //$NON-NLS-1$
introspectedTable.getFullyQualifiedTable().toString()));
CommentGenerator commentGenerator = context.getCommentGenerator();
FullyQualifiedJavaType type = new FullyQualifiedJavaType(
introspectedTable.getMyBatis3JavaMapperType());
Interface interfaze = new Interface(type);
interfaze.setVisibility(JavaVisibility.PUBLIC);
commentGenerator.addJavaFileComment(interfaze);
String rootInterface = introspectedTable
.getTableConfigurationProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
if (!stringHasValue(rootInterface)) {
rootInterface = context.getJavaClientGeneratorConfiguration()
.getProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
}
if (stringHasValue(rootInterface)) {
FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType(
rootInterface);
interfaze.addSuperInterface(fqjt);
interfaze.addImportedType(fqjt);
}
// addCountByExampleMethod(interfaze);
// addDeleteByExampleMethod(interfaze);
addDeleteByPrimaryKeyMethod(interfaze);
addInsertMethod(interfaze);
addInsertSelectiveMethod(interfaze);
// addSelectByExampleWithBLOBsMethod(interfaze);
// addSelectByExampleWithoutBLOBsMethod(interfaze);
addSelectByPrimaryKeyMethod(interfaze);
// addUpdateByExampleSelectiveMethod(interfaze);
// addUpdateByExampleWithBLOBsMethod(interfaze);
// addUpdateByExampleWithoutBLOBsMethod(interfaze);
addUpdateByPrimaryKeySelectiveMethod(interfaze);
// addUpdateByPrimaryKeyWithBLOBsMethod(interfaze);
// addUpdateByPrimaryKeyWithoutBLOBsMethod(interfaze);
List<CompilationUnit> answer = new ArrayList<CompilationUnit>();
if (context.getPlugins().clientGenerated(interfaze, null,
introspectedTable)) {
answer.add(interfaze);
}
List<CompilationUnit> extraCompilationUnits = getExtraCompilationUnits();
if (extraCompilationUnits != null) {
answer.addAll(extraCompilationUnits);
}
return answer;
}
, , , , , copy 。