详解Mybatis之逆向工程问题

简介: 详解Mybatis之逆向工程问题

编译软件:IntelliJ IDEA 2019.2.4 x64

操作系统:win10 x64 位 家庭版

Maven版本:apache-maven-3.6.3

Mybatis版本:3.5.6


一. Mybatis中的逆向工程是什么?

要想回答这个问题,就不得不先了解和逆向工程相对的术语概念–正向工程

🤔什么是正向工程?

套用百度百科中的词条释义

正向工程是指一般工业产品开发是从确定预期功能与规格目标开始,构思产品结构,然后进行每个零部件的设计、制造以及检验,再经过装配、性能测试等程序完成整个开发过程,每个零部件都有设计图纸,按确定的工艺文件加工。整个开发流程为:“构思-设计-产品”,此类开发工作称之为正向工程 。

上述词条释义可能对有的同学来说过于抽象,难于理解,没关系,在我看来,正向工程就像建筑工人依照房屋建筑结构图去修建房子,工期完成后顺利交房。这种从无到有的构思实现过程就是正向工程

在Mybatis中通过Java应用程序中的代码去影响数据表中的数据【Java对象影响表】,此之谓正向工程

🤔那么什么是逆向工程?

还是举刚才的例子,有经验的建筑工程师可以根据现有的实际房屋建筑,他可以逆向分析出房屋的架构设计,所需建材以及建造成本。这种直接从成品分析,推导出产品的设计原理的过程,就是逆向工程。 再看如下百度百科中的词条释义,解释的非常透彻,瞬间醍醐灌顶!!!

逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理。

在Mybatis中的逆向工程,就是以数据库中的表去影响Java程序中的代码【表影响java对象(pojo & XXXMapper & XXXMapper.xml)】

🤔数据库中的表如何影响Java代码?或者说怎么个影响法?

换句话来说,Mybatis使用MBG可以根据数据库中的表反向生成相关的Java对象 & xxxMapper & xxxxMapper.xml


二. 什么是MBG?

👉释义

MBG,英文全称为MyBatis Generator,是一个专门为MyBatis框架使用者定制的代码生成器

👉功能

可以快速的根据表生成对应的映射文件,接口,以及bean类

👉缺点

只可以生成单表CRUD,但是表连接、存储过程等这些复杂sq的定义需要我们手工编写

👉官方参考文档

MyBatis 生成器核心 – MyBatis 生成器简介


三. MBG如何使用?【基本使用】

👉使用步骤

①导入jar包

<!--  导入MBG的jar包      -->
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.6</version>
</dependency>

②编写配置文件【mbg.xml】

位置:resources目录下

代码示例如下:

<?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>
    <!--
        id厨性:设置一个唯一标识
        targetRuntime病性值说明:
        MyBatis3 simple:基本的增删改查
        MyBatis3:带条件查询的增删改【QBC风格(Query By criteria)】
        注意,如果所用的MySQL版本为8,就得在jdbcConnection标签内加上  <property name="nullcatalogMeanscurrent" value="true"/>
        -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/0411db?serverTimezone=UTC"
                        userId="root"
                        password="123456">
            <property name="nullcatalogMeanscurrent" value="true"/>
        </jdbcConnection>
        <javaTypeResolver >
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!--  设置Java Bean的生成策路      -->
        <javaModelGenerator targetPackage="mybatis.pojo" targetProject="src/main/java">
        </javaModelGenerator>
        <!--  设置映射文件的生成策略    -->
        <sqlMapGenerator targetPackage="mybatis.mapper"  targetProject="src/main/resources">
        </sqlMapGenerator>
        <!--  设置Mapper接口的生成策略      -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="mybatis.mapper"  targetProject="src/main/java">
        </javaClientGenerator>
        <!--   逆向分析的表(MBG根据数据库中表逆向生成表对应的java Bean(pojo)    -->
        <table  tableName="tbl_employee" domainObjectName="Employee" ></table>
        <table  tableName="tbl_department" domainObjectName="Department" ></table>
    </context>
</generatorConfiguration>

③运行程序【代码生成器】

代码示例如下:

/**
 * 测试MBG(代码生成器)
 * @throws Exception
 */
@Test
public void test01() throws Exception{
    List<String> warnings = new ArrayList<String>();
    boolean overwrite = true;
    // File基于当前项目作为根路径下去找mbg.xml
    File configFile = new File("src/main/resources/mbg.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);
}

👉案例

测试MBG生成的EmployeeMapper接口中的selectByPrimaryKey()方法

代码示例如下:

//测试EmployeeMapper接口中的selectByPrimaryKey()方法
@Test
public void test02(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = employeeMapper.selectByPrimaryKey(1);
        System.out.println(employee);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

相关文章
|
3月前
|
XML Java 数据库连接
mybatis-plus逆向工程详解
mybatis-plus逆向工程详解
297 0
|
12月前
|
XML Java 数据库连接
Mybatis使用generator逆向工程生成器生成entity、mapper、.xml模版类
今天将表建好了,但是一个一个的建实体类、Mapper接口、Mapper.xml文件就十分的麻烦,所以我就想到了MyBatis逆向,今天就操作一把!这里我们采用maven来进行操作。
193 0
|
3月前
|
Java 数据库连接 数据库
Mybatis逆向工程笔记小结
Mybatis逆向工程笔记小结
|
2月前
|
SQL 缓存 Java
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
|
3月前
|
XML Java 数据库连接
Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
【5月更文挑战第10天】Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
44 6
|
3月前
|
数据库
Springboot+mybatis-plus逆向工程生成代码器
Springboot+mybatis-plus逆向工程生成代码器
|
XML Java 数据库连接
优雅地使用Mybatis逆向工程生成类
优雅地使用Mybatis逆向工程生成类
83 1
|
SQL 运维 前端开发
Mybatis-Plus之逆向工程之旅
Mybatis-Plus之逆向工程之旅
127 0
|
3月前
|
SQL Java 数据库连接
MyBatis之逆向工程
【1月更文挑战第4天】 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类 Mapper接口 Mapper映射文件
50 2
|
3月前
|
Java 数据库连接 Maven
MyBatis逆向工程可以生成哪些内容?
MyBatis逆向工程可以生成哪些内容?
31 0