【SSM -MyBatis篇04】使用MyBatis Generator插件自动生成映射文件(逆向工程)(基于MyBatis3)

1. 配置依赖

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

2. 在< plugins>中配置mybatis-generator插件,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>

3. 设计数据库表

在这里插入图片描述

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) DEFAULT NULL COMMENT '用户名username',
  `password` varchar(20) DEFAULT NULL COMMENT '密码password',
  `birthday` date DEFAULT NULL COMMENT '生日birthday',
  `telephone` varchar(11) DEFAULT NULL COMMENT '电话号码telephone',
  `email` varchar(30) DEFAULT NULL COMMENT '邮箱email',
  `hourseRegister` varchar(60) DEFAULT NULL,
  `friends` varchar(200) DEFAULT NULL COMMENT '朋友friends',
  `hobbys` varchar(200) DEFAULT NULL COMMENT '爱好hobbys',
  `carrers` varchar(200) DEFAULT NULL COMMENT '职业carrers',
  `remark` varchar(200) DEFAULT NULL COMMENT '备注remark',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4 COMMENT='用户表User';

4. 配置自定义的类型处理器(自定义类型处理器handler) - 用于mybatis-generator.xml自动生成时,将制定的String类型按照指定方式转换为要求的数据格式

//mybatis-generator.xml自动生成的 自定义类型处理器handler
//@Component  spring将其当成bean来管理
@Component
@MappedJdbcTypes(JdbcType.VARCHAR)  //@MappedJdbcTypes(JdbcType.VARCHAR) 注解表示映射到JDBC的VARCHAR类型
//BaseTypeHandler<String[]>的string[]表示处理的是字符串数组,将其映射成数据库的VARCHAR
public class StringArrayVarcharHandler extends BaseTypeHandler<String[]> {
    
    

      //把传入的字符串转化为一个数组:
     //参1:PreparedStatement是数据库操作  参2:i是第几列  参3:Strings是要转化成的数组  参4:jdbcType是数据库的数据类型
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String[] strings, JdbcType jdbcType) throws SQLException {
    
    
        //      将字符串按 ,逗号 分隔成一个字符串数组
        if(ArrayUtils.isNotEmpty(strings)){
    
    
            String result = StringUtils.join(strings,","); //字符串数组
            preparedStatement.setString(i,result);
        }

    }

    //查询的时候进行类型转换
    @Override
    public String[] getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
    
    

        String[] result = new String[0];//长度为0的字符串数组,没有取到值得时候
         String value = resultSet.getString(columnName);
        if(StringUtils.isNotEmpty(value)){
    
    
            result = value.split(",");//将字符串按,分割成数组
        }
        return result;
    }

    @Override
    public String[] getNullableResult(ResultSet resultSet, int i) throws SQLException {
    
    
        return new String[0];
    }

    @Override
    public String[] getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
    
    
        return new String[0];
    }
}

4. 在项目路径下创建mybatis-generator.xml配置文件(与pom.xml和main同目录下就行)

<?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>

5. 生成映射文件

  通过在当前mybatis-generator.xml同路径下打开Terminal终端
  输入命令mvn mybatis-generator:generate

在这里插入图片描述

生成成功:
在这里插入图片描述
在java中生成bean、dao
在这里插入图片描述
在resources中生成mapper映射
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40542534/article/details/108811632
今日推荐