详解Mybatis之逆向工程问题

news2024/9/28 19:25:17

编译软件:IntelliJ IDEA 2019.2.4 x64
操作系统:win10 x64 位 家庭版
Maven版本:apache-maven-3.6.3
Mybatis版本:3.5.6


文章目录

  • 一. Mybatis中的逆向工程是什么?
  • 二. 什么是MBG?
  • 三. MBG如何使用?【基本使用】


在这里插入图片描述


一. 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();
    }
}

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/808636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio 启用设备远程调试配置完整步聚

启用手机设置->开发者选项-无线调试,然后选择允许 已启用后无线调试变成绿色 ,点击无线调试进入详情页面 点击Android Studio的Device Manager 下的WIFI图标 会弹出下图窗口 打开手机的开发者选项中的WIFI调试(无线调试)下的使用二维码配对设备进行扫描. 设备配对成功后手机…

JDBC Common Connection Problems

连接问题 Access denied for user ‘root’‘localhost’ (using password: YES) 第一种情况 问题描述 环境&#xff1a;IDEA 2021.1 windows11 mysql8.0 已知条件&#xff1a;1.已正常安装数据库2.无法通过CMD输入mysql -u root -p 密码进入数据库3.无法通过Navicat进入4…

2023-07-29:给你一个由数字组成的字符串 s,返回 s 中独特子字符串数量。 其中的每一个数字出现的频率都相同。

2023-07-29&#xff1a;给你一个由数字组成的字符串 s&#xff0c;返回 s 中独特子字符串数量。 其中的每一个数字出现的频率都相同。 答案2023-07-29&#xff1a; 大体步骤如下&#xff1a; 1.初始化变量base为固定值1000000007&#xff0c;用于计算哈希码。 2.创建一个空…

InnoDB引擎底层逻辑讲解——架构之内存架构

1.InnoDB引擎架构 下图为InnoDB架构图&#xff0c;左侧为内存结构&#xff0c;右侧为磁盘结构。 2.InnoDB内存架构讲解 2.1 Buffer Pool缓冲池 2.2 Change Buffer更改缓冲区 2.3 Adaptive Hash Index自适应hash索引 查看自适应hash索引是否开启&#xff1a; show variable…

qt截图软件中画箭头代码原理

截图工具中&#xff0c;需要画一个指向箭头&#xff0c; 该箭头的形状解析示意图如下所示&#xff0c; 对应的qt代码如下&#xff1a; // 画出一个箭头线&#xff0c;主要是算出这几个点。 // 这个箭头形状是这样的&#xff0c;胖嘟嘟的那种&#xff0c;但是出发点是一个细的 Q…

机器学习深度学习——权重衰减

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——模型选择、欠拟合和过拟合 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你…

教雅川学缠论04-笔

笔由3部分组成&#xff1a; 顶分型K线底分型&#xff0c;或者 底分型K线顶分型 注意&#xff1a;笔加一起至少7根K线&#xff0c;因为一个底分型至少3根&#xff0c;K先至少1个&#xff0c;顶分型至少3根 下图中红色线段就是一个标准的笔&#xff0c;它始于一个底分型&#xff…

❤️创意网页:创建更炫酷的动态网页——彩色数字(1到9)粒子动画

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

基于WSL2、Ubuntu和VS Code的CUDA平台运行C语言程序

一、CUDA程序执行方法 执行步骤为&#xff1a; 安装Visual Studio Code。在Visual Studio Code中安装插件WSL与电脑的WSL2进行连接。点击左下角&#xff0c;然后再选择连接到WSL。 在WSL中创建以 .cu 为后缀的文件。 rootDESKTOP-HR6VO5J:~# mkdir CUDA /…

VMware Linux 可视化增加磁盘

1、VMware 增加磁盘 2、disks挂载磁盘 此处我挂载的是20G磁盘&#xff0c;截图只是用5G的做过程演示例子。 3、验证挂载磁盘

Chrome 浏览器+Postman还能这样做接口测试 ?

如果把测试简单分为两类&#xff0c;那么就是客户端测试和服务端测试。客户端的测试包括UI测试&#xff0c;兼容性测试等&#xff0c;服务端测试包括接口测试。接口测试检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;它绕过了客户端&#xff0c;直接对服务端进行测…

UE5 C++ SplineMesh蓝图函数库实现(小白笔记)

UE5 C++ SplineMesh的蓝图函数库实现方法 UAAABlueprintFunctionLibrary UAAABlueprintFunctionLibrary.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "Components/Spl…

【Java开发】 Mybatis-Flex 01:快速入门

Mybatis 作为头部的 ORM 框架&#xff0c;他的增强工具可谓层出不穷&#xff0c;比如出名的 Mybatis-Plus 和 阿里云开源的 Fluent-MyBatis&#xff0c;如今出了一款 Mybatis-Flex &#xff0c;相比前两款功能更为强大、性能更为强悍&#xff0c;不妨来了解一下。 目录 1 Myba…

CAD Voronoi3D V1.0.1 版本更新说明

更新说明 CAD Voronoi3D V1.0.1版本对泰森多边形晶格进行进一步的优化。 采用新算法大幅度减少形体边界出现小晶格的可能性&#xff0c;使区块更均匀&#xff1a; 优化曲边边界晶格曲率问题&#xff0c;消除曲边形体晶格边界曲率过大现象&#xff1a; 优化生成算法&#xff…

Ubuntu—vi编辑器的使用一

vi编辑器 vi是Linux中最基本的编辑器。但vi编辑器在系统管理、服务器配置工作中永远都是无可替代的。 vi编辑器的使用 vi有以下三种模式 命令行模式 用户在用vi编辑文件时&#xff0c; 最初进入的是该模式。可以进行复制、粘贴等操作 插入模式 进行文件编辑&#xff0c; 按…

35.图片幻灯片

图片幻灯片 html部分 <div class"carousel"><div class"image-container"><img src"./static/20180529205331_yhGyf.jpeg" alt"" srcset""><img src"./static/20190214214253_hsjqw.webp"…

PP-Matting: AI高精度图像前景Matting,让抠图轻而易举

分割和Matting的一个重要区别是:分割返回的是像素分类标签,其结果是整型数据;而Matting返回的是属于前景或背景的概率P,从而在前景与背景交互区域产生渐变的效果,使得抠图更加自然。Matting分割模型训练完成后,对于原始图像每个位置上的像素,都将生成一个表示其前景透明…

AB 压力测试

服务器配置 阿里云Ubuntu 64位 CPU1 核 内存2 GB 公网带宽1 Mbps ab -c100 -n1000 http://127.0.0.1:9501/ -n&#xff1a;在测试会话中所执行的请求个数。默认时&#xff0c;仅执行一个请求。 -c&#xff1a;一次产生的请求个数。默认是一次一个。 ab -c 100 -n 200 ht…

阿里云SMS测试三步曲

文章目录 阿里云SMS测试三步曲申请签名与模板申请签名申请模板 AcesssKey测试用例Apache Maven测试代码 阿里云SMS测试三步曲 申请签名与模板 签名与模板的申请的审核时间有1个多小时&#xff0c;且是9~21点时间段内 申请签名和模板时如果是为了做测试&#xff0c;要特别说明…

玩转Tomcat:从安装到部署

文章目录 一、什么是 Tomcat二、Tomcat 的安装与使用2.1 下载安装2.2 目录结构2.3 启动 Tomcat 三、部署程序到 Tomcat3.1 Windows环境3.2 Linux环境 一、什么是 Tomcat 一看到 Tomcat&#xff0c;我们一般会想到什么&#xff1f;没错&#xff0c;就是他&#xff0c;童年的回忆…