分享

MyBatis学习之代码生成器Generator

 酒驾的酒瓶盖 2017-09-12

  • MyBatis Generator (MBG) 是一个Mybatis的代码生成器,它可以帮助我们根据数据库中表的设计生成对应的实体类,xml Mapper文件,接口以及帮助类(也就是我们可以借助该类来进行简单的CRUD操作),这样就避免了我们每使用到一张表的数据就需要手动去创建对应的类和xml文件,这就帮我们节约了大量的时间去开发和业务逻辑有关的功能,但是如果对联合查询和存储过程您仍然需要手写SQL和对象。下面我主要介绍基于Maven和普通的Java工程两种方式来生成相应的文件。

基于Maven插件的方式

  1. 首先我们应该创建一个Maven工程,在pom.xml文件中添加我们所需要用到的jar包的依赖以及添加mybatis-generator-maven-plugin插件,但需要注意的是里面的标签指定generatorConfig.xml文件的位置好像不起作用,默认就是读取src/main/resources下面的xml文件,放在其它地方都不起作用,而且会报错,说generatorConfig.xml文件找不到:
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <mybatis-generator.version>1.3.2</mybatis-generator.version>
    <mysql.version>5.1.13</mysql.version>
    <mybatis.version>3.2.4</mybatis.version>
 </properties>

 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>${mybatis-generator.version}</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
 </dependencies>
 <build>
        <finalName>mybatis-generator</finalName>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>${mybatis-generator.version}</version>
                    <!-- 数据库驱动  -->
                    <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>${mysql.version}</version>
                        </dependency>
                    </dependencies>
                    <!-- 自动生成 -->
                    <executions>
                        <execution>
                            <id>Generate MyBatis Artifacts</id>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                            <configuration>
                                <!-- 指定文件位置好像不起作用,始终默认读取src/main/resources/generatorConfig.xml文件 -->
                                <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                                <!--允许移动生成的文件-->
                                <verbose>true</verbose>
                                <!--允许覆盖生成的文件-->
                                <overwrite>true</overwrite>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.5</source>
                        <target>1.5</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
 </build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

2.上面说到的generatorConfig.xml文件也是需要我们自己配置的,里面主要配置连接数据库的配置和生成的文件配置信息以及最重要的就是我们要生成的实体类所对应的的表或者试图。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-////DTD MyBatis Generator Configuration 1.0//EN"
  "http:///dtd/mybatis-generator-config_1_0.dtd">
  <!-- 该配置文件说明插件需要如何生成,以及生成对应的包名,路径等信息。
        还有重要的就是我们要生成的实体类所对应的的表或者试图 -->
<generatorConfiguration> 
    <properties resource="mybatis_generator.properties" />
    <context id="MBG" targetRuntime="MyBatis3" defaultModelType="conditional">
        <!-- 注意以下标签的顺序:property*,plugin*,commentGenerator?,jdbcConnection,
                javaTypeResolver?,javaModelGenerator,sqlMapGenerator?,
                javaClientGenerator?,table+ -->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" />
        <!-- 这个插件给由MBG生成的Java模型对象增加了equals和hashCode方法 -->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="false"/>
            <!-- 不希望生成的注释中包含时间戳 -->
            <property name="suppressDate" value="true" />
            <!-- 是否  自动为每一个生成的类创建一个构造方法-->
            <property name="constructorBased" value="false"/>
        </commentGenerator>
        <!-- 数据库连接 -->
        <jdbcConnection 
            driverClass="${jdbc_driver}" 
            connectionURL="${jdbc_url}"
            userId="${jdbc_username}" 
            password="${jdbc_password}">
        </jdbcConnection>
        <!-- 指定生成的类型为java类型,避免数据库中number等类型字段 -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成model模型,对应的包,存放位置可以指定具体的路径,如/ProjectName/src,也可以使用MAVEN来自动生成 -->
        <javaModelGenerator targetPackage="${modelPackage}" targetProject="${targetProject}">
            <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
            <property name="enableSubPackages" value="true"/>
            <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!--对应的xml mapper文件  -->
        <sqlMapGenerator targetPackage="${sqlMapperPackage}" targetProject="${targetProject}" >
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator> 
        <!-- 对应的dao接口 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="${daoMapperPackage}" targetProject="${targetProject}" >
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 表名对应生成的实体 -->      
        <table tableName="ecjtu_tab_user" domainObjectName="User" />
        <!-- enableCountByExample="false" enableUpdateByExample="false"
        enableDeleteByExample="false" enableSelectByExample="false"
        selectByExampleQueryId="false">  指定是否生成操作数据库对应的方法 -->
    </context>
</generatorConfiguration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

注:该配置文件中有两个要注意的地方:
a、配置文件中的注释应该为:<!--这是注释-->,不能在注释里面再嵌套–之类的符号,比如:<!----这--是注释-->,否则运行时会提示报错信息。
b、标签里面元素是有顺序的,如果顺序乱了也会报错的,顺序依次为:

property——>plugin——>commentGenerator——>jdbcConnection——>
javaTypeResolver——>javaModelGenerator——>sqlMapGenerator——>
javaClientGenerator——>table+
  • 1
  • 2
  • 3

3.对于generatorConfig.xml文件中引入的mybatis_generator.properties文件,里面主要是数据库连接信息和生成的文件的目录信息,我们可以在generatorConfig.xml的同目录下创建该文件:

#数据库配置 
#jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
jdbc_url=jdbc:mysql://localhost:3306/test
jdbc_driver=com.mysql.jdbc.Driver
jdbc_username=root
jdbc_password=admin

#执行:右键 Run As ---->Maven build ---->Goals:mybatis-generator:generate
#输出目录
targetProject=src/main/java
#modelPackage,sqlMapperPackage,daoMapperPackage 通常一致
modelPackage=com.ecjtu.generator.entitys
sqlMapperPackage=com.ecjtu.generator.entitys
daoMapperPackage=com.ecjtu.generator.entitys
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

4.创建好了以上三个文件后,我们再创建一个包路径就可以执行了,也就是在src/main/java下创建mybatis_generator.properties文件中指定的生成实体的包路径,即上面所指定的com.ecjtu.generator.entitys包,创建好了之后再右键pom.xml文件,Run As —->Maven build —->Goals:mybatis-generator:,执行该操作后刷新以下该项目你所生成的文件就都出现了


普通的Java工程生成实体

这种方式较Maven插件的方式也就是我们自己写一个类在Main方法中去读取generatorConfig.xml文件,然后去生成对应的文件。

  1. 既然不用Maven当中的插件,而且是一个普通的Java工程,那么就需要我们自己手动引入相关的Jar包,在src下面新建一个lib文件夹,把用到的jar包复制到该文件夹下面,引入的jar包如下图:
    这里写图片描述

  2. jar包引入好了之后,其他的配置文件跟使用Maven的方式差不多,也是配置generatorConfig.xml文件以及mybatis_generator.properties文件。其中generatorConfig.xml文件和Maven方式唯一不同的就是需要在 标签外指明驱动包的位置:

<!-- 使用绝对路径,不然可能会找不到jar包 -->
    <classPathEntry location="E:\JavaStudy\DevlopeEnvironment\workspace\MyBatisGeneratorMain\lib\mysql-connector-java-5.1.22-bin.jar" />
  • 1
  • 2

3.最后一个也就是创建一个类,在Main方法中读取generatorConfig.xml文件,然后生成相应的文件

package com.ecjtu.generator.main;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

public class GenMain {
    public static void main(String[] args) {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;//如果已经生成过了是否进行覆盖
        String genCfg = "/generatorConfig.xml";//配置文件的路径:默认放到src下面
        URL url = GenMain.class.getResource(genCfg);
        String file = url.getFile();
        File configFile = new File(file);
        ConfigurationParser cfgParser = new ConfigurationParser(warnings);//配置文件解析器
        Configuration config = null;
        try {
            config = cfgParser.parseConfiguration(configFile);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator generator = null;
        try {
            generator = new MyBatisGenerator(config, callback, warnings);
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        }
        try {
            generator.generate(null);
            System.out.println("mybatis 代码生成成功。。。");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

4.最后也就大功告成了,直接右键执行java程序,再刷新一下,生成的文件就都出现了。


到这里,MyBatis基于Maven和普通的Java工程生成实体的两种方式就都介绍完了。。。。。。。。。。。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多