回顾一下MyBatis逆向工程——自动生成代码

⭐⭐⭐⭐⭐最最最最最重要的事情:

我本身总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java-Guidehtml

🍉🍉🍉🍉个人Gitchat:从应届程序员角度分析如何备战大厂面试

前言

最近作的项目(SSM+Shiro)的数据库表已经建立完成,一共有15张表,若是咱们一个个去写pojo/bean的代码以及各类sql语句的话未免太过麻烦并且很容易出错,这个时候咱们就须要MyBatis逆向工程去为咱们生成这些基本的东西。java

先来简单的了解一下什么是逆向工程。

一 什么是逆向工程

官网解释浓缩版mysql

MyBatis逆向工程须要用到的就是MyBatis官方提供的MyBatis Generator(MBG)MBGMyBatisiBATIS的代码生成器,它将为全部版本的MyBatis以及版本2.2.0以后的iBATIS版本生成代码。MBG对简单CRUD(增删改查)的大部分数据库操做产生重大影响。可是您仍然须要为链接查询或存储过程手动编写SQL和对象代码。git

简要归纳版:程序员

建立好数据库表以后,MBG能够根据数据库表自动为您生成pojo类example类(用于添加条件,至关where语句后面的部分 )mapper文件github

关于Mapper接口以及Example的实例的讲解能够查看这一篇文章:《Mapper接口以及Example的实例》
http://www.javashuo.com/article/p-krtilrnk-mm.html面试

介绍完逆向工程是个什么东西后,接下来咱们就要开始学习如何使用它了?

二 使用MyBatis逆向工程

考虑到你们的基础可能不一样,因此我尽量详细一点。sql

2.1 新建Maven项目并添加相关依赖

1.新建Maven项目(普通的Java项目):数据库

新建Maven项目

2.添加相关依赖(pom.xml):apache

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>mybatis-generator</groupId>
    <artifactId>sql-mapper</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>sql-mapper</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--log4j -->
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--MyBatis Generator -->
        <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <!--mysql-connector-java -->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!--mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.1</version>
        </dependency>
    </dependencies>
</project>

2.2 项目建立完成以后的目录结构

项目建立完成以后的目录结构

2.3 MyBatis逆向工程代码编写

核心代码官网已经给出,地址为:http://www.mybatis.org/generator/running/runningWithJava.html

核心代码示例(推荐读取xml配置文件的形式,还有一种基于Java的配置这里就不作演示):

List<String> warnings = new ArrayList<String>();
   boolean overwrite = true;
   //读取xml配置文件,推荐使用这种方式
   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);

本项目中使用代码MyBatisGeneratorApp.java:

public class MyBatisGeneratorApp {

    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 {
            MyBatisGeneratorApp generatorSqlmap = new MyBatisGeneratorApp();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }

}

2.4 MyBatis逆向工程配置文件以及log4j配置文件编写

MyBatis GeneratorXML参考配置文件官网已经给出,地址为:http://www.mybatis.org/generator/configreference/xmlconfig.html

MyBatis逆向工程配置文件以下(注释已经解释的很详细了,我这里就很少作解释了):

<?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>
        <!--数据库链接的信息:驱动类、链接地址、用户名、密码 ,加上“useSSL=false”是由于我SSL链接数据库出现了错误 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/kpi_project?useSSL=false"
            userId="root" password="xxx">
        </jdbcConnection>
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 
            和 NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成pojo类的位置 -->
        <javaModelGenerator targetPackage="pojo"
            targetProject=".\src\main\java">
            <!-- enableSubPackages:是否让schema做为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理先后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\java">
            <!-- enableSubPackages:是否让schema做为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="mapper" targetProject=".\src\main\java">
            <!-- enableSubPackages:是否让schema做为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 指定数据库表 -->
        <table schema="" tableName="com_role"></table>
        <table schema="" tableName="com_rule"></table>
        <table schema="" tableName="kpi_assess"></table>
        <table schema="" tableName="kpi_assign"></table>
        <table schema="" tableName="kpi_complain"></table>
        <table schema="" tableName="kpi_index"></table>
        <table schema="" tableName="kpi_institute"></table>
        <table schema="" tableName="kpi_peformance"></table>
        <table schema="" tableName="kpi_result"></table>
        <table schema="" tableName="kpi_score"></table>
        <table schema="" tableName="sys_permission"></table>
        <table schema="" tableName="sys_role"></table>
        <table schema="" tableName="sys_role_perm"></table>
        <table schema="" tableName="sys_user"></table>
        <table schema="" tableName="sys_user_role"></table>    
    </context>
</generatorConfiguration>

个人log4j的配置文件以下:

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

2.5 运行结果

pojo及example类:
pojo及example类

mapper接口及mapper.xml:

mapper接口及mapper.xml

咱们已经介绍了MyBatis逆向工程以及它的使用,下面咱们简单的总结与补充一下所学的知识。

三 总结

  • 什么是逆向工程?

    MBG能够根据数据库表自动为您生成pojo类example类(用于添加条件,至关where语句后面的部分 )mapper文件`。

  • 如何使用逆向工程?

    pom文件(添加相关jar包)->逆向工程核心代码编写->建立generatorConfig.xml配置文件(能够加上log4j日志打印配置文件)

若是你以为个人文章对你有帮助话,欢迎关注个人微信公众号:" Java面试通关手册"(一个有温度的微信公众号,无广告,单纯技术分享,期待与你共同进步~~~坚持原创,分享美文,分享各类Java学习资源。)

相关文章
相关标签/搜索