A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 阿莱 于 2019-8-22 15:07 编辑

【上海校区】快速构建MyBatis的逆向工程


前言:

我们很多时候面对数目众多的单表之间的逻辑关联,需要手动的书写数量较多的pojo和查询语句,为了解决这些重复的工作,mybatis帮我做了实现就是我们下面要说的逆向工程。


MyBatis逆向工程的概述:

MyBatis的逆向工程指利用MyBatis Generator,可以快速的根据表生成对应的映射文件,接口,以及bean类。

  MyBatis Generator,简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的条件查询。但是表连接、存储过程等这些复杂sql的定义需要我们手工编写。

工程构建:

1、创建一个maven的jar工程

创建一个maven的jar工程,工程的名称为:create-bean-mapper


2、在pom.xml中引入所需要的依赖

[XML] 纯文本查看 复制代码
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>2.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

        <!-- 逆向生成整合包 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>


3、在resources目录下编写配置和日志

配置文件:generatorConfig.xml
[XML] 纯文本查看 复制代码
<?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>
        <context id="testTables" targetRuntime="MyBatis3">
                <commentGenerator>
                        <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                        <property name="suppressAllComments" value="true" />
                </commentGenerator>
                <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
                <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/pinyougoudb" userId="root"
                        password="123456">
                </jdbcConnection>
                <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
                        connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
                        userId="yycg"
                        password="yycg">
                </jdbcConnection> -->

                <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
                        NUMERIC 类型解析为java.math.BigDecimal -->
                <javaTypeResolver>
                        <property name="forceBigDecimals" value="false" />
                </javaTypeResolver>

                <!-- targetProject:生成PO类的位置 -->
                <javaModelGenerator targetPackage="com.heima.pyg.bean"
                        targetProject=".\src\main\java">
                        <!-- enableSubPackages:是否让schema作为包的后缀 -->
                        <property name="enableSubPackages" value="false" />
                        <!-- 从数据库返回的值被清理前后的空格 -->
                        <property name="trimStrings" value="true" />
                </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
                <sqlMapGenerator targetPackage="com.heima.pyg.mapper"
                        targetProject=".\src\main\resources">
                        <!-- enableSubPackages:是否让schema作为包的后缀 -->
                        <property name="enableSubPackages" value="false" />
                </sqlMapGenerator>
                <!-- targetPackage:mapper接口生成的位置 -->
                <javaClientGenerator type="XMLMAPPER"
                        targetPackage="com.heima.pyg.mapper"
                        targetProject=".\src\main\java">
                        <!-- enableSubPackages:是否让schema作为包的后缀 -->
                        <property name="enableSubPackages" value="false" />
                </javaClientGenerator>
                <!-- 指定数据库表 -->
                <table schema="" tableName="tb_user"></table>
                <!-- 有些表的字段需要指定java类型
                <table schema="" tableName="">
                        <columnOverride column="" javaType="" />
                </table> -->
        </context>
</generatorConfiguration>


日志文件:log4j.properties
[XML] 纯文本查看 复制代码
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG


4、编写代码生成器的类:GeneratorSqlmap

[Java] 纯文本查看 复制代码
public class GeneratorSqlmap {

        public void generator() throws Exception{

                List<String> warnings = new ArrayList<String>();
                boolean overwrite = true;
                String path = this.getClass().getResource("/generatorConfig.xml").getPath();


                System.out.println("path = " + path);
                File configFile = new File(path);
                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);

        } 
        public static void main(String[] args) throws Exception {
                try {
                        GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
                        generatorSqlmap.generator();
                } catch (Exception e) {
                        e.printStackTrace();
                }
                
        }

}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马