使用MyBatis-Generator如何自動生成映射文件
MyBatis-Generator自動生成映射文件
生成的方式一共有三種
1、使用cmd命令方式生成
首先在generator.xml中指定數(shù)據(jù)庫驅(qū)動包位置,然后在mybatis-generator-core-1.3.1包下創(chuàng)建一個src文件夾(否則生成的文件沒地方放)
生產(chǎn)的Mapper.xml文件與domain類放在一個報(bào)下面(否則無法映射)
E:\>java -jar E:\mybatis-generator-core-1.3.1\lib\mybatis-generator-core-1.3.1.j
ar -configfile E:\mybatis-generator-core-1.3.1\generator.xml -overwrite
generator.xml
<?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>
<!-- 數(shù)據(jù)庫驅(qū)動位置 -->
<classPathEntry location="E:\mybatis-generator-core-1.3.1\mysql-connector-java-5.0.8-bin.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 數(shù)據(jù)庫的url、用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/dbo" userId="root" password="123456">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="com.paywing.domain" targetProject="E:\mybatis-generator-core-1.3.1\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成的映射文件包名和位置 -->
<sqlMapGenerator targetPackage="com.paywing.mapping" targetProject="E:\mybatis-generator-core-1.3.1\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.paywing.dao" targetProject="E:\mybatis-generator-core-1.3.1\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 生成那些表 tableName表名,domainObjectName應(yīng)于數(shù)據(jù)庫表的javaBean類名-->
<table tableName="tb_bookinfo" domainObjectName="TB_BookInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
<table tableName="tb_booktype" domainObjectName="TB_Booktype" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
</context>
</generatorConfiguration>
2、使用maven方式生成
(這種方式在各個工具下都能使用,推薦使用這種方式)
generator.properties
? ? #工程src路徑 這里如果是maven啟動的話去掉mybatis/? project=mybatis/src/main/java ? ? #工程存放mapper.xml路徑 ?這里如果是maven啟動的話去掉mybatis/? resource=mybatis/src/main/resources package_domain=com.practice.mybatis.entity package_mapper=mappers.test package_dao=com.practice.mybatis.dao package_service=com.practice.mybatis.service ? ? #\u6307\u5B9A\u6570\u636E\u8FDE\u63A5\u9A71\u52A8jar\u5730\u5740 ? classPath=D:/maven_lib/mysql/mysql-connector-java/5.1.30/mysql-connector-java-5.1.30.jar? jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8 jdbc.user=root jdbc.password=123456
generatorConfig.xml
<?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>
<!-- 引入配置文件 -->
<properties resource="generator.properties"/>
<!-- 數(shù)據(jù)庫驅(qū)動位置 -->
<classPathEntry location="${classPath}" />
<!-- 一個數(shù)據(jù)庫一個context, targetRuntime:此屬性用于指定生成的代碼的運(yùn)行時環(huán)境 ,MyBatis3:*這是默認(rèn)值*,MyBatis3Simple不生成Example查詢(避免后面一個一個表設(shè)置) defaultModelType:如何生成實(shí)體類,flat表示為每一張表生成一個實(shí)體類,推薦使用-->
<context id="mysqlTables" targetRuntime="com.practice.mybatis.TkMyBatis3Impl" defaultModelType="flat">
<!-- 注釋 type表示自定義注釋-->
<commentGenerator type="com.practice.mybatis.MyCommentGenerator">
<!-- 生成文件的編碼 (eclipse插件的時候這里并沒有什么卵用,需要在eclipse根目錄的eclipse.ini最后添加 -Dfile.encoding=UTF-8 )-->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 是否取消注釋 -->
<property name="suppressAllComments" value="false" />
<property name="addRemarkComments" value="true"/>
<!-- 是否生成注釋代時間戳 -->
<property name="suppressDate" value="true" />
<!-- 當(dāng)表名或者字段名為SQL關(guān)鍵字的時候,可以設(shè)置該屬性為true,MBG會自動給表名或字段名添加**分隔符** -->
<property name="autoDelimitKeywords" value="true"></property>
<!-- 由于beginningDelimiter和endingDelimiter的默認(rèn)值為雙引號("),在Mysql中不能這么寫,所以還要將這兩個默認(rèn)值改為**反單引號(`)** -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
</commentGenerator>
<!-- 數(shù)據(jù)庫的url、用戶名、密碼 -->
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}"
userId="${jdbc.user}"
password="${jdbc.password}">
</jdbcConnection>
<!-- 類型轉(zhuǎn)換 -->
<javaTypeResolver >
<!-- 是否使用bigDecimal, false可自動轉(zhuǎn)化以下類型(Long, Integer, Short, etc.) -->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="${package_domain}" targetProject="${project}">
<!-- 是否在當(dāng)前路徑下新加一層schema,eg:fase路徑com.goshop.domain", true:com.goshop.domain".[schemaName] -->
<property name="enableSubPackages" value="false" />
<!-- 是否針對string類型的字段在set的時候進(jìn)行trim調(diào)用 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成的映射文件包名和位置 -->
<sqlMapGenerator targetPackage="${package_mapper}" targetProject="${resource}">
<!-- 是否在當(dāng)前路徑下新加一層schema,eg:fase路徑com.goshop.domain", true:com.goshop.domain".[schemaName] -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 type 1、ANNOTATEDMAPPER注解形式 2、XMLMAPPER xml配置文件形式-->
<javaClientGenerator type="XMLMAPPER" targetPackage="${package_dao}" targetProject="${project}">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 生成那些表 tableName表名 mapperName 生成dao的名稱,domainObjectName應(yīng)于數(shù)據(jù)庫表的javaBean類名,enable*ByExample是否生成 example類 -->
<!-- <table tableName="sys_user" domainObjectName="SysUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/> -->
<!-- 忽略列,不生成bean 字段
<ignoreColumn column="FRED" />-->
<!-- 指定列的java數(shù)據(jù)類型
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />-->
<table tableName="%" mapperName="{0}DAO">
<columnOverride column="remarks" jdbcType="VARCHAR" />
</table>
</context>
</generatorConfiguration>
注意:這里由于需要自定義中文注釋,因此需要修改源碼,這里附上修改后的代碼。
MyCommentGenerator.java
這個文件是關(guān)于注釋的部分,只需要實(shí)現(xiàn)CommentGenerator接口就可以。
/**
* Copyright 2006-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.practice.mybatis;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.InnerClass;
import org.mybatis.generator.api.dom.java.InnerEnum;
import org.mybatis.generator.api.dom.java.JavaElement;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.Parameter;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.config.PropertyRegistry;
import org.mybatis.generator.internal.util.StringUtility;
/**
* 修改Mybatis Generator 生成的所有注釋的文檔
*
* @author wl
*/
public class MyCommentGenerator implements CommentGenerator {
/** The properties. */
private Properties properties;
/** The suppress date. */
private boolean suppressDate;
/** The suppress all comments. */
private boolean suppressAllComments;
/** The addition of table remark's comments.
* If suppressAllComments is true, this option is ignored*/
private boolean addRemarkComments;
private SimpleDateFormat dateFormat;
/**
* Instantiates a new default comment generator.
*/
public MyCommentGenerator() {
super();
properties = new Properties();
suppressDate = false;
suppressAllComments = false;
addRemarkComments = false;
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addJavaFileComment(org.mybatis.generator.api.dom.java.CompilationUnit)
*/
public void addJavaFileComment(final CompilationUnit compilationUnit) {
// add no file level comments by default
}
/**
* Adds a suitable comment to warn users that the element was generated, and when it was generated.
*
* @param xmlElement
* the xml element
*/
public void addComment(final XmlElement xmlElement) {
if (suppressAllComments) {
return;
}
xmlElement.addElement(new TextElement("<!--")); //$NON-NLS-1$
final StringBuilder sb = new StringBuilder();
// sb.append(" WARNING - "); //$NON-NLS-1$
sb.append(MergeConstants.NEW_ELEMENT_TAG);
xmlElement.addElement(new TextElement(sb.toString()));
// xmlElement
// .addElement(new TextElement(
// " This element is automatically generated by MyBatis Generator, do not modify.")); //$NON-NLS-1$
//
// final String s = getDateString();
// if (s != null) {
// sb.setLength(0);
// sb.append(" This element was generated on "); //$NON-NLS-1$
// sb.append(s);
// sb.append('.');
// xmlElement.addElement(new TextElement(sb.toString()));
// }
xmlElement.addElement(new TextElement("-->")); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addRootComment(org.mybatis.generator.api.dom.xml.XmlElement)
*/
public void addRootComment(final XmlElement rootElement) {
// add no document level comments by default
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addConfigurationProperties(java.util.Properties)
*/
public void addConfigurationProperties(final Properties properties) {
this.properties.putAll(properties);
suppressDate = isTrue(properties
.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
suppressAllComments = isTrue(properties
.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
addRemarkComments = isTrue(properties
.getProperty(PropertyRegistry.COMMENT_GENERATOR_ADD_REMARK_COMMENTS));
final String dateFormatString = properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_DATE_FORMAT);
if (StringUtility.stringHasValue(dateFormatString)) {
dateFormat = new SimpleDateFormat(dateFormatString);
}
}
public static boolean isTrue(String s) {
return "true".equalsIgnoreCase(s); //$NON-NLS-1$
}
/**
* This method adds the custom javadoc tag for. You may do nothing if you do not wish to include the Javadoc tag -
* however, if you do not include the Javadoc tag then the Java merge capability of the eclipse plugin will break.
*
* @param javaElement
* the java element
* @param markAsDoNotDelete
* the mark as do not delete
*/
protected void addJavadocTag(final JavaElement javaElement,
final boolean markAsDoNotDelete) {
javaElement.addJavaDocLine(" *"); //$NON-NLS-1$
final StringBuilder sb = new StringBuilder();
sb.append(" * "); //$NON-NLS-1$
sb.append(MergeConstants.NEW_ELEMENT_TAG);
if (markAsDoNotDelete) {
sb.append(" do_not_delete_during_merge"); //$NON-NLS-1$
}
final String s = getDateString();
if (s != null) {
sb.append(' ');
sb.append(s);
}
javaElement.addJavaDocLine(sb.toString());
}
/**
* This method returns a formated date string to include in the Javadoc tag
* and XML comments. You may return null if you do not want the date in
* these documentation elements.
*
* @return a string representing the current timestamp, or null
*/
protected String getDateString() {
if (suppressDate) {
return null;
} else if (dateFormat != null) {
return dateFormat.format(new Date());
} else {
return new Date().toString();
}
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addClassComment(org.mybatis.generator.api.dom.java.InnerClass, org.mybatis.generator.api.IntrospectedTable)
*/
public void addClassComment(final InnerClass innerClass,
final IntrospectedTable introspectedTable) {
if (suppressAllComments) {
return;
}
final StringBuilder sb = new StringBuilder();
innerClass.addJavaDocLine("/**"); //$NON-NLS-1$
innerClass
.addJavaDocLine(" * This class was generated by MyBatis Generator."); //$NON-NLS-1$
sb.append(" * This class corresponds to the database table "); //$NON-NLS-1$
sb.append(introspectedTable.getFullyQualifiedTable());
innerClass.addJavaDocLine(sb.toString());
addJavadocTag(innerClass, false);
innerClass.addJavaDocLine(" */"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addTopLevelClassComment(org.mybatis.generator.api.dom.java.TopLevelClass, org.mybatis.generator.api.IntrospectedTable)
*/
public void addModelClassComment(final TopLevelClass topLevelClass,
final IntrospectedTable introspectedTable) {
if (suppressAllComments || !addRemarkComments) {
return;
}
final StringBuilder sb = new StringBuilder();
topLevelClass.addJavaDocLine("/**"); //$NON-NLS-1$
final String remarks = introspectedTable.getRemarks();
if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
topLevelClass.addJavaDocLine(" * Database Table Remarks:");
final String[] remarkLines = remarks.split(System.getProperty("line.separator")); //$NON-NLS-1$
for (String remarkLine : remarkLines) {
topLevelClass.addJavaDocLine(" * " + remarkLine); //$NON-NLS-1$
}
}
// topLevelClass.addJavaDocLine(" *"); //$NON-NLS-1$
// topLevelClass
// .addJavaDocLine(" * This class was generated by MyBatis Generator."); //$NON-NLS-1$
// sb.append(" * This class corresponds to the database table "); //$NON-NLS-1$
sb.append(" * 對應(yīng)于數(shù)據(jù)庫表 "); //$NON-NLS-1$
sb.append(introspectedTable.getFullyQualifiedTable());
topLevelClass.addJavaDocLine(sb.toString());
addJavadocTag(topLevelClass, true);
topLevelClass.addJavaDocLine(" */"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addEnumComment(org.mybatis.generator.api.dom.java.InnerEnum, org.mybatis.generator.api.IntrospectedTable)
*/
public void addEnumComment(final InnerEnum innerEnum,
final IntrospectedTable introspectedTable) {
if (suppressAllComments) {
return;
}
// StringBuilder sb = new StringBuilder();
innerEnum.addJavaDocLine("/**"); //$NON-NLS-1$
// innerEnum
// .addJavaDocLine(" * This enum was generated by MyBatis Generator."); //$NON-NLS-1$
//
// sb.append(" * This enum corresponds to the database table "); //$NON-NLS-1$
// sb.append(introspectedTable.getFullyQualifiedTable());
// innerEnum.addJavaDocLine(sb.toString());
addJavadocTag(innerEnum, false);
innerEnum.addJavaDocLine(" */"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addFieldComment(org.mybatis.generator.api.dom.java.Field, org.mybatis.generator.api.IntrospectedTable, org.mybatis.generator.api.IntrospectedColumn)
*/
public void addFieldComment(final Field field,
final IntrospectedTable introspectedTable,
final IntrospectedColumn introspectedColumn) {
if (suppressAllComments) {
return;
}
field.addJavaDocLine("/**"); //$NON-NLS-1$
String remarks = introspectedColumn.getRemarks();
if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
field.addJavaDocLine(" * Database Column Remarks:");
final String[] remarkLines = remarks.split(System.getProperty("line.separator")); //$NON-NLS-1$
for (String remarkLine : remarkLines) {
field.addJavaDocLine(" * " + remarkLine); //$NON-NLS-1$
}
}
// field.addJavaDocLine(" *"); //$NON-NLS-1$
StringBuilder sb = new StringBuilder();
sb.append(" * "+introspectedTable.getFullyQualifiedTable());
sb.append('.');
sb.append(introspectedColumn.getActualColumnName());
sb.append(introspectedColumn.getRemarks()==null ? " " : " "+introspectedColumn.getRemarks());
field.addJavaDocLine(sb.toString());
addJavadocTag(field, false);
field.addJavaDocLine(" */"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addFieldComment(org.mybatis.generator.api.dom.java.Field, org.mybatis.generator.api.IntrospectedTable)
*/
public void addFieldComment(final Field field, final IntrospectedTable introspectedTable) {
if (suppressAllComments) {
return;
}
final StringBuilder sb = new StringBuilder();
field.addJavaDocLine("/**"); //$NON-NLS-1$
field
.addJavaDocLine(" * This field was generated by MyBatis Generator."); //$NON-NLS-1$
sb.append(" * This field corresponds to the database table "); //$NON-NLS-1$
sb.append(introspectedTable.getFullyQualifiedTable());
field.addJavaDocLine(sb.toString());
addJavadocTag(field, false);
field.addJavaDocLine(" */"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addGeneralMethodComment(org.mybatis.generator.api.dom.java.Method, org.mybatis.generator.api.IntrospectedTable)
*/
public void addGeneralMethodComment(final Method method,
final IntrospectedTable introspectedTable) {
if (suppressAllComments) {
return;
}
StringBuilder sb = new StringBuilder();
method.addJavaDocLine("/**"); //$NON-NLS-1$
// method
// .addJavaDocLine(" * This method was generated by MyBatis Generator."); //$NON-NLS-1$
//
// sb.append(" * This method corresponds to the database table "); //$NON-NLS-1$
// sb.append(introspectedTable.getFullyQualifiedTable());
List<Parameter> parameters = method.getParameters();
for (Parameter parameter : parameters) {
sb.append(" *@param ");
sb.append(parameter.getName());
sb.append(".");
method.addJavaDocLine(sb.toString());
sb.delete(0, sb.length());
}
method.addJavaDocLine(method.getReturnType().getShortName()==null ? ""
:" *@return "+method.getReturnType().getShortName()+".");
addJavadocTag(method, false);
method.addJavaDocLine(" */"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addGetterComment(org.mybatis.generator.api.dom.java.Method, org.mybatis.generator.api.IntrospectedTable, org.mybatis.generator.api.IntrospectedColumn)
*/
public void addGetterComment(final Method method,
final IntrospectedTable introspectedTable,
final IntrospectedColumn introspectedColumn) {
if (suppressAllComments) {
return;
}
StringBuilder sb = new StringBuilder();
method.addJavaDocLine("/**"); //$NON-NLS-1$
// method
// .addJavaDocLine(" * This method was generated by MyBatis Generator."); //$NON-NLS-1$
//
// sb.append(" * This method returns the value of the database column "); //$NON-NLS-1$
// sb.append(introspectedTable.getFullyQualifiedTable());
// sb.append('.');
// sb.append(introspectedColumn.getActualColumnName());
// method.addJavaDocLine(sb.toString());
//
// method.addJavaDocLine(" *"); //$NON-NLS-1$
//
// sb.setLength(0);
// sb.append(" * @return the value of "); //$NON-NLS-1$
// sb.append(introspectedTable.getFullyQualifiedTable());
// sb.append('.');
// sb.append(introspectedColumn.getActualColumnName());
sb.append(" * @return "+(
introspectedColumn.getActualColumnName()==null ? "":introspectedColumn.getActualColumnName()));
sb.append(" .");
method.addJavaDocLine(sb.toString());
addJavadocTag(method, false);
method.addJavaDocLine(" */"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addSetterComment(org.mybatis.generator.api.dom.java.Method, org.mybatis.generator.api.IntrospectedTable, org.mybatis.generator.api.IntrospectedColumn)
*/
public void addSetterComment(final Method method,
final IntrospectedTable introspectedTable,
final IntrospectedColumn introspectedColumn) {
if (suppressAllComments) {
return;
}
StringBuilder sb = new StringBuilder();
method.addJavaDocLine("/**"); //$NON-NLS-1$
// method
// .addJavaDocLine(" * This method was generated by MyBatis Generator."); //$NON-NLS-1$
//
// sb.append(" * This method sets the value of the database column "); //$NON-NLS-1$
// sb.append(introspectedTable.getFullyQualifiedTable());
// sb.append('.');
// sb.append(introspectedColumn.getActualColumnName());
// method.addJavaDocLine(sb.toString());
//
// method.addJavaDocLine(" *"); //$NON-NLS-1$
//
Parameter parm = method.getParameters().get(0);
sb.setLength(0);
sb.append(" * @param "); //$NON-NLS-1$
sb.append(parm.getName());
sb.append((introspectedColumn.getRemarks()==null ? " " : " "+introspectedColumn.getRemarks()));
sb.append(".");
// sb.append(" the value for "); //$NON-NLS-1$
// sb.append(introspectedTable.getFullyQualifiedTable());
// sb.append('.');
// sb.append(introspectedColumn.getActualColumnName());
method.addJavaDocLine(sb.toString());
addJavadocTag(method, false);
method.addJavaDocLine(" */"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.mybatis.generator.api.CommentGenerator#addClassComment(org.mybatis.generator.api.dom.java.InnerClass, org.mybatis.generator.api.IntrospectedTable, boolean)
*/
public void addClassComment(final InnerClass innerClass,
final IntrospectedTable introspectedTable, final boolean markAsDoNotDelete) {
if (suppressAllComments) {
return;
}
final StringBuilder sb = new StringBuilder();
innerClass.addJavaDocLine("/**"); //$NON-NLS-1$
innerClass
.addJavaDocLine(" * This class was generated by MyBatis Generator."); //$NON-NLS-1$
sb.append(" * This class corresponds to the database table "); //$NON-NLS-1$
sb.append(introspectedTable.getFullyQualifiedTable());
innerClass.addJavaDocLine(sb.toString());
addJavadocTag(innerClass, markAsDoNotDelete);
innerClass.addJavaDocLine(" */"); //$NON-NLS-1$
}
}
1.3.4 版本以后,MBG 在元素上提供了一個mapperName 的屬性,可以設(shè)置生成的 Mapper 名字。
但是因?yàn)?tableName 屬性支持通配符 %,在這種情況下就不能使用mapperName屬性設(shè)置了。為了解決這種情況,提供了一個插件可以用于通配符情況下的配置。
package com.practice.mybatis;
import java.text.MessageFormat;
import org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3SimpleImpl;
/**
* @author win7
*生成DAO后綴
*/
public class TkMyBatis3Impl extends IntrospectedTableMyBatis3SimpleImpl {
@Override
protected String calculateMyBatis3XmlMapperFileName() {
final StringBuilder sb = new StringBuilder();
if (stringHasValue(tableConfiguration.getMapperName())) {
String mapperName = tableConfiguration.getMapperName();
final int ind = mapperName.lastIndexOf('.');
if (ind != -1) {
mapperName = mapperName.substring(ind + 1);
}
//支持mapperName = "{0}Dao" 等用法
sb.append(MessageFormat.format(mapperName, fullyQualifiedTable.getDomainObjectName()));
sb.append(".xml"); //$NON-NLS-1$
} else {
sb.append(fullyQualifiedTable.getDomainObjectName());
sb.append("Mapper.xml"); //$NON-NLS-1$
}
return sb.toString();
}
public static boolean stringHasValue(final String s) {
return s != null && s.length() > 0;
}
@Override
protected void calculateJavaClientAttributes() {
if (context.getJavaClientGeneratorConfiguration() == null) {
return;
}
final StringBuilder sb = new StringBuilder();
sb.append(calculateJavaClientImplementationPackage());
sb.append('.');
sb.append(fullyQualifiedTable.getDomainObjectName());
sb.append("DAOImpl"); //$NON-NLS-1$
setDAOImplementationType(sb.toString());
sb.setLength(0);
sb.append(calculateJavaClientInterfacePackage());
sb.append('.');
sb.append(fullyQualifiedTable.getDomainObjectName());
sb.append("DAO"); //$NON-NLS-1$
setDAOInterfaceType(sb.toString());
sb.setLength(0);
sb.append(calculateJavaClientInterfacePackage());
sb.append('.');
if (stringHasValue(tableConfiguration.getMapperName())) {
//支持mapperName = "{0}Dao" 等用法
sb.append(MessageFormat.format(tableConfiguration.getMapperName(), fullyQualifiedTable.getDomainObjectName()));
} else {
sb.append(fullyQualifiedTable.getDomainObjectName());
sb.append("Mapper"); //$NON-NLS-1$
}
setMyBatis3JavaMapperType(sb.toString());
sb.setLength(0);
sb.append(calculateJavaClientInterfacePackage());
sb.append('.');
if (stringHasValue(tableConfiguration.getSqlProviderName())) {
//支持mapperName = "{0}SqlProvider" 等用法
sb.append(MessageFormat.format(tableConfiguration.getSqlProviderName(), fullyQualifiedTable.getDomainObjectName()));
} else {
sb.append(fullyQualifiedTable.getDomainObjectName());
sb.append("SqlProvider"); //$NON-NLS-1$
}
setMyBatis3SqlProviderType(sb.toString());
}
}
以上是所有的配置,下面設(shè)置maven啟動
IDEA下(wl.jar是需要添加中文注釋所修改的源碼后打的jar)
pom.xml
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>mygenerator</groupId>
<artifactId>com.mybatis.generator.wl</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}\src\main\webapp\WEB-INF\lib\com.mybatis.generator.wl.jar</systemPath>
</dependency>
</dependencies>
<configuration>
<!--配置文件的路徑-->
<configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
<!--允許移動生成的文件-->
<verbose>true</verbose>
<!--允許覆蓋生成的文件-->
<overwrite>true</overwrite>
</configuration>
</plugin>
maven配置
Command line:
mybatis-generator:generate
eclipse下
pom.xml配置同上
Goals
mybatis-generator:generate
注意:maven方式啟動的話,上面geterator.properties里的project與resource 需要去掉項(xiàng)目名稱。
generatorConfig.xml里面targetRuntime與自定義注釋的java文件配置的是修改完源碼導(dǎo)入到項(xiàng)目中jar的路徑。
3、如果開發(fā)工具為eclipse
可以安裝Generator的插件,然后生成generatorConfig.xml進(jìn)行修改配置。
最后通過右鍵就可以運(yùn)行。
自動生成MyBatis映射文件工具
問題
總是自己寫crud的操作太煩躁了,還不如直接自動生成一下curd的操作了,自己寫查詢的操作,接下來就提供給一個很好用的快捷生成mapper和mapper映射文件的工具類,將這個工具xml文件直接放到resource文件夾下就可以了!!
<build>
<finalName>com.jimi.house</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArguments>
<verbose/>
<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
</compilerArguments>
<!--<encoding>UTF-8</encoding>-->
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build><?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>
<!-- 數(shù)據(jù)庫驅(qū)動:選擇你的本地硬盤上面的數(shù)據(jù)庫驅(qū)動包-->
<classPathEntry location="D:/apache-maven-3.5.0/repo/mysql/mysql-connector-java/5.1.35/mysql-connector-java-5.1.35.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自動生成的注釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--數(shù)據(jù)庫鏈接URL,用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/identity" userId="root" password="root">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.chaimao.newparent.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.chaimao.newparent.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是數(shù)據(jù)庫中的表名或視圖名 domainObjectName是實(shí)體類名-->
<table tableName="identity_record" domainObjectName="IdentityRecord" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud feign服務(wù)熔斷下的異常處理操作
這篇文章主要介紹了SpringCloud feign服務(wù)熔斷下的異常處理操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Java實(shí)現(xiàn)一個簡單的長輪詢的示例代碼
長輪詢是與服務(wù)器保持即時通信的最簡單的方式,它不使用任何特定的協(xié)議,例如 WebSocket ,所以也不依賴于瀏覽器版本等外部條件的兼容性。本文將用Java實(shí)現(xiàn)一個簡單的長輪詢,需要的可以參考一下2022-08-08
基于Java web服務(wù)器簡單實(shí)現(xiàn)一個Servlet容器
這篇文章主要為大家詳細(xì)介紹了基于Java web服務(wù)器簡單實(shí)現(xiàn)一個Servlet容器,感興趣的小伙伴們可以參考一下2016-06-06
PageHelper引發(fā)的幽靈數(shù)據(jù)問題解析
這篇文章主要為大家介紹了PageHelper引發(fā)的幽靈數(shù)據(jù)問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
mybatis返回list<Integer>時resultType寫Integer問題
這篇文章主要介紹了mybatis返回list<Integer>時resultType寫Integer問題,具有很好的參考價值,希望對大家有所幫助,2023-12-12
解決SpringBoot整合ElasticSearch遇到的連接問題
這篇文章主要介紹了解決SpringBoot整合ElasticSearch遇到的連接問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
實(shí)體類使用@Builder,導(dǎo)致@ConfigurationProperties注入屬性失敗問題
這篇文章主要介紹了實(shí)體類使用@Builder,導(dǎo)致@ConfigurationProperties注入屬性失敗問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12

