[java学习笔记] MyBatis 逆向工程

125 阅读2分钟

开开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

利用MyBatis逆向工程技术,开发者可以很方便生成持久层需要基本内容。如pojo(entity),mapper以及maper对应的xml文件。

下面是我自己构建一个简单 MyBatis 逆向工程的过程。

1.理解逆向工程

通过已经存在物理数据库,生成在基于MyBatis开发过程中需要的部分代码。如pojo类,mapper类,基本的mapper.xml语句。
这样,在新建一个项目,或者新建一个业务数据库表时,开发者可以集中精力在业务或实际功能的开发中,不会被繁琐的配置所困扰。 (在我刚刚学习java的时候,维护的老项目需要增加新的功能,这个功能需要建新的物理表,在后面进行开发时就是全手写pojo,mapper,mapper.xml,效率及其低下)

2.准备工作

既然是逆向工程,那么肯定是一个真正的java项目。我调研了一下,目前也有一些可以在当前项目直接生成相关文件的方法,但是我个人认为,在一个业务项目中还是不要引入其他的jar包,比如mybatis-generator这种,我觉得对于业务环境是一种污染。再者,需要在当前的项目中新建generatorConfig.xml这样的配置文件,对于业务项目同样是没有必要的,万一哪个地方写错了或者后面删除无用的代码出错了,也非常的麻烦。因此,从我个人的角度而言,独立的逆向工程在实践上虽然有些繁琐,但是可取。

首先,需要基于 maven 建立一个java项目,完成基本的pom配置,此时再引入依赖。

<!-- 引入log4j日志依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
    <version>1.3.8.RELEASE</version>
</dependency>

<!-- 阿里开源数据源 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.0</version>
</dependency>

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

<!--mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>
<!--mapper-->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>1.2.4</version>
</dependency>
<!--pagehelper-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.3</version>
</dependency>

<!-- mybatis 逆向生成工具  -->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.2</version>
    <scope>compile</scope>
    <optional>true</optional>
</dependency>

理解起来也好说,既然是跟数据库相关,肯定需要连接数据库、数据源,pagehelper 是一个开源的翻页工具,tk.mybatis 是与生成mapper有关的jar包。

3.项目结构

项目结构如图所示:

image.png

注意:

  • com.bigShop 需要与正真的项目包名相同,后续方便替换

4. generatorConfig.xml 文件配置

image.png

文字配置:

    <!-- 通用mapper所在目录 -->
    <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
        <property name="mappers" value="com.[packageName].BaseMapper.BaseMaapper"/>
    </plugin>

    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                    connectionURL="jdbc:mysql://[url]:3306/[databaseName]"
                    userId="[userId]"
                    password="[passwd]">
    </jdbcConnection>

    <!-- 对应生成的pojo所在包 -->
    <javaModelGenerator targetPackage="com.[packageName].pojo" targetProject="src/main/java"/>

    <!-- 对应生成的mapper所在目录 -->
    <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>

    <!-- 配置mapper对应的java映射 -->
    <javaClientGenerator targetPackage="com.[packageName].mapper" targetProject="src/main/java" type="XMLMAPPER"/>

    <!-- 数据库表 -->
    <table tableName="tableName"></table>

</context>

5. GeneratorDisplay 主类

package com.bigShop;

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

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class GeneratorDisplay {

    public void generator() throws Exception {

        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指定 逆向工程配置文件
        File configFile = new File("generatorConfig.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);

    }

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

直接运行就完事了。