[SSM -MyBatis Chapter 03] Detailed explanation of MyBatis Generator (MBG) configuration properties (based on MyBatis3)-Reverse generation-Configure MBG template

Introduction to MyBatis Generator.

   MyBatis Generator (MBG) is a code generator (reverse generation) for MyBatis and iBATIS . It will automatically query the database tables and generate components that can be used to access the tables. This reduces the initial hassle of setting up objects and configuration files to interact with database tables. Although MBG reduces a lot of simple CRUD (create, retrieve, update, delete) codes for database tables, it still needs to manually write mapping SQL and beans for complex connection queries and stored procedures.
  Use the MyBatis Generator plug-in to automatically generate the DAO interface, entity model class (bean), and Mapping mapping files required by MyBatis, copy the generated code to the project project, and focus more on business logic .

Address: http://mybatis.org/generator/index.html

  MyBatis Generator has three common methods to automatically generate code: command line, Eclipse plug-in and Maven plug-in

Configuration and use of MyBatis Generator (based on MyBatis3)

1. Need to import dependencies and plugins

	</dependency>
	<!--  mybatis-generator的依赖 自动生成javabean和sql -->
	    <dependency>
	      <groupId>org.mybatis.generator</groupId>
	      <artifactId>mybatis-generator-maven-plugin</artifactId>
	      <version>1.3.4</version>
	    </dependency>
	<!--mysql驱动类-->
	    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	    <dependency>
	      <groupId>mysql</groupId>
	      <artifactId>mysql-connector-java</artifactId>
	      <version>5.1.38</version>
	    </dependency>
	</dependency>

	<plugins>
		 <!--mybatis-generator插件 用于自动生成javabean和sql
            version版本要与mysql的version一样
     	 -->
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.4</version>
          <dependencies>
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.38</version>
            </dependency>
          </dependencies>
          <configuration>
            <overwrite>true</overwrite>
            <configurationFile>./mybatis-generator.xml</configurationFile>
          </configuration>
        </plugin>

	</plugins>

2. Create the mybatis-generator.xml configuration file under the project, and explain the properties in detail (based on MyBatis3) [*****]

Template: http://mybatis.org/generator/configreference/xmlconfig.html

<?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根节点,没有任何属性 -->
<generatorConfiguration>

    <!--<classPathEntry>不必须 0个或多个。  类实体路径 生成指定路径的  通过这个属性指定驱动的路径-->
    <!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />-->


    <!-- <context>元素用于指定生成一组对象的环境 : 该元素有一个必选属性id,用来唯一标识一个<context>元素
            targetRuntime属性主要使用两个值: MyBatis3(默认值)和MyBatis3Simple,如果不想生成Example查询相关的内容,就用MyBatis3Simple
            defaultModelType属性有三个值:conditional、flat、hierarchical
                conditional:默认值,如果表只包含一个字段,就不会生成一个单独的类,会将该字段合并到基本实体类中。
                flat:为每一张表只生成一个实体类(实体类包含表中的所有字段)
                hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,
                              如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,
                              然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。
            -->
    <context id="mybatis" targetRuntime="MyBatis3" defaultModelType="flat">

        <!--<jdbcConnection>必须配置,且只能有一个。用于指定数据库连接信息 【***】
            这里可以通过 <properties>元素加载属性文件,来读取jdbc连接的属性值
        -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false"
                        userId="root"
                        password="861221293">
        </jdbcConnection>

        <!--<javaTypeResolver >:java类型解析器,最多只能配置一个。-->
        <javaTypeResolver >
            <!--<property>属性:配置forceBigDecimals(默认值false,一般不需要配置)
              如果将配置forceBigDecimals配置为true:数据库数据类型number、float、double将会强制转换为BigDecimals-->
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- <javaModelGenerator>:必须配置,且只能配置一个。【***】
             用来控制生成的实体类(生成bean)
             两个属性:targetPackage和targetProject
                targetPackage:生成的实体类存放位置(包名称)
                targetProject:指定目标项目的路径(绝对路径/相对路径)(点.代表当前文件所在路径)

            targetPackage="com.xgf.springmvc.auth.bean" targetProject=".\src\main\java"
            这样配置将自动生成位置为: 当前文件路径.src.main.java.com.xgf.mybatis_generator.bean
          -->
        <javaModelGenerator targetPackage="com.xgf.mybatis_generator.bean" targetProject=".\src\main\java">
            <!--<property>子属性常用属性值:enableSubPackages、trimStrings
                    enableSubPackages:该属性只对MyBatis3有效(对MyBatis3Simple无效),默认值是false。
                        如果值为true就会通过构造方法加入参数,如果false就会调用setter方法加入参数
                    trimStrings:是否对数据库查询结果进行trim操作(trim:最常见的用途是移除开头或结尾的空白字符),默认是false。
                        如果为true就会掉用三目表达式:调用set方式传参的时候,设置值:this.username = (username == null ? null : username.trim())
            -->
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>


        <!--<sqlMapGenerator> 可选属性,最多只能配置一个(0个或者1个)。 用于生成xml映射文件 (生成XxxMpper.xml文件)
                有两个属性必选:targetPackage、targetProject
                    (和前面的<javaModelGenerator>属性一样,只是这个是生成mapper映射文件,且存储在resources资源目录下)

                targetPackage="com.xgf.mybatis_generator.bean"  targetProject=".\src\main\resources" (点.代表当前文件所在路径)
                    生成的mapper映射文件路径为:当前文件路径.src.main.resources.com.xgf.mybatis_generator.dao
        -->
        <sqlMapGenerator targetPackage="com.xgf.mybatis_generator.dao"  targetProject=".\src\main\resources">
            <!--sqlMapGenerator的property子属性只有一个可以配置的属性值enableSubPackages
                    enableSubPackages:默认是false
                        如果是true,MBG会根据catalog和schema来生成子包
                        如果false就会直接用targetPackage属性
            -->
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!--<javaClientGenerator>:可选属性,但是最多只能配置一个(0个或1个)。(生成dao接口)
             用于生成dao层(数据库操作层),不配置该元素,就不会生成类的数据库操作mapper接口
             该元素有三个必选属性:type、targetPackage、targetProject
                type:用于选择一个预定义的客户端代码(可以理解为Mapper接口)生成器。
                    如果使用的是MyBatis3配置,有以下三个值:
                    ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML映射文件
                    MIXEDMAPPER:XML和注解的混合形式,相比ANNOTATEDMAPPER方式,SqlProvider注解方法会被XML替代。
                    XMLMAPPER:所有的方法都写在XML中,接口调用需要依赖XML文件。
        -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.xgf.mybatis_generator.dao"  targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>


        <!-- <table>元素:至少配置一个,可以配置多个(1个或多个)。
             用来配置需要生成的数据库表,只有配置table才能生成对应表的实体类、映射文件和接口
             必选属性:tableName:这个是对应数据库的表名称(可以使用SQL通配符匹配多个表  可以通过tableName="%"生成全部的表)
             可选属性:schema:设置该值,生成SQL的表名会变成如schema.tableName的形式(一般写你的【数据库名称】)
                      domainObjectName:生成的对象名称,就是生成的javabean的类名(没有指定,就会和数据库表名相同)

            useActualColumnNames 使用真实的列名 列名作为属性名
            generatedKey 主键  sqlStatement数据库 identity自增长
            columnOverride 列覆盖
            ignoreColumn 忽略列
        -->
        <table schema="mybatis" tableName="user" domainObjectName="User" >

            <!--<property>:
                    可选属性:useActualColumnNames,默认值是false。
                        设置为true,会用数据库表的列名,来作为javabean对象的属性名称
                        设置为false(默认值),MGB将会尝试将返回的名称转换为驼峰形式
            -->
            <property name="useActualColumnNames" value="true"/>

            <!--<generatedKey>:最多配置一个。用于指定自动生成的主键属性。【主键】
                    必选属性:column:生成的列名称
                            sqlStatement:用于返回新值的SQL语句。如果该列是identity列,可以使用其中一个预定义的的特殊值
                                就是写你使用的数据库名称(MySql/DB2/SqlServer/HSQLDB等数据库名(预定义的特殊值))
                    可选属性:identity:当设置为true时,该列会被标记为identity列

            -->
            <generatedKey column="ID" sqlStatement="MySql" identity="true" />


            <!--<columnOverride>元素:可选,可以配置多个(0个或多个)
                    将某些属性默认计算的值更改为指定的值
                    有多个值的时候【比如checkbox、select有多选的时候】,将VARCHAR通过handler转换数组类型
                    必选属性:column:要重写的列名
                    可选属性:javaType:值为完全限定名的Java类型(需要将数据表列数据(column)转换为的类型)
                            typeHandler:自己定义的需要用来处理这列(column)数据的类型处理器(自定义)
            -->

            <!-- 通过自定义typeHandler将数据库表中的hoobys和friends通过分隔符转换为字符串数组 -->
            <columnOverride column="hobbys" property="hobbys"
                            javaType="java.lang.String[]" jdbcType="VARCHAR"
                            typeHandler="com.xgf.mybatis_generator.typeHandler.StringArrayVarcharHandler"/>
            <columnOverride column="friends" property="friends"
                            javaType="java.lang.String[]" jdbcType="VARCHAR"
                            typeHandler="com.xgf.mybatis_generator.typeHandler.StringArrayVarcharHandler"/>
            <!--<columnOverride column="DATE_FIELD" property="startDate" />-->

            <!--<ignoreColumn>元素:可选,可以配置多个(0个或多个),用来屏蔽不需要生成的列(设置该值得列将不生成到javabean的属性中)
                    必选属性:column:配置要忽略的数据库表列名
                    可选属性:delimitedColumnName:默认值false,匹配列名是否区分大小写,如果为true就区分,如果为false,就不区分。
            -->
            <!--<ignoreColumn column="FRED" />-->

        </table>

    </context>
</generatorConfiguration>

3. Automatically generate bean, dao, and mapper mapping files

Open the Terminal terminal in the same path as the current mybatis-generator.xml and
enter the commandmvn mybatis-generator:generate

Guess you like

Origin blog.csdn.net/qq_40542534/article/details/108808090
MBG