介绍

Mybatis Generator(MBG)是Mybatis的一个代码生成工具。MBG解决了对数据库操作有最大影响的一些CRUD操作,很大程度上提升开发效率。如果需要联合查询仍然需要手写sql。相信很多人都听说过微服务,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在一个微服务的开发过程中很可能只关注对单表的操作。所以MBG在开发过程中可以快速的生成代码提升开发效率。

SSM框架——使用MyBatis Generator自动创建代码

本文将说到在springboot的项目中如何去配置(XML形式和Java配置类形式)和使用MBG以及MBG生成代码的两种方式(XML形式和注解形式),在springboot中更推荐去使用注解的形式。

MBG配置

  1. 添加依赖

  1. <dependency>
  2. <groupId>org.mybatis.generator</groupId>
  3. <artifactId>mybatis-generator-core</artifactId>
  4. <version>1.3.5</version>
  5. </dependency>

2.XML配置


  1. 配置示例:在新建springboot项目的根目录下创建mbg.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. <context id="DB2Tables" targetRuntime="MyBatis3">
  7. <commentGenerator>
  8. <!-- 是否自动去除生成注释 true 不生成-->
  9. <property name="suppressAllComments" value="true"/>
  10. <!--生成的注释包含时间戳-->
  11. <!-- <property name="suppressDate" value="true"/> -->
  12. </commentGenerator>
  13. <!-- 数据库连接信息 -->
  14. <jdbcConnection
  15. driverClass="com.mysql.jdbc.Driver"
  16. connectionURL="jdbc:mysql://localhost:3306/definesys"
  17. userId="root"
  18. password="welcome1">
  19. </jdbcConnection>
  20. <!-- 默认false,把JDBC DECIMAL NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
  21. NUMERIC 类型解析为java.math.BigDecimal -->
  22. <javaTypeResolver>
  23. <property name="forceBigDecimals" value="true"/>
  24. </javaTypeResolver>
  25. <!-- 实体类 bean 带有getset方法的bean -->
  26. <javaModelGenerator targetPackage="com.mgb.domain" targetProject="src/main/java">
  27. <property name="enableSubPackages" value="true" />
  28. <property name="trimStrings" value="true" />
  29. </javaModelGenerator>
  30. <!-- sql语句相关的xml或者注解的生成包路径 -->
  31. <sqlMapGenerator targetPackage="com.mgb.mapper" targetProject="src/main/java">
  32. <property name="enableSubPackages" value="true" />
  33. </sqlMapGenerator>
  34. <!-- 生成的接口所在的位置 注解type="ANNOTATEDMAPPER" xml type="XMLMAPPER" -->
  35. <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.mgb.dao" targetProject="src/main/java">
  36. <property name="enableSubPackages" value="true" />
  37. </javaClientGenerator>
  38. <table tableName="user_info" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
  39. <property name="constructorBased" value="false" />
  40. <!-- 数据库表主键 -->
  41. <generatedKey column="id" sqlStatement="JDBC" identity="true" />
  42. </table>
  43. </context>
  44. </generatorConfiguration>

配置详解


  1. <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration
  2. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  3. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  4. <!-- 配置生成器 -->
  5. <generatorConfiguration>
  6. <!-- 可以用于加载配置项或者配置文件,在整个配置文件中就可以使用${propertyKey}的方式来引用配置项
  7. resource:配置资源加载地址,使用resourceMBGclasspath开始找,比如com/myproject/generatorConfig.properties
  8. url:配置资源加载地质,使用URL的方式,比如file:///C:/myfolder/generatorConfig.properties.
  9. 注意,两个属性只能选址一个;
  10. 另外,如果使用了mybatis-generator-maven-plugin,那么在pom.xml中定义的properties都可以直接在generatorConfig.xml中使用
  11. <properties resource="" url="" />
  12. -->
  13. <!-- MBG工作的时候,需要额外加载的依赖包
  14. location属性指明加载jar/zip包的全路径
  15. <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
  16. -->
  17. <!--
  18. context:生成一组对象的环境
  19. id:必选,上下文id,用于在生成错误时提示
  20. defaultModelType:指定生成对象的样式
  21. 1conditional:类似hierarchical
  22. 2flat:所有内容(主键,blob)等全部生成在一个对象中;
  23. 3hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class)
  24. targetRuntime:
  25. 1MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample
  26. 2MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample
  27. introspectedColumnImpl:类全限定名,用于扩展MBG
  28. -->
  29. <context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple" >
  30. <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
  31. 一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖
  32. -->
  33. <property name="autoDelimitKeywords" value="false"/>
  34. <!-- 生成的Java文件的编码 -->
  35. <property name="javaFileEncoding" value="UTF-8"/>
  36. <!-- 格式化java代码 -->
  37. <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
  38. <!-- 格式化XML代码 -->
  39. <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
  40. <!-- beginningDelimiterendingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
  41. <property name="beginningDelimiter" value="`"/>
  42. <property name="endingDelimiter" value="`"/>
  43. <!-- 必须要有的,使用这个配置链接数据库
  44. @TODO:是否可以扩展
  45. -->
  46. <jdbcConnection driver connectionURL="jdbc:mysql:///pss" userId="root" password="admin">
  47. <!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 -->
  48. </jdbcConnection>
  49. <!-- java类型处理器
  50. 用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl;
  51. 注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型;
  52. -->
  53. <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
  54. <!--
  55. true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
  56. false:默认,
  57. scale>0;length>18:使用BigDecimal;
  58. scale=0;length[10,18]:使用Long;
  59. scale=0;length[5,9]:使用Integer;
  60. scale=0;length<5:使用Short;
  61. -->
  62. <property name="forceBigDecimals" value="false"/>
  63. </javaTypeResolver>
  64. <!-- java模型创建器,是必须要的元素
  65. 负责:1,key类(见context的defaultModelType);2,java类;3,查询类
  66. targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
  67. targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
  68. -->
  69. <javaModelGenerator targetPackage="com._520it.mybatis.domain" targetProject="src/main/java">
  70. <!-- for MyBatis3/MyBatis3Simple
  71. 自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter;
  72. -->
  73. <property name="constructorBased" value="false"/>
  74. <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
  75. <property name="enableSubPackages" value="true"/>
  76. <!-- for MyBatis3 / MyBatis3Simple
  77. 是否创建一个不可变的类,如果为true,
  78. 那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类
  79. -->
  80. <property name="immutable" value="false"/>
  81. <!-- 设置一个根对象,
  82. 如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;在Table的rootClass属性中可以覆盖该选项
  83. 注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,包括:
  84. 1,属性名相同,类型相同,有相同的getter/setter方法;
  85. -->
  86. <property name="rootClass" value="com._520it.mybatis.domain.BaseDomain"/>
  87. <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
  88. <property name="trimStrings" value="true"/>
  89. </javaModelGenerator>
  90. <!-- 生成SQL map的XML文件生成器,
  91. 注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
  92. 或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
  93. targetPackage/targetProject:同javaModelGenerator
  94. -->
  95. <sqlMapGenerator targetPackage="com._520it.mybatis.mapper" targetProject="src/main/resources">
  96. <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
  97. <property name="enableSubPackages" value="true"/>
  98. </sqlMapGenerator>
  99. <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口
  100. targetPackage/targetProject:同javaModelGenerator
  101. type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
  102. 1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
  103. 2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
  104. 3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
  105. 注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
  106. -->
  107. <javaClientGenerator targetPackage="com._520it.mybatis.mapper" type="ANNOTATEDMAPPER" targetProject="src/main/java">
  108. <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
  109. <property name="enableSubPackages" value="true"/>
  110. <!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查
  111. <property name="rootInterface" value=""/>
  112. -->
  113. </javaClientGenerator>
  114. <!-- 选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素
  115. 选择的table会生成一下文件:
  116. 1,SQL map文件
  117. 2,生成一个主键类;
  118. 3,除了BLOB和主键的其他字段的类;
  119. 4,包含BLOB的类;
  120. 5,一个用户生成动态查询的条件类(selectByExample, deleteByExample),可选;
  121. 6,Mapper接口(可选)
  122. tableName(必要):要生成对象的表名;
  123. 注意:大小写敏感问题。正常情况下,MBG会自动的去识别数据库标识符的大小写敏感度,在一般情况下,MBG会
  124. 根据设置的schema,catalog或tablename去查询数据表,按照下面的流程:
  125. 1,如果schema,catalog或tablename中有空格,那么设置的是什么格式,就精确的使用指定的大小写格式去查询;
  126. 2,否则,如果数据库的标识符使用大写的,那么MBG自动把表名变成大写再查找;
  127. 3,否则,如果数据库的标识符使用小写的,那么MBG自动把表名变成小写再查找;
  128. 4,否则,使用指定的大小写格式查询;
  129. 另外的,如果在创建表的时候,使用的""把数据库对象规定大小写,就算数据库标识符是使用的大写,在这种情况下也会使用给定的大小写来创建表名;
  130. 这个时候,请设置delimitIdentifiers="true"即可保留大小写格式;
  131. 可选:
  132. 1,schema:数据库的schema;
  133. 2,catalog:数据库的catalog;
  134. 3,alias:为数据表设置的别名,如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_actualColumnName
  135. 4,domainObjectName:生成的domain类的名字,如果不设置,直接使用表名作为domain类的名字;可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面;
  136. 5,enableInsert(默认true):指定是否生成insert语句;
  137. 6,enableSelectByPrimaryKey(默认true):指定是否生成按照主键查询对象的语句(就是getById或get);
  138. 7,enableSelectByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询语句;
  139. 8,enableUpdateByPrimaryKey(默认true):指定是否生成按照主键修改对象的语句(即update);
  140. 9,enableDeleteByPrimaryKey(默认true):指定是否生成按照主键删除对象的语句(即delete);
  141. 10,enableDeleteByExample(默认true):MyBatis3Simple为false,指定是否生成动态删除语句;
  142. 11,enableCountByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询);
  143. 12,enableUpdateByExample(默认true):MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性);
  144. 13,modelType:参考context元素的defaultModelType,相当于覆盖;
  145. 14,delimitIdentifiers:参考tableName的解释,注意,默认的delimitIdentifiers是双引号,如果类似MYSQL这样的数据库,使用的是`(反引号,那么还需要设置contextbeginningDelimiterendingDelimiter属性)
  146. 15delimitAllColumns:设置是否所有生成的SQL中的列名都使用标识符引起来。默认为falsedelimitIdentifiers参考context的属性
  147. 注意,table里面很多参数都是对javaModelGeneratorcontext等元素的默认属性的一个复写;
  148. -->
  149. <table tableName="userinfo" >
  150. <!-- 参考 javaModelGenerator constructorBased属性-->
  151. <property name="constructorBased" value="false"/>
  152. <!-- 默认为false,如果设置为true,在生成的SQL中,table名字不会加上catalogschema -->
  153. <property name="ignoreQualifiersAtRuntime" value="false"/>
  154. <!-- 参考 javaModelGenerator immutable 属性 -->
  155. <property name="immutable" value="false"/>
  156. <!-- 指定是否只生成domain类,如果设置为true,只生成domain类,如果还配置了sqlMapGenerator,那么在mapper XML文件中,只生成resultMap元素 -->
  157. <property name="modelOnly" value="false"/>
  158. <!-- 参考 javaModelGenerator rootClass 属性
  159. <property name="rootClass" value=""/>
  160. -->
  161. <!-- 参考javaClientGenerator rootInterface 属性
  162. <property name="rootInterface" value=""/>
  163. -->
  164. <!-- 如果设置了runtimeCatalog,那么在生成的SQL中,使用该指定的catalog,而不是table元素上的catalog
  165. <property name="runtimeCatalog" value=""/>
  166. -->
  167. <!-- 如果设置了runtimeSchema,那么在生成的SQL中,使用该指定的schema,而不是table元素上的schema
  168. <property name="runtimeSchema" value=""/>
  169. -->
  170. <!-- 如果设置了runtimeTableName,那么在生成的SQL中,使用该指定的tablename,而不是table元素上的tablename
  171. <property name="runtimeTableName" value=""/>
  172. -->
  173. <!-- 注意,该属性只针对MyBatis3Simple有用;
  174. 如果选择的runtimeMyBatis3Simple,那么会生成一个SelectAll方法,如果指定了selectAllOrderByClause,那么会在该SQL中添加指定的这个order条件;
  175. -->
  176. <property name="selectAllOrderByClause" value="age desc,username asc"/>
  177. <!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
  178. <property name="useActualColumnNames" value="false"/>
  179. <!-- generatedKey用于生成生成主键的方法,
  180. 如果设置了该元素,MBG会在生成的<insert>元素中生成一条正确的<selectKey>元素,该元素可选
  181. column:主键的列名;
  182. sqlStatement:要生成的selectKey语句,有以下可选项:
  183. Cloudscape:相当于selectKeySQL为: VALUES IDENTITY_VAL_LOCAL()
  184. DB2 :相当于selectKeySQL为: VALUES IDENTITY_VAL_LOCAL()
  185. DB2_MF :相当于selectKeySQL为:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
  186. Derby :相当于selectKeySQL为:VALUES IDENTITY_VAL_LOCAL()
  187. HSQLDB :相当于selectKeySQL为:CALL IDENTITY()
  188. Informix :相当于selectKeySQL为:select dbinfo('sqlca.sqlerrd1') from systables where tabid=1
  189. MySql :相当于selectKeySQL为:SELECT LAST_INSERT_ID()
  190. SqlServer :相当于selectKeySQL为:SELECT SCOPE_IDENTITY()
  191. SYBASE :相当于selectKeySQL为:SELECT @@IDENTITY
  192. JDBC :相当于在生成的insert元素上添加useGeneratedKeys="true"keyProperty属性
  193. <generatedKey column="" sqlStatement=""/>
  194. -->
  195. <!--
  196. 该元素会在根据表中列名计算对象属性名之前先重命名列名,非常适合用于表中的列都有公用的前缀字符串的时候,
  197. 比如列名为:CUST_ID,CUST_NAME,CUST_EMAIL,CUST_ADDRESS等;
  198. 那么就可以设置searchString"^CUST_",并使用空白替换,那么生成的Customer对象中的属性名称就不是
  199. custId,custName等,而是先被替换为ID,NAME,EMAIL,然后变成属性:idnameemail
  200. 注意,MBG是使用java.util.regex.Matcher.replaceAll来替换searchStringreplaceString的,
  201. 如果使用了columnOverride元素,该属性无效;
  202. <columnRenamingRule searchString="" replaceString=""/>
  203. -->
  204. <!-- 用来修改表中某个列的属性,MBG会使用修改后的列来生成domain的属性;
  205. column:要重新设置的列名;
  206. 注意,一个table元素中可以有多个columnOverride元素哈~
  207. -->
  208. <!-- 指定类型 -->
  209. <columnOverride column="RECORD_DATE" jdbcType="TIMESTAMP"/>
  210. <columnOverride column="username">
  211. <!-- 使用property属性来指定列要生成的属性名称 -->
  212. <property name="property" value="userName"/>
  213. <!-- javaType用于指定生成的domain的属性类型,使用类型的全限定名
  214. <property name="javaType" value=""/>
  215. -->
  216. <!-- jdbcType用于指定该列的JDBC类型
  217. <property name="jdbcType" value=""/>
  218. -->
  219. <!-- typeHandler 用于指定该列使用到的TypeHandler,如果要指定,配置类型处理器的全限定名
  220. 注意,mybatis中,不会生成到mybatis-config.xml中的typeHandler
  221. 只会生成类似:where id = #{id,jdbcType=BIGINT,typeHandler=com._520it.mybatis.MyTypeHandler}的参数描述
  222. <property name="jdbcType" value=""/>
  223. -->
  224. <!-- 参考table元素的delimitAllColumns配置,默认为false
  225. <property name="delimitedColumnName" value=""/>
  226. -->
  227. </columnOverride>
  228. <!-- ignoreColumn设置一个MGB忽略的列,如果设置了改列,那么在生成的domain中,生成的SQL中,都不会有该列出现
  229. column:指定要忽略的列的名字;
  230. delimitedColumnName:参考table元素的delimitAllColumns配置,默认为false
  231. 注意,一个table元素中可以有多个ignoreColumn元素
  232. <ignoreColumn column="deptId" delimitedColumnName=""/>
  233. -->
  234. </table>
  235. </context>
  236. </generatorConfiguration>

生成代码:


  1. public class TestMGB {
  2. public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
  3. List<String> warnings =new ArrayList<String>();
  4. boolean overwrite=true;
  5. File configFile=new File("mgb.xml");
  6. ConfigurationParser cp=new ConfigurationParser(warnings);
  7. Configuration config=cp.parseConfiguration(configFile);
  8. DefaultShellCallback callback=new DefaultShellCallback(overwrite);
  9. MyBatisGenerator myBatisGenerator=new MyBatisGenerator(config,callback,warnings);
  10. myBatisGenerator.generate(null);
  11. }
  12. }

3.Java配置示例
基于Java的配置是和上面的XML配置是相对应的。直接运行该示例即可生成数据表对于的pojo,mapper接口和一个sqlprovider Java类。


  1. package com.mgb.test;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.mybatis.generator.api.MyBatisGenerator;
  5. import org.mybatis.generator.config.CommentGeneratorConfiguration;
  6. import org.mybatis.generator.config.Configuration;
  7. import org.mybatis.generator.config.Context;
  8. import org.mybatis.generator.config.JDBCConnectionConfiguration;
  9. import org.mybatis.generator.config.JavaClientGeneratorConfiguration;
  10. import org.mybatis.generator.config.JavaModelGeneratorConfiguration;
  11. import org.mybatis.generator.config.JavaTypeResolverConfiguration;
  12. import org.mybatis.generator.config.ModelType;
  13. import org.mybatis.generator.config.PluginConfiguration;
  14. import org.mybatis.generator.config.SqlMapGeneratorConfiguration;
  15. import org.mybatis.generator.config.TableConfiguration;
  16. import org.mybatis.generator.internal.DefaultShellCallback;
  17. public class MGBConfig {
  18. public static void main(String[] args) throws Exception{
  19. //配置xml配置项
  20. List<String> warnings = new ArrayList<String>();
  21. boolean overwrite = true;
  22. Configuration config = new Configuration();
  23. Context context = new Context(ModelType.CONDITIONAL);
  24. context.setTargetRuntime("MyBatis3");
  25. context.setId("defaultContext");
  26. //自动识别数据库关键字,默认false,如果设置为true,
  27. //根据SqlReservedWords中定义的关键字列表;一般保留默认值,遇到数据库关键字(Java关键字),
  28. //使用columnOverride覆盖
  29. context.addProperty("autoDelimitKeywords","true");
  30. //生成的Java文件的编码
  31. context.addProperty("javaFileEncoding","utf-8");
  32. context.addProperty("beginningDelimiter","`");
  33. context.addProperty("endingDelimiter","`");
  34. //格式化java代码
  35. context.addProperty("javaFormatter","org.mybatis.generator.api.dom.DefaultJavaFormatter");
  36. //格式化xml代码
  37. context.addProperty("xmlFormatter","org.mybatis.generator.api.dom.DefaultXmlFormatter");
  38. //格式化信息
  39. PluginConfiguration pluginConfiguration = new PluginConfiguration();
  40. pluginConfiguration.setConfigurationType("org.mybatis.generator.plugins.SerializablePlugin");
  41. pluginConfiguration.setConfigurationType("org.mybatis.generator.plugins.ToStringPlugin");
  42. context.addPluginConfiguration(pluginConfiguration);
  43. //设置是否去除生成注释
  44. CommentGeneratorConfiguration commentGeneratorConfiguration = new CommentGeneratorConfiguration();
  45. commentGeneratorConfiguration.addProperty("suppressAllComments","true");
  46. //commentGeneratorConfiguration.addProperty("suppressDate","true");
  47. context.setCommentGeneratorConfiguration(commentGeneratorConfiguration);
  48. //设置连接数据库
  49. JDBCConnectionConfiguration jdbcConnectionConfiguration = new JDBCConnectionConfiguration();
  50. jdbcConnectionConfiguration.setDriverClass("com.mysql.jdbc.Driver");
  51. jdbcConnectionConfiguration.setConnectionURL("jdbc:mysql://localhost:3306/definesys");
  52. jdbcConnectionConfiguration.setPassword("welcome1");
  53. jdbcConnectionConfiguration.setUserId("root");
  54. context.setJdbcConnectionConfiguration(jdbcConnectionConfiguration);
  55. JavaTypeResolverConfiguration javaTypeResolverConfiguration = new JavaTypeResolverConfiguration();
  56. //是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.)
  57. javaTypeResolverConfiguration.addProperty("forceBigDecimals","false");
  58. context.setJavaTypeResolverConfiguration(javaTypeResolverConfiguration);
  59. //生成实体类的地址
  60. JavaModelGeneratorConfiguration javaModelGeneratorConfiguration = new JavaModelGeneratorConfiguration();
  61. javaModelGeneratorConfiguration.setTargetPackage("com.mgb.domain");
  62. javaModelGeneratorConfiguration.setTargetProject("src/main/java");
  63. javaModelGeneratorConfiguration.addProperty("enableSubPackages","true");
  64. javaModelGeneratorConfiguration.addProperty("trimStrings","true");
  65. context.setJavaModelGeneratorConfiguration(javaModelGeneratorConfiguration);
  66. //生成的xml的地址
  67. SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration = new SqlMapGeneratorConfiguration();
  68. sqlMapGeneratorConfiguration.setTargetProject("src/main/java");
  69. sqlMapGeneratorConfiguration.setTargetPackage("com.mgb.mapper");
  70. sqlMapGeneratorConfiguration.addProperty("enableSubPackages","true");
  71. context.setSqlMapGeneratorConfiguration(sqlMapGeneratorConfiguration);
  72. //生成注解接口
  73. JavaClientGeneratorConfiguration javaClientGeneratorConfiguration = new JavaClientGeneratorConfiguration();
  74. javaClientGeneratorConfiguration.setTargetPackage("com.mgb.dao");
  75. javaClientGeneratorConfiguration.setTargetProject("src/main/java");
  76. //注解形式 ANNOTATEDMAPPER xml形式 XMLMAPPER
  77. javaClientGeneratorConfiguration.setConfigurationType("ANNOTATEDMAPPER");
  78. javaClientGeneratorConfiguration.addProperty("enableSubPackages","true");
  79. context.setJavaClientGeneratorConfiguration(javaClientGeneratorConfiguration);
  80. TableConfiguration tableConfiguration = new TableConfiguration(context);
  81. tableConfiguration.setTableName("user_info");
  82. tableConfiguration.setCountByExampleStatementEnabled(true);
  83. tableConfiguration.setUpdateByExampleStatementEnabled(true);
  84. tableConfiguration.setDeleteByExampleStatementEnabled(true);
  85. tableConfiguration.setInsertStatementEnabled(true);
  86. tableConfiguration.setDeleteByPrimaryKeyStatementEnabled(true);
  87. context.addTableConfiguration(tableConfiguration);
  88. config.addContext(context);
  89. DefaultShellCallback callback = new DefaultShellCallback(overwrite);
  90. MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
  91. myBatisGenerator.generate(null);
  92. }
  93. }

使用


  1. package com.mgb.service;
  2. import java.util.List;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import com.mgb.dao.UserInfoMapper;
  6. import com.mgb.domain.UserInfo;
  7. import com.mgb.domain.UserInfoExample;
  8. @Service
  9. public class UserService {
  10. @Autowired
  11. private UserInfoMapper userInfoMapper;
  12. /**
  13. * 按姓名查询
  14. * @param name
  15. * @return
  16. */
  17. public List<UserInfo> getUserByName(String name){
  18. UserInfoExample uerInfoExample=new UserInfoExample();
  19. uerInfoExample.createCriteria().andNameEqualTo(name);
  20. return userInfoMapper.selectByExample(uerInfoExample);
  21. }
  22. /**
  23. * 有条件的insert
  24. * @param userInfo
  25. * @return
  26. */
  27. public Integer addUser(UserInfo userInfo) {
  28. return userInfoMapper.insertSelective(userInfo);
  29. }
  30. /**
  31. * 根据ID更新用户信息
  32. * @param userInfo
  33. * @return
  34. */
  35. public Integer updateUser(UserInfo userInfo) {
  36. return userInfoMapper.updateByPrimaryKey(userInfo);
  37. }
  38. /**
  39. * 根据ID删除用户
  40. * @param id
  41. * @return
  42. */
  43. public Integer deleteUserById(Integer id) {
  44. return userInfoMapper.deleteByPrimaryKey(id);
  45. }
  46. }

在springboot中使用Mybatis Generator的两种方式的更多相关文章

  1. 基于Maven的SpringBoot项目实现热部署的两种方式

    转载:http://blog.csdn.net/tengxing007/article/details/72675168 前言 JRebel是JavaEE中比较流行的热部署插件,可快速实现热部署,节省 ...

  2. strus2中获取表单数据 两种方式 属性驱动 和模型驱动

    strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...

  3. 怎样在Android开发中FPS游戏实现的两种方式比较

    怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...

  4. HTML中设置背景图的两种方式

    HTML中设置背景图的两种方式 1.background    background:url(images/search.png) no-repeat top; 2.background-image ...

  5. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)

    接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...

  6. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

    Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...

  7. .Net 中读写Oracle数据库常用两种方式

    .net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...

  8. 【转】在Android Studio中下载Android SDK的两种方式(Android Studio3.0、windows)

    在Android Studio中下载Android SDK的两种方式(Android Studio3.0.windows) 方式一.设置HTTP Proxy1. 打开Settings2. 点击HTTP ...

  9. 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制

    通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中 ...

随机推荐

  1. react css module

    <div className={style['content-warp']}></div> <div className={style.search}></d ...

  2. 一个能让你了解所有函数调用顺序的Android库

    http://mobile.51cto.com/android-536059.htm 原理 本库其实并没有什么黑科技,本库也没有java代码,核心就是2个build.gradle中的task.首先,原 ...

  3. n个平面把空间最多分成几个部分?

    题目: n个平面把空间最多分成几个部分? 解答: 1条直线可以把平面分成2部分,2条直线最多可以把平面分成4部分, 3条直线最多可以把平面分成几部分,4条直线呢?你能不能想出n条直线最多可以把平面分成 ...

  4. DEV GridControl 常用属性 z

    1隐藏最上面的GroupPanel gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值 sValue=Table.Rows[grid ...

  5. android的窗口机制分析------UI管理系统

    Activity可以看做是整个Android系统的人机接口,它提供了一个窗口来绘制UI,每个Activity在启动时,我们都需要给它设置一个Content view,作为Activity所呈现的UI内 ...

  6. Celery 启动报错 can_read() got an unexpected keyword argument timeout

    问题: Celery 启动报错 can_read() got an unexpected keyword argument timeout 方案:更改redis版本和celery版本,我使用下面的ce ...

  7. 转:在CentOS下编译安装GCC

    转:https://teddysun.com/432.html 在CentOS下编译安装GCC 技术  秋水逸冰  发布于: 2015-09-02  更新于: 2015-09-02  6519 次围观 ...

  8. log4net报错Could not load type 'System.Security.Claims.ClaimsIdentity'

    使用log4net,在win7上可以正常使用,但是在部分xp电脑上可以生成access数据库,但是无法写数据到mdb 排除了程序原因,怀疑是xp缺少什么dll之类的 偶然查到log4net的调试方法: ...

  9. Android二维码工具zxing使用

    二维码在我们生活中随处可见.在我眼里简直能够用"泛滥"来形容啦.那怎样在我们Android项目中扫描识别二维码或生成二维码图片呢? 我们通常使用的开源框架是zxing.在githu ...

  10. Django小项目练习

    Django学生管理系统 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^class_list/', views.class_list ...