MyBatis框架 - 逆向工程

  • 没有MyBatis的逆向工程:实体类 --> 持久层接口类 --> 业务层接口类、实现类 --> resources下的*Mapper配置文件,需要自己手动写。
  • 有MyBatis的逆向工程,这个过程可以省略,使用逆向工程直接生成。

逆向工程的配置文件

图中红框的位置要与事件的项目匹配正确:

xml 复制代码
<context id="mybatisGenerator" >
    <commentGenerator>
        <!-- 是否去除自动生成的注释 true:是 : false:否 -->
        <property name="suppressAllComments" value="true" />
    </commentGenerator>
    <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
    <!--与spring的配置文件中的数据源无关-->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/mybatis_db?serverTimezone=CTT&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;allowMultiQueries=true" userId="root"
                    password="root">
    </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.tx.entity"
                        targetProject=".\mybatisJava05\src\main\java">
        <!-- enableSubPackages:是否让schema作为包的后缀 -->
        <property name="enableSubPackages" value="false" />
        <!-- 从数据库返回的值被清理前后的空格 -->
        <property name="trimStrings" value="true" />
    </javaModelGenerator>
    <!-- targetProject:mapper映射文件生成的位置 -->
    <sqlMapGenerator targetPackage="mapper"
                     targetProject=".\mybatisJava05\src\main\resources">
        <!-- enableSubPackages:是否让schema作为包的后缀 -->
        <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>
    <!-- targetPackage:mapper接口生成的位置 -->
    <javaClientGenerator type="XMLMAPPER"
                         targetPackage="com.tx.dao"
                         targetProject=".\mybatisJava05\src\main\java">
        <!-- enableSubPackages:是否让schema作为包的后缀 -->
        <property name="enableSubPackages" value="false" />
    </javaClientGenerator>
    <!-- 指定数据库表 -->
    <table tableName="user" enableCountByExample="false"
           enableUpdateByExample="false" enableDeleteByExample="false"
           enableSelectByExample="false" selectByExampleQueryId="false"/>


    <!-- 有些表的字段需要指定java类型
     <table schema="" tableName="">
        <columnOverride column="" javaType="" />
    </table> -->
</context>

反向类

java 复制代码
package com.tx.utils;

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 Generator {
    public void generator() throws Exception  {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        // 执行逆向工程配置文件
        File configFile = new File("mybatisJava05/src/main/resources/generatorConfig.xml");
        ConfigurationParser parser = new ConfigurationParser(warnings);
        // 读取配置文件
        Configuration config = parser.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 {
            Generator generatorSqlmap = new Generator();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行逆向工程配置文件目录要匹配正确,运行反向类后,会自动生成User实体类、UserMapper接口、UserMapper.xml文件

注意:实体类中需要添加有参构造器、无参构造器、重写toString()方法,重点是让实体类继承Serializable

相关推荐
关于不上作者榜就原神启动那件事1 小时前
心跳机制详解
java·前端·servlet
张np1 小时前
java基础-List接口
java·开发语言
聆风吟º1 小时前
【Spring Boot 报错已解决】Error creating bean with entityManagerFactory 原因分析与解决方案
java·spring boot·后端
o***74171 小时前
SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用!
spring boot·后端·mybatis
Unstoppable221 小时前
八股训练营第 34 天 | synchronized 和 Lock 的区别是什么?synchronized 和 ReentrantLock 的区别是什么?
java·八股
ITMr.罗1 小时前
ORM会不会刷关联属性
数据库·sql·oracle
光影34151 小时前
购买 orangepiB 主板 ubuntu 系统 联网
数据库·ubuntu·postgresql