经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
使用MyBatis-Generator如何自动生成映射文件
来源:jb51  时间:2022/2/9 11:18:03  对本文有异议

MyBatis-Generator自动生成映射文件

生成的方式一共有三种

1、使用cmd命令方式生成

首先在generator.xml中指定数据库驱动包位置,然后在mybatis-generator-core-1.3.1包下创建一个src文件夹(否则生成的文件没地方放)

生产的Mapper.xml文件与domain类放在一个报下面(否则无法映射)

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  3. <generatorConfiguration>
  4. <!-- 数据库驱动位置 -->
  5. <classPathEntry location="E:\mybatis-generator-core-1.3.1\mysql-connector-java-5.0.8-bin.jar" />
  6. <context id="DB2Tables" targetRuntime="MyBatis3">
  7. <commentGenerator>
  8. <property name="suppressAllComments" value="true" />
  9. </commentGenerator>
  10. <!-- 数据库的url、用户名、密码 -->
  11. <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/dbo" userId="root" password="123456">
  12. </jdbcConnection>
  13. <javaTypeResolver >
  14. <property name="forceBigDecimals" value="false" />
  15. </javaTypeResolver>
  16. <!-- 生成模型的包名和位置 -->
  17. <javaModelGenerator targetPackage="com.paywing.domain" targetProject="E:\mybatis-generator-core-1.3.1\src">
  18. <property name="enableSubPackages" value="true" />
  19. <property name="trimStrings" value="true" />
  20. </javaModelGenerator>
  21. <!-- 生成的映射文件包名和位置 -->
  22. <sqlMapGenerator targetPackage="com.paywing.mapping" targetProject="E:\mybatis-generator-core-1.3.1\src">
  23. <property name="enableSubPackages" value="true" />
  24. </sqlMapGenerator>
  25. <!-- 生成DAO的包名和位置 -->
  26. <javaClientGenerator type="XMLMAPPER" targetPackage="com.paywing.dao" targetProject="E:\mybatis-generator-core-1.3.1\src">
  27. <property name="enableSubPackages" value="true" />
  28. </javaClientGenerator>
  29. <!-- 生成那些表 tableName表名,domainObjectName应于数据库表的javaBean类名-->
  30. <table tableName="tb_bookinfo" domainObjectName="TB_BookInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
  31. <table tableName="tb_booktype" domainObjectName="TB_Booktype" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
  32. </context>
  33. </generatorConfiguration>

2、使用maven方式生成

(这种方式在各个工具下都能使用,推荐使用这种方式)

generator.properties

  1. ? ? #工程src路径 这里如果是maven启动的话去掉mybatis/?
  2. project=mybatis/src/main/java
  3. ? ? #工程存放mapper.xml路径 ?这里如果是maven启动的话去掉mybatis/?
  4. resource=mybatis/src/main/resources
  5. package_domain=com.practice.mybatis.entity
  6. package_mapper=mappers.test
  7. package_dao=com.practice.mybatis.dao
  8. package_service=com.practice.mybatis.service
  9. ? ? #\u6307\u5B9A\u6570\u636E\u8FDE\u63A5\u9A71\u52A8jar\u5730\u5740 ?
  10. classPath=D:/maven_lib/mysql/mysql-connector-java/5.1.30/mysql-connector-java-5.1.30.jar?
  11. jdbc.driver=com.mysql.jdbc.Driver
  12. jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
  13. jdbc.user=root
  14. jdbc.password=123456

generatorConfig.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <!-- 引入配置文件 -->
  7. <properties resource="generator.properties"/>
  8. <!-- 数据库驱动位置 -->
  9. <classPathEntry location="${classPath}" />
  10. <!-- 一个数据库一个context, targetRuntime:此属性用于指定生成的代码的运行时环境 ,MyBatis3:*这是默认值*,MyBatis3Simple不生成Example查询(避免后面一个一个表设置) defaultModelType:如何生成实体类,flat表示为每一张表生成一个实体类,推荐使用-->
  11. <context id="mysqlTables" targetRuntime="com.practice.mybatis.TkMyBatis3Impl" defaultModelType="flat">
  12. <!-- 注释 type表示自定义注释-->
  13. <commentGenerator type="com.practice.mybatis.MyCommentGenerator">
  14. <!-- 生成文件的编码 (eclipse插件的时候这里并没有什么卵用,需要在eclipse根目录的eclipse.ini最后添加 -Dfile.encoding=UTF-8 )-->
  15. <property name="javaFileEncoding" value="UTF-8"/>
  16. <!-- 是否取消注释 -->
  17. <property name="suppressAllComments" value="false" />
  18. <property name="addRemarkComments" value="true"/>
  19. <!-- 是否生成注释代时间戳 -->
  20. <property name="suppressDate" value="true" />
  21. <!-- 当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加**分隔符** -->
  22. <property name="autoDelimitKeywords" value="true"></property>
  23. <!-- 由于beginningDelimiter和endingDelimiter的默认值为双引号("),在Mysql中不能这么写,所以还要将这两个默认值改为**反单引号(`)** -->
  24. <property name="beginningDelimiter" value="`"/>
  25. <property name="endingDelimiter" value="`"/>
  26. </commentGenerator>
  27. <!-- 数据库的url、用户名、密码 -->
  28. <jdbcConnection driverClass="${jdbc.driver}"
  29. connectionURL="${jdbc.url}"
  30. userId="${jdbc.user}"
  31. password="${jdbc.password}">
  32. </jdbcConnection>
  33. <!-- 类型转换 -->
  34. <javaTypeResolver >
  35. <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
  36. <property name="forceBigDecimals" value="false" />
  37. </javaTypeResolver>
  38. <!-- 生成模型的包名和位置 -->
  39. <javaModelGenerator targetPackage="${package_domain}" targetProject="${project}">
  40. <!-- 是否在当前路径下新加一层schema,eg:fase路径com.goshop.domain", true:com.goshop.domain".[schemaName] -->
  41. <property name="enableSubPackages" value="false" />
  42. <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
  43. <property name="trimStrings" value="true" />
  44. </javaModelGenerator>
  45. <!-- 生成的映射文件包名和位置 -->
  46. <sqlMapGenerator targetPackage="${package_mapper}" targetProject="${resource}">
  47. <!-- 是否在当前路径下新加一层schema,eg:fase路径com.goshop.domain", true:com.goshop.domain".[schemaName] -->
  48. <property name="enableSubPackages" value="true" />
  49. </sqlMapGenerator>
  50. <!-- 生成DAO的包名和位置 type 1、ANNOTATEDMAPPER注解形式 2、XMLMAPPER xml配置文件形式-->
  51. <javaClientGenerator type="XMLMAPPER" targetPackage="${package_dao}" targetProject="${project}">
  52. <property name="enableSubPackages" value="true" />
  53. </javaClientGenerator>
  54. <!-- 生成那些表 tableName表名 mapperName 生成dao的名称,domainObjectName应于数据库表的javaBean类名,enable*ByExample是否生成 example类 -->
  55. <!-- <table tableName="sys_user" domainObjectName="SysUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/> -->
  56. <!-- 忽略列,不生成bean 字段
  57. <ignoreColumn column="FRED" />-->
  58. <!-- 指定列的java数据类型
  59. <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />-->
  60. <table tableName="%" mapperName="{0}DAO">
  61. <columnOverride column="remarks" jdbcType="VARCHAR" />
  62. </table>
  63. </context>
  64. </generatorConfiguration>

注意:这里由于需要自定义中文注释,因此需要修改源码,这里附上修改后的代码。

MyCommentGenerator.java

这个文件是关于注释的部分,只需要实现CommentGenerator接口就可以。

  1. /**
  2. * Copyright 2006-2016 the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.practice.mybatis;
  17. import java.text.SimpleDateFormat;
  18. import java.util.Date;
  19. import java.util.List;
  20. import java.util.Properties;
  21. import org.mybatis.generator.api.CommentGenerator;
  22. import org.mybatis.generator.api.IntrospectedColumn;
  23. import org.mybatis.generator.api.IntrospectedTable;
  24. import org.mybatis.generator.api.dom.java.CompilationUnit;
  25. import org.mybatis.generator.api.dom.java.Field;
  26. import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
  27. import org.mybatis.generator.api.dom.java.InnerClass;
  28. import org.mybatis.generator.api.dom.java.InnerEnum;
  29. import org.mybatis.generator.api.dom.java.JavaElement;
  30. import org.mybatis.generator.api.dom.java.Method;
  31. import org.mybatis.generator.api.dom.java.Parameter;
  32. import org.mybatis.generator.api.dom.java.TopLevelClass;
  33. import org.mybatis.generator.api.dom.xml.TextElement;
  34. import org.mybatis.generator.api.dom.xml.XmlElement;
  35. import org.mybatis.generator.config.MergeConstants;
  36. import org.mybatis.generator.config.PropertyRegistry;
  37. import org.mybatis.generator.internal.util.StringUtility;
  38. /**
  39. * 修改Mybatis Generator 生成的所有注释的文档
  40. *
  41. * @author wl
  42. */
  43. public class MyCommentGenerator implements CommentGenerator {
  44. /** The properties. */
  45. private Properties properties;
  46. /** The suppress date. */
  47. private boolean suppressDate;
  48. /** The suppress all comments. */
  49. private boolean suppressAllComments;
  50. /** The addition of table remark's comments.
  51. * If suppressAllComments is true, this option is ignored*/
  52. private boolean addRemarkComments;
  53. private SimpleDateFormat dateFormat;
  54. /**
  55. * Instantiates a new default comment generator.
  56. */
  57. public MyCommentGenerator() {
  58. super();
  59. properties = new Properties();
  60. suppressDate = false;
  61. suppressAllComments = false;
  62. addRemarkComments = false;
  63. }
  64. /* (non-Javadoc)
  65. * @see org.mybatis.generator.api.CommentGenerator#addJavaFileComment(org.mybatis.generator.api.dom.java.CompilationUnit)
  66. */
  67. public void addJavaFileComment(final CompilationUnit compilationUnit) {
  68. // add no file level comments by default
  69. }
  70. /**
  71. * Adds a suitable comment to warn users that the element was generated, and when it was generated.
  72. *
  73. * @param xmlElement
  74. * the xml element
  75. */
  76. public void addComment(final XmlElement xmlElement) {
  77. if (suppressAllComments) {
  78. return;
  79. }
  80. xmlElement.addElement(new TextElement("<!--")); //$NON-NLS-1$
  81. final StringBuilder sb = new StringBuilder();
  82. // sb.append(" WARNING - "); //$NON-NLS-1$
  83. sb.append(MergeConstants.NEW_ELEMENT_TAG);
  84. xmlElement.addElement(new TextElement(sb.toString()));
  85. // xmlElement
  86. // .addElement(new TextElement(
  87. // " This element is automatically generated by MyBatis Generator, do not modify.")); //$NON-NLS-1$
  88. //
  89. // final String s = getDateString();
  90. // if (s != null) {
  91. // sb.setLength(0);
  92. // sb.append(" This element was generated on "); //$NON-NLS-1$
  93. // sb.append(s);
  94. // sb.append('.');
  95. // xmlElement.addElement(new TextElement(sb.toString()));
  96. // }
  97. xmlElement.addElement(new TextElement("-->")); //$NON-NLS-1$
  98. }
  99. /* (non-Javadoc)
  100. * @see org.mybatis.generator.api.CommentGenerator#addRootComment(org.mybatis.generator.api.dom.xml.XmlElement)
  101. */
  102. public void addRootComment(final XmlElement rootElement) {
  103. // add no document level comments by default
  104. }
  105. /* (non-Javadoc)
  106. * @see org.mybatis.generator.api.CommentGenerator#addConfigurationProperties(java.util.Properties)
  107. */
  108. public void addConfigurationProperties(final Properties properties) {
  109. this.properties.putAll(properties);
  110. suppressDate = isTrue(properties
  111. .getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
  112. suppressAllComments = isTrue(properties
  113. .getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
  114. addRemarkComments = isTrue(properties
  115. .getProperty(PropertyRegistry.COMMENT_GENERATOR_ADD_REMARK_COMMENTS));
  116. final String dateFormatString = properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_DATE_FORMAT);
  117. if (StringUtility.stringHasValue(dateFormatString)) {
  118. dateFormat = new SimpleDateFormat(dateFormatString);
  119. }
  120. }
  121. public static boolean isTrue(String s) {
  122. return "true".equalsIgnoreCase(s); //$NON-NLS-1$
  123. }
  124. /**
  125. * This method adds the custom javadoc tag for. You may do nothing if you do not wish to include the Javadoc tag -
  126. * however, if you do not include the Javadoc tag then the Java merge capability of the eclipse plugin will break.
  127. *
  128. * @param javaElement
  129. * the java element
  130. * @param markAsDoNotDelete
  131. * the mark as do not delete
  132. */
  133. protected void addJavadocTag(final JavaElement javaElement,
  134. final boolean markAsDoNotDelete) {
  135. javaElement.addJavaDocLine(" *"); //$NON-NLS-1$
  136. final StringBuilder sb = new StringBuilder();
  137. sb.append(" * "); //$NON-NLS-1$
  138. sb.append(MergeConstants.NEW_ELEMENT_TAG);
  139. if (markAsDoNotDelete) {
  140. sb.append(" do_not_delete_during_merge"); //$NON-NLS-1$
  141. }
  142. final String s = getDateString();
  143. if (s != null) {
  144. sb.append(' ');
  145. sb.append(s);
  146. }
  147. javaElement.addJavaDocLine(sb.toString());
  148. }
  149. /**
  150. * This method returns a formated date string to include in the Javadoc tag
  151. * and XML comments. You may return null if you do not want the date in
  152. * these documentation elements.
  153. *
  154. * @return a string representing the current timestamp, or null
  155. */
  156. protected String getDateString() {
  157. if (suppressDate) {
  158. return null;
  159. } else if (dateFormat != null) {
  160. return dateFormat.format(new Date());
  161. } else {
  162. return new Date().toString();
  163. }
  164. }
  165. /* (non-Javadoc)
  166. * @see org.mybatis.generator.api.CommentGenerator#addClassComment(org.mybatis.generator.api.dom.java.InnerClass, org.mybatis.generator.api.IntrospectedTable)
  167. */
  168. public void addClassComment(final InnerClass innerClass,
  169. final IntrospectedTable introspectedTable) {
  170. if (suppressAllComments) {
  171. return;
  172. }
  173. final StringBuilder sb = new StringBuilder();
  174. innerClass.addJavaDocLine("/**"); //$NON-NLS-1$
  175. innerClass
  176. .addJavaDocLine(" * This class was generated by MyBatis Generator."); //$NON-NLS-1$
  177. sb.append(" * This class corresponds to the database table "); //$NON-NLS-1$
  178. sb.append(introspectedTable.getFullyQualifiedTable());
  179. innerClass.addJavaDocLine(sb.toString());
  180. addJavadocTag(innerClass, false);
  181. innerClass.addJavaDocLine(" */"); //$NON-NLS-1$
  182. }
  183. /* (non-Javadoc)
  184. * @see org.mybatis.generator.api.CommentGenerator#addTopLevelClassComment(org.mybatis.generator.api.dom.java.TopLevelClass, org.mybatis.generator.api.IntrospectedTable)
  185. */
  186. public void addModelClassComment(final TopLevelClass topLevelClass,
  187. final IntrospectedTable introspectedTable) {
  188. if (suppressAllComments || !addRemarkComments) {
  189. return;
  190. }
  191. final StringBuilder sb = new StringBuilder();
  192. topLevelClass.addJavaDocLine("/**"); //$NON-NLS-1$
  193. final String remarks = introspectedTable.getRemarks();
  194. if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
  195. topLevelClass.addJavaDocLine(" * Database Table Remarks:");
  196. final String[] remarkLines = remarks.split(System.getProperty("line.separator")); //$NON-NLS-1$
  197. for (String remarkLine : remarkLines) {
  198. topLevelClass.addJavaDocLine(" * " + remarkLine); //$NON-NLS-1$
  199. }
  200. }
  201. // topLevelClass.addJavaDocLine(" *"); //$NON-NLS-1$
  202. // topLevelClass
  203. // .addJavaDocLine(" * This class was generated by MyBatis Generator."); //$NON-NLS-1$
  204. // sb.append(" * This class corresponds to the database table "); //$NON-NLS-1$
  205. sb.append(" * 对应于数据库表 "); //$NON-NLS-1$
  206. sb.append(introspectedTable.getFullyQualifiedTable());
  207. topLevelClass.addJavaDocLine(sb.toString());
  208. addJavadocTag(topLevelClass, true);
  209. topLevelClass.addJavaDocLine(" */"); //$NON-NLS-1$
  210. }
  211. /* (non-Javadoc)
  212. * @see org.mybatis.generator.api.CommentGenerator#addEnumComment(org.mybatis.generator.api.dom.java.InnerEnum, org.mybatis.generator.api.IntrospectedTable)
  213. */
  214. public void addEnumComment(final InnerEnum innerEnum,
  215. final IntrospectedTable introspectedTable) {
  216. if (suppressAllComments) {
  217. return;
  218. }
  219. // StringBuilder sb = new StringBuilder();
  220. innerEnum.addJavaDocLine("/**"); //$NON-NLS-1$
  221. // innerEnum
  222. // .addJavaDocLine(" * This enum was generated by MyBatis Generator."); //$NON-NLS-1$
  223. //
  224. // sb.append(" * This enum corresponds to the database table "); //$NON-NLS-1$
  225. // sb.append(introspectedTable.getFullyQualifiedTable());
  226. // innerEnum.addJavaDocLine(sb.toString());
  227. addJavadocTag(innerEnum, false);
  228. innerEnum.addJavaDocLine(" */"); //$NON-NLS-1$
  229. }
  230. /* (non-Javadoc)
  231. * @see org.mybatis.generator.api.CommentGenerator#addFieldComment(org.mybatis.generator.api.dom.java.Field, org.mybatis.generator.api.IntrospectedTable, org.mybatis.generator.api.IntrospectedColumn)
  232. */
  233. public void addFieldComment(final Field field,
  234. final IntrospectedTable introspectedTable,
  235. final IntrospectedColumn introspectedColumn) {
  236. if (suppressAllComments) {
  237. return;
  238. }
  239. field.addJavaDocLine("/**"); //$NON-NLS-1$
  240. String remarks = introspectedColumn.getRemarks();
  241. if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
  242. field.addJavaDocLine(" * Database Column Remarks:");
  243. final String[] remarkLines = remarks.split(System.getProperty("line.separator")); //$NON-NLS-1$
  244. for (String remarkLine : remarkLines) {
  245. field.addJavaDocLine(" * " + remarkLine); //$NON-NLS-1$
  246. }
  247. }
  248. // field.addJavaDocLine(" *"); //$NON-NLS-1$
  249. StringBuilder sb = new StringBuilder();
  250. sb.append(" * "+introspectedTable.getFullyQualifiedTable());
  251. sb.append('.');
  252. sb.append(introspectedColumn.getActualColumnName());
  253. sb.append(introspectedColumn.getRemarks()==null ? " " : " "+introspectedColumn.getRemarks());
  254. field.addJavaDocLine(sb.toString());
  255. addJavadocTag(field, false);
  256. field.addJavaDocLine(" */"); //$NON-NLS-1$
  257. }
  258. /* (non-Javadoc)
  259. * @see org.mybatis.generator.api.CommentGenerator#addFieldComment(org.mybatis.generator.api.dom.java.Field, org.mybatis.generator.api.IntrospectedTable)
  260. */
  261. public void addFieldComment(final Field field, final IntrospectedTable introspectedTable) {
  262. if (suppressAllComments) {
  263. return;
  264. }
  265. final StringBuilder sb = new StringBuilder();
  266. field.addJavaDocLine("/**"); //$NON-NLS-1$
  267. field
  268. .addJavaDocLine(" * This field was generated by MyBatis Generator."); //$NON-NLS-1$
  269. sb.append(" * This field corresponds to the database table "); //$NON-NLS-1$
  270. sb.append(introspectedTable.getFullyQualifiedTable());
  271. field.addJavaDocLine(sb.toString());
  272. addJavadocTag(field, false);
  273. field.addJavaDocLine(" */"); //$NON-NLS-1$
  274. }
  275. /* (non-Javadoc)
  276. * @see org.mybatis.generator.api.CommentGenerator#addGeneralMethodComment(org.mybatis.generator.api.dom.java.Method, org.mybatis.generator.api.IntrospectedTable)
  277. */
  278. public void addGeneralMethodComment(final Method method,
  279. final IntrospectedTable introspectedTable) {
  280. if (suppressAllComments) {
  281. return;
  282. }
  283. StringBuilder sb = new StringBuilder();
  284. method.addJavaDocLine("/**"); //$NON-NLS-1$
  285. // method
  286. // .addJavaDocLine(" * This method was generated by MyBatis Generator."); //$NON-NLS-1$
  287. //
  288. // sb.append(" * This method corresponds to the database table "); //$NON-NLS-1$
  289. // sb.append(introspectedTable.getFullyQualifiedTable());
  290. List<Parameter> parameters = method.getParameters();
  291. for (Parameter parameter : parameters) {
  292. sb.append(" *@param ");
  293. sb.append(parameter.getName());
  294. sb.append(".");
  295. method.addJavaDocLine(sb.toString());
  296. sb.delete(0, sb.length());
  297. }
  298. method.addJavaDocLine(method.getReturnType().getShortName()==null ? ""
  299. :" *@return "+method.getReturnType().getShortName()+".");
  300. addJavadocTag(method, false);
  301. method.addJavaDocLine(" */"); //$NON-NLS-1$
  302. }
  303. /* (non-Javadoc)
  304. * @see org.mybatis.generator.api.CommentGenerator#addGetterComment(org.mybatis.generator.api.dom.java.Method, org.mybatis.generator.api.IntrospectedTable, org.mybatis.generator.api.IntrospectedColumn)
  305. */
  306. public void addGetterComment(final Method method,
  307. final IntrospectedTable introspectedTable,
  308. final IntrospectedColumn introspectedColumn) {
  309. if (suppressAllComments) {
  310. return;
  311. }
  312. StringBuilder sb = new StringBuilder();
  313. method.addJavaDocLine("/**"); //$NON-NLS-1$
  314. // method
  315. // .addJavaDocLine(" * This method was generated by MyBatis Generator."); //$NON-NLS-1$
  316. //
  317. // sb.append(" * This method returns the value of the database column "); //$NON-NLS-1$
  318. // sb.append(introspectedTable.getFullyQualifiedTable());
  319. // sb.append('.');
  320. // sb.append(introspectedColumn.getActualColumnName());
  321. // method.addJavaDocLine(sb.toString());
  322. //
  323. // method.addJavaDocLine(" *"); //$NON-NLS-1$
  324. //
  325. // sb.setLength(0);
  326. // sb.append(" * @return the value of "); //$NON-NLS-1$
  327. // sb.append(introspectedTable.getFullyQualifiedTable());
  328. // sb.append('.');
  329. // sb.append(introspectedColumn.getActualColumnName());
  330. sb.append(" * @return "+(
  331. introspectedColumn.getActualColumnName()==null ? "":introspectedColumn.getActualColumnName()));
  332. sb.append(" .");
  333. method.addJavaDocLine(sb.toString());
  334. addJavadocTag(method, false);
  335. method.addJavaDocLine(" */"); //$NON-NLS-1$
  336. }
  337. /* (non-Javadoc)
  338. * @see org.mybatis.generator.api.CommentGenerator#addSetterComment(org.mybatis.generator.api.dom.java.Method, org.mybatis.generator.api.IntrospectedTable, org.mybatis.generator.api.IntrospectedColumn)
  339. */
  340. public void addSetterComment(final Method method,
  341. final IntrospectedTable introspectedTable,
  342. final IntrospectedColumn introspectedColumn) {
  343. if (suppressAllComments) {
  344. return;
  345. }
  346. StringBuilder sb = new StringBuilder();
  347. method.addJavaDocLine("/**"); //$NON-NLS-1$
  348. // method
  349. // .addJavaDocLine(" * This method was generated by MyBatis Generator."); //$NON-NLS-1$
  350. //
  351. // sb.append(" * This method sets the value of the database column "); //$NON-NLS-1$
  352. // sb.append(introspectedTable.getFullyQualifiedTable());
  353. // sb.append('.');
  354. // sb.append(introspectedColumn.getActualColumnName());
  355. // method.addJavaDocLine(sb.toString());
  356. //
  357. // method.addJavaDocLine(" *"); //$NON-NLS-1$
  358. //
  359. Parameter parm = method.getParameters().get(0);
  360. sb.setLength(0);
  361. sb.append(" * @param "); //$NON-NLS-1$
  362. sb.append(parm.getName());
  363. sb.append((introspectedColumn.getRemarks()==null ? " " : " "+introspectedColumn.getRemarks()));
  364. sb.append(".");
  365. // sb.append(" the value for "); //$NON-NLS-1$
  366. // sb.append(introspectedTable.getFullyQualifiedTable());
  367. // sb.append('.');
  368. // sb.append(introspectedColumn.getActualColumnName());
  369. method.addJavaDocLine(sb.toString());
  370. addJavadocTag(method, false);
  371. method.addJavaDocLine(" */"); //$NON-NLS-1$
  372. }
  373. /* (non-Javadoc)
  374. * @see org.mybatis.generator.api.CommentGenerator#addClassComment(org.mybatis.generator.api.dom.java.InnerClass, org.mybatis.generator.api.IntrospectedTable, boolean)
  375. */
  376. public void addClassComment(final InnerClass innerClass,
  377. final IntrospectedTable introspectedTable, final boolean markAsDoNotDelete) {
  378. if (suppressAllComments) {
  379. return;
  380. }
  381. final StringBuilder sb = new StringBuilder();
  382. innerClass.addJavaDocLine("/**"); //$NON-NLS-1$
  383. innerClass
  384. .addJavaDocLine(" * This class was generated by MyBatis Generator."); //$NON-NLS-1$
  385. sb.append(" * This class corresponds to the database table "); //$NON-NLS-1$
  386. sb.append(introspectedTable.getFullyQualifiedTable());
  387. innerClass.addJavaDocLine(sb.toString());
  388. addJavadocTag(innerClass, markAsDoNotDelete);
  389. innerClass.addJavaDocLine(" */"); //$NON-NLS-1$
  390. }
  391. }

 1.3.4 版本以后,MBG 在元素上提供了一个mapperName 的属性,可以设置生成的 Mapper 名字。

但是因为 tableName 属性支持通配符 %,在这种情况下就不能使用mapperName属性设置了。为了解决这种情况,提供了一个插件可以用于通配符情况下的配置。

  1. package com.practice.mybatis;
  2. import java.text.MessageFormat;
  3. import org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3SimpleImpl;
  4. /**
  5. * @author win7
  6. *生成DAO后缀
  7. */
  8. public class TkMyBatis3Impl extends IntrospectedTableMyBatis3SimpleImpl {
  9. @Override
  10. protected String calculateMyBatis3XmlMapperFileName() {
  11. final StringBuilder sb = new StringBuilder();
  12. if (stringHasValue(tableConfiguration.getMapperName())) {
  13. String mapperName = tableConfiguration.getMapperName();
  14. final int ind = mapperName.lastIndexOf('.');
  15. if (ind != -1) {
  16. mapperName = mapperName.substring(ind + 1);
  17. }
  18. //支持mapperName = "{0}Dao" 等用法
  19. sb.append(MessageFormat.format(mapperName, fullyQualifiedTable.getDomainObjectName()));
  20. sb.append(".xml"); //$NON-NLS-1$
  21. } else {
  22. sb.append(fullyQualifiedTable.getDomainObjectName());
  23. sb.append("Mapper.xml"); //$NON-NLS-1$
  24. }
  25. return sb.toString();
  26. }
  27. public static boolean stringHasValue(final String s) {
  28. return s != null && s.length() > 0;
  29. }
  30. @Override
  31. protected void calculateJavaClientAttributes() {
  32. if (context.getJavaClientGeneratorConfiguration() == null) {
  33. return;
  34. }
  35. final StringBuilder sb = new StringBuilder();
  36. sb.append(calculateJavaClientImplementationPackage());
  37. sb.append('.');
  38. sb.append(fullyQualifiedTable.getDomainObjectName());
  39. sb.append("DAOImpl"); //$NON-NLS-1$
  40. setDAOImplementationType(sb.toString());
  41. sb.setLength(0);
  42. sb.append(calculateJavaClientInterfacePackage());
  43. sb.append('.');
  44. sb.append(fullyQualifiedTable.getDomainObjectName());
  45. sb.append("DAO"); //$NON-NLS-1$
  46. setDAOInterfaceType(sb.toString());
  47. sb.setLength(0);
  48. sb.append(calculateJavaClientInterfacePackage());
  49. sb.append('.');
  50. if (stringHasValue(tableConfiguration.getMapperName())) {
  51. //支持mapperName = "{0}Dao" 等用法
  52. sb.append(MessageFormat.format(tableConfiguration.getMapperName(), fullyQualifiedTable.getDomainObjectName()));
  53. } else {
  54. sb.append(fullyQualifiedTable.getDomainObjectName());
  55. sb.append("Mapper"); //$NON-NLS-1$
  56. }
  57. setMyBatis3JavaMapperType(sb.toString());
  58. sb.setLength(0);
  59. sb.append(calculateJavaClientInterfacePackage());
  60. sb.append('.');
  61. if (stringHasValue(tableConfiguration.getSqlProviderName())) {
  62. //支持mapperName = "{0}SqlProvider" 等用法
  63. sb.append(MessageFormat.format(tableConfiguration.getSqlProviderName(), fullyQualifiedTable.getDomainObjectName()));
  64. } else {
  65. sb.append(fullyQualifiedTable.getDomainObjectName());
  66. sb.append("SqlProvider"); //$NON-NLS-1$
  67. }
  68. setMyBatis3SqlProviderType(sb.toString());
  69. }
  70. }

以上是所有的配置,下面设置maven启动

IDEA下(wl.jar是需要添加中文注释所修改的源码后打的jar)

pom.xml

  1. <plugin>
  2. <groupId>org.mybatis.generator</groupId>
  3. <artifactId>mybatis-generator-maven-plugin</artifactId>
  4. <version>1.3.5</version>
  5. <dependencies>
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. <version>5.1.30</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>mygenerator</groupId>
  13. <artifactId>com.mybatis.generator.wl</artifactId>
  14. <version>1.0</version>
  15. <scope>system</scope>
  16. <systemPath>${basedir}\src\main\webapp\WEB-INF\lib\com.mybatis.generator.wl.jar</systemPath>
  17. </dependency>
  18. </dependencies>
  19. <configuration>
  20. <!--配置文件的路径-->
  21. <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
  22. <!--允许移动生成的文件-->
  23. <verbose>true</verbose>
  24. <!--允许覆盖生成的文件-->
  25. <overwrite>true</overwrite>
  26. </configuration>
  27. </plugin>

maven配置

Command line:

mybatis-generator:generate

eclipse下

pom.xml配置同上

Goals

mybatis-generator:generate

注意:maven方式启动的话,上面geterator.properties里的project与resource 需要去掉项目名称。

generatorConfig.xml里面targetRuntime与自定义注释的java文件配置的是修改完源码导入到项目中jar的路径。

3、如果开发工具为eclipse

可以安装Generator的插件,然后生成generatorConfig.xml进行修改配置。

最后通过右键就可以运行。

自动生成MyBatis映射文件工具

问题

总是自己写crud的操作太烦躁了,还不如直接自动生成一下curd的操作了,自己写查询的操作,接下来就提供给一个很好用的快捷生成mapper和mapper映射文件的工具类,将这个工具xml文件直接放到resource文件夹下就可以了!!

  1. <build>
  2. <finalName>com.jimi.house</finalName>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-compiler-plugin</artifactId>
  7. <version>3.1</version>
  8. <configuration>
  9. <source>1.8</source>
  10. <target>1.8</target>
  11. <compilerArguments>
  12. <verbose/>
  13. <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
  14. </compilerArguments>
  15. <!--<encoding>UTF-8</encoding>-->
  16. </configuration>
  17. </plugin>
  18. <plugin>
  19. <groupId>org.mybatis.generator</groupId>
  20. <artifactId>mybatis-generator-maven-plugin</artifactId>
  21. <version>1.3.2</version>
  22. <configuration>
  23. <verbose>true</verbose>
  24. <overwrite>true</overwrite>
  25. </configuration>
  26. </plugin>
  27. </plugins>
  28. </build>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
  7. <classPathEntry location="D:/apache-maven-3.5.0/repo/mysql/mysql-connector-java/5.1.35/mysql-connector-java-5.1.35.jar"/>
  8. <context id="DB2Tables" targetRuntime="MyBatis3">
  9. <commentGenerator>
  10. <property name="suppressDate" value="true"/>
  11. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  12. <property name="suppressAllComments" value="true"/>
  13. </commentGenerator>
  14. <!--数据库链接URL,用户名、密码 -->
  15. <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/identity" userId="root" password="root">
  16. </jdbcConnection>
  17. <javaTypeResolver>
  18. <property name="forceBigDecimals" value="false"/>
  19. </javaTypeResolver>
  20. <!-- 生成模型的包名和位置-->
  21. <javaModelGenerator targetPackage="com.chaimao.newparent.entity" targetProject="src/main/java">
  22. <property name="enableSubPackages" value="true"/>
  23. <property name="trimStrings" value="true"/>
  24. </javaModelGenerator>
  25. <!-- 生成映射文件的包名和位置-->
  26. <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
  27. <property name="enableSubPackages" value="true"/>
  28. </sqlMapGenerator>
  29. <!-- 生成DAO的包名和位置-->
  30. <javaClientGenerator type="XMLMAPPER" targetPackage="com.chaimao.newparent.mapper" targetProject="src/main/java">
  31. <property name="enableSubPackages" value="true"/>
  32. </javaClientGenerator>
  33. <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
  34. <table tableName="identity_record" domainObjectName="IdentityRecord" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
  35. </context>
  36. </generatorConfiguration>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号