• [java]基础学习笔记(一)Mybatis Generator代码生成工具


    Mybatis Generator代码生成工具

    1 概述:Mybatis Generator(MBG)Mybatis的一个代码生成工具。MBG解决了对数据库操作有最大影响的一些CRUD操作,很大程度上提升开发效率。如果需要联合查询仍然需要手写sql

    2 配置:

    1) 添加依赖

            <!-- mybatis-generator -->

            <dependency>

                <groupId>org.mybatis.generator</groupId>

                <artifactId>mybatis-generator-core</artifactId>

                <version>1.3.7</version>

                <scope>test</scope>

            </dependency>

    2) XML文件配置或java代码配置

    3) 生成代码

    以下为我学习时候参照的资料内容:

    学习资料:详解在springboot中使用Mybatis Generator的两种方式:

    https://www.jb51.net/article/150824.htm

    1.添加依赖

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

    生成代码:

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

    3.Java配置示例

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

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

    使用

     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 
     6 import com.mgb.dao.UserInfoMapper;
     7 import com.mgb.domain.UserInfo;
     8 import com.mgb.domain.UserInfoExample;
     9 
    10 @Service
    11 public class UserService {
    12   @Autowired
    13   private UserInfoMapper userInfoMapper;
    14   
    15   /**
    16    * 按姓名查询
    17    * @param name
    18    * @return
    19    */
    20   public List<UserInfo> getUserByName(String name){
    21     UserInfoExample uerInfoExample=new UserInfoExample();
    22     uerInfoExample.createCriteria().andNameEqualTo(name);
    23     return userInfoMapper.selectByExample(uerInfoExample);
    24   }
    25   
    26   /**
    27    * 有条件的insert
    28    * @param userInfo
    29    * @return
    30    */
    31   public Integer addUser(UserInfo userInfo) {
    32     return userInfoMapper.insertSelective(userInfo);
    33   }
    34   
    35   /**
    36    * 根据ID更新用户信息
    37    * @param userInfo
    38    * @return
    39    */
    40   public Integer updateUser(UserInfo userInfo) {
    41     return userInfoMapper.updateByPrimaryKey(userInfo);
    42   }
    43   
    44   /**
    45    * 根据ID删除用户
    46    * @param id
    47    * @return
    48    */
    49   public Integer deleteUserById(Integer id) {
    50     return userInfoMapper.deleteByPrimaryKey(id);
    51   }
    52 }
  • 相关阅读:
    无主之地1
    A+B Problem(V)
    取石子(七)
    又见拦截导弹
    【Chat】实验 -- 实现 C/C++下TCP, 服务器/客户端 "多人聊天室"
    【Echo】实验 -- 实现 C/C++下UDP, 服务器/客户端 通讯
    【Echo】实验 -- 实现 C/C++下TCP, 服务器/客户端 通讯
    对决
    重建二叉树
    花儿朵朵
  • 原文地址:https://www.cnblogs.com/lovetangyuxian/p/13728852.html
Copyright © 2020-2023  润新知