MyBatis的逆向工程详细步骤操作

1. MyBatis的逆向工程详细步骤操作

文章目录

  • 1. MyBatis的逆向工程详细步骤操作
  • 2. 逆向工程配置与生成
    • 2.1 MyBatis3Simple:基础版,只有基本的增删改查
      • 2.1.1 第一步:在`pom.xml` 中添加逆向工程插件
      • 2.1.2 第二步:配置 generatorConfig.xml
      • 2.1.3 第三步:运行插件
      • 2.1.4 第四步:测试运行
    • 2.2 MyBatis3:生成的是增强版
  • 3. 总结:
  • 4. 最后:


所谓的逆向工程:会/可以根据数据库表逆向生成Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。

思考:使用这个插件的话,需要给这个插件配置哪些信息?

  • POJO类名,包名以及要生成的所在位置
  • SqlMapper.xml 文件名以及生成位置
  • Mapper 接口名以及生成位置
  • 连接数据库的信息
  • 指定哪些表参与逆向工程

关于 MyBatis 的逆向工程有两个版本: 对应在 targetRuntime 的两个值:

  1. MyBatis3Simple:生成的是基础版,只有基本的增删改查。
  2. MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。

在这里插入图片描述

2. 逆向工程配置与生成

在这里插入图片描述

下面我们进行逆向工程配置,让其为我们自动生成va的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。

2.1 MyBatis3Simple:基础版,只有基本的增删改查

2.1.1 第一步:在pom.xml 中添加逆向工程插件

大家直接复制就好了,不用修改的。

<!--定制构建过程-->
<build><!--可配置多个插件--><plugins><!--其中的一个插件:mybatis逆向工程插件--><plugin><!--插件的GAV坐标--><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.1</version><!--允许覆盖--><configuration><overwrite>true</overwrite></configuration><!--插件的依赖--><dependencies><!--mysql驱动依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency></dependencies></plugin></plugins>
</build>

在这里插入图片描述

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<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>com.rainbowsea</groupId><artifactId>mybatis-012-generator2</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><!--        mybatis 的依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.10</version></dependency><!--        mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><!--        引入 logback的依赖,这个日志框架实现了slf4j 规范--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency></dependencies><!--定制构建过程--><build><!--可配置多个插件--><plugins><!--其中的一个插件:mybatis逆向工程插件--><plugin><!--插件的GAV坐标--><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.1</version><!--允许覆盖--><configuration><overwrite>true</overwrite></configuration><!--插件的依赖--><dependencies><!--mysql驱动依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency></dependencies></plugin></plugins></build></project>

2.1.2 第二步:配置 generatorConfig.xml

注意:该文件必须配置到类的根路径下,并且该文件名必须是为 generatorConfig.xml 不可以是其它的。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!--targetRuntime有两个值:MyBatis3Simple:生成的是基础版,只有基本的增删改查。MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。--><context id="DB2Tables" targetRuntime="MyBatis3Simple"><!--防止生成重复代码--><plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/><commentGenerator><!--是否去掉生成日期--><property name="suppressDate" value="true"/><!--是否去除注释--><property name="suppressAllComments" value="true"/></commentGenerator><!--连接数据库信息--><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/powernode"userId="root"password="root"></jdbcConnection><!-- 生成pojo包名和位置 --><javaModelGenerator targetPackage="com.powernode.mybatis.pojo" targetProject="src/main/java"><!--是否开启子包--><property name="enableSubPackages" value="true"/><!--是否去除字段名的前后空白--><property name="trimStrings" value="true"/></javaModelGenerator><!-- 生成SQL映射文件的包名和位置 --><sqlMapGenerator targetPackage="com.powernode.mybatis.mapper" targetProject="src/main/resources"><!--是否开启子包--><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- 生成Mapper接口的包名和位置 --><javaClientGeneratortype="xmlMapper"targetPackage="com.powernode.mybatis.mapper"targetProject="src/main/java"><property name="enableSubPackages" value="true"/></javaClientGenerator><!-- 表名和对应的实体类名--><table tableName="t_car" domainObjectName="Car"/></context>
</generatorConfiguration>

在这里插入图片描述

下面,我们先使用 MyBatis3Simple:生成的是基础版,只有基本的增删改查

在这里插入图片描述

注意:需要将其中的一些信息修改为你自己的比如(数据库的账号密码,以及你所想的包名的路径名称等等)

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!--targetRuntime有两个值:MyBatis3Simple:生成的是基础版,只有基本的增删改查。MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。--><context id="DB2Tables" targetRuntime="MyBatis3Simple"><!--防止生成重复代码--><plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/><commentGenerator><!--是否去掉生成日期--><property name="suppressDate" value="true"/><!--是否去除注释--><property name="suppressAllComments" value="true"/></commentGenerator><!--连接数据库信息--><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/powernode"userId="root"password="MySQL123"></jdbcConnection><!-- 生成pojo包名和位置 --><javaModelGenerator targetPackage="com.rainbowsea.mybatis.pojo" targetProject="src/main/java"><!--是否开启子包--><property name="enableSubPackages" value="true"/><!--是否去除字段名的前后空白--><property name="trimStrings" value="true"/></javaModelGenerator><!-- 生成SQL映射文件的包名和位置 --><sqlMapGenerator targetPackage="com.rainbowsea.mybatis.mapper" targetProject="src/main/resources"><!--是否开启子包--><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- 生成Mapper接口的包名和位置 --><javaClientGeneratortype="xmlMapper"targetPackage="com.rainbowsea.mybatis.mapper"targetProject="src/main/java"><property name="enableSubPackages" value="true"/></javaClientGenerator><!-- 表名和对应的实体类名--><table tableName="t_car" domainObjectName="Car"/></context>
</generatorConfiguration>

2.1.3 第三步:运行插件

在这里插入图片描述

在这里插入图片描述

我们可以打开项目看看。

在这里插入图片描述

在这里插入图片描述

2.1.4 第四步:测试运行

别忘记了,运行MyBatis 还是需要导入关于 MyBatis 的相关依赖的 jar 包的

  • 依赖:mybatis依赖、mysql驱动依赖、junit依赖、logback依赖
  • jdbc.properties
  • mybatis-config.xml
  • logback.xml

编写测试程序:

在这里插入图片描述

在这里插入图片描述

package com.rainbowsea.mybatis.test;import com.rainbowsea.mybatis.mapper.CarMapper;
import com.rainbowsea.mybatis.pojo.Car;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;public class CarMapperTest {// CarExample类负责封装查询条件的@Testpublic void testSelect() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);// 执行查询// 1. 查询一个Car car = mapper.selectByPrimaryKey(118L);System.out.println(car);sqlSession.close();}
}

2.2 MyBatis3:生成的是增强版

升级为 MyBatis3 增强版,只需要在 generatorConfig.xml 配置文件当中的targetRuntime=“MyBatis3” 的值,设置为:myBatis3 即可。其它的和上面 MyBatis3Simple 的操作是一样的。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意:MyBatis3 增强版,多出来的这个 CarExample 实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的

如下运行测试:

在这里插入图片描述

package com.rainbowsea.mybatis.test;import com.rainbowsea.mybatis.mapper.CarMapper;
import com.rainbowsea.mybatis.pojo.Car;
import com.rainbowsea.mybatis.pojo.CarExample;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;public class CarMapperTest {@Testpublic void testDeleteByPrimaryKey() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);// 执行查询// 1. 查询一个Car car = mapper.selectByPrimaryKey(118L);System.out.println(car);// 2. 查询所有(selectByExample 根据条件查询,如果条件是null表示没有条件)List<Car> cars = mapper.selectByExample(null);cars.forEach(car1 -> {System.out.println(car1);});// 3. 按照条件进行查询// 封装条件,通过CarExample 对象来封装查询条件CarExample carExample = new CarExample();// 调用carExample.createCriteria()方法来创建查询条件carExample.createCriteria().andBrandLike("小米").andGuidePriceGreaterThan(new BigDecimal(30.0));// 添加 orcarExample.or().andCarTypeEqualTo("燃油车");// 执行查询List<Car> cars2 = mapper.selectByExample(carExample);cars2.forEach(car2->{System.out.println(car2);});sqlSession.close();}
}

在这里插入图片描述

package com.powernode.mybatis.test;import com.powernode.mybatis.mapper.CarMapper;
import com.powernode.mybatis.pojo.Car;
import com.powernode.mybatis.pojo.CarExample;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.math.BigDecimal;
import java.util.List;public class GeneratorTest {@Testpublic void testGenerator() throws Exception{SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);// 增/*Car car = new Car();car.setCarNum("1111");car.setBrand("比亚迪唐");car.setGuidePrice(new BigDecimal(30.0));car.setProduceTime("2010-10-12");car.setCarType("燃油车");int count = mapper.insert(car);System.out.println("插入了几条记录:" + count);*/// 删/*int count = mapper.deleteByPrimaryKey(83L);System.out.println("删除了几条记录:" + count);*/// 改// 根据主键修改/*Car car = new Car();car.setId(89L);car.setGuidePrice(new BigDecimal(20.0));car.setCarType("新能源");int count = mapper.updateByPrimaryKey(car);System.out.println("更新了几条记录:" + count);*/// 根据主键选择性修改/*car = new Car();car.setId(89L);car.setCarNum("3333");car.setBrand("宝马520Li");car.setProduceTime("1999-01-10");count = mapper.updateByPrimaryKeySelective(car);System.out.println("更新了几条记录:" + count);*/// 查一个Car car = mapper.selectByPrimaryKey(89L);System.out.println(car);// 查所有List<Car> cars = mapper.selectByExample(null);cars.forEach(c -> System.out.println(c));// 多条件查询// QBC 风格:Query By Criteria 一种查询方式,比较面向对象,看不到sql语句。CarExample carExample = new CarExample();carExample.createCriteria().andBrandEqualTo("丰田霸道").andGuidePriceGreaterThan(new BigDecimal(60.0));carExample.or().andProduceTimeBetween("2000-10-11", "2022-10-11");mapper.selectByExample(carExample);sqlSession.commit();}
}

3. 总结:

  1. 所谓的逆向工程:会/可以根据数据库表逆向生成Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。
  2. 关于 MyBatis 的逆向工程有两个版本:对应在 targetRuntime 的两个值:
1.  MyBatis3Simple:生成的是基础版,只有基本的增删改查。
2.  MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。
  1. 注意:MyBatis3 增强版,多出来的这个 CarExample 实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的

4. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

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

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

相关文章

Ubuntu 18.04下普通用户的一次提权过程

Ubuntu 18.04下普通用户的一次提权过程 一.背景介绍:二.主要调试过程:三.相关命令:1.设置BMC密码,获取BMC IP2.找一台ubuntu搭建TFTP服务,用来替换grub.cfg文件3.从调试服务器的/boot/grub/grub.cfg中提取出recovery mode的配置,简化并生成新的配置文件grub.cfg,放在tftp服务的…

万能破题方法包(3)暴力破解法

一、前言 暴力破解法是指通过尝试所有可能的密码组合来破解密码 1.1、概念 暴力破解法是一种通过尝试所有可能的密码组合来破解密码的方法。它基于暴力的方式&#xff0c;不依赖于任何密码漏洞或特殊技巧&#xff0c;而是通过穷举所有可能性来找到正确的密码。 1.2、解决步骤 …

Qt项目天气预报(2) - 重写事件函数

鼠标右键实现退出界面 知识点QMenu: QMenu 弹出对话框 --> 相对QMessageBox 更加轻量点 QMenu是Qt库中用于创建弹出式菜单的类&#xff0c;它通常出现在应用程序的顶部菜单栏、按钮的右键菜单或自定义上下文菜单中。以下是关于QMenu的详细介绍&#xff1a; 1. 类的基本特…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第38课-密室逃脱-3D互动剧情

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第38课-密室逃脱 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

热镀锌钢板耐液体性能测 彩钢板抗拉强度检测

钢板检测范围&#xff1a;钢板、彩钢板、不锈钢板、耐磨钢板、合金钢板、压型钢板、冷轧钢板、弹簧钢板、碳钢板、热轧钢板、厚钢板、热镀锌钢板、冲孔钢板、船用钢板、硅钢板、花纹钢板、压力容器钢板、耐候钢板、 钢板检测项目包括化学性能检测、性能检测、机械性能检测、老…

AI办公自动化:kimi批量搜索提取PDF文档中特定文本内容

工作任务&#xff1a;PDF文档中有资料来源这一行&#xff0c;比如&#xff1a; 资料来源&#xff1a;moomoo tech、The Information、Bloomberg、Reuters&#xff0c;浙商证券研究所 数据来源&#xff1a;CSDN、浙商证券研究所 数据来源&#xff1a;CSDN、arXiv、浙商证券研…

C++ 19 之 封装

c19封装.cpp #include <iostream> #include <string.h> using namespace std;// 封装&#xff1a;将行为和属性作为一个整体来表现生活中的事物// 人&#xff1a; 行为&#xff1a; 吃饭 属性&#xff1a; 姓名、年龄 struct person {char name[20];int age;…

掌握特劳特定位理论核心,明晰企业战略定位之重

在当今瞬息万变的市场环境中&#xff0c;企业战略定位的重要性日益凸显。它不仅是企业在激烈竞争中保持优势的关键&#xff0c;更是企业实现长期可持续发展的基石。 哈佛大学战略学教授迈克尔波特&#xff08;Michael Porter&#xff09;指出战略就是形成一套独具的运营活动&a…

为什么微信输入法是比搜狗输入法更好的选择?

微信输入法官网&#xff1a;https://z.weixin.qq.com/ 最近使用搜狗输入法时&#xff0c;频繁弹出广告&#xff0c;实在令人烦恼&#xff0c;于是我干脆卸载了它。然而&#xff0c;电脑上没有输入法是不行的。经过在网上对比了许多输入法软件后&#xff0c;我发现了微信输入法。…

skywalking9.4 链路追踪

下载&#xff0c;很慢很慢很慢&#xff01;&#xff01;&#xff01;&#xff01; jdk 使用jdk17 skywalking-apm 9.4 java-agent 9.0 idea 本地开发配置 第1行配置按实际来&#xff1b; 第2行自定义&#xff0c;一般和微服务名称相同&#xff1b; 第3行ip写安装的机器ip,端…

装备名称检索与推荐

1、引言 在这个信息爆炸的时代&#xff0c;无论是军事爱好者、科研工作者&#xff0c;还是户外探险者&#xff0c;他们都需要快速准确地获取特定装备的信息。装备名称检索推荐系统正是为了应对这一挑战而生。它像一位经验丰富的向导&#xff0c;引领用户穿越复杂的装备海洋&am…

微信公众号打通与登录的实现

今天实现一下与微信公众号进行对接&#xff0c;通过扫描二维码的方式来进行注册与登录&#xff0c;获取用户的微信唯一标识作为用户的username&#xff0c;下面我们开始编写。 骨架建立&#xff1a; 建包&#xff1a; 第一步还是先将骨架建好&#xff0c;与网关骨架差不多&a…

玄机平台应急响应—MySQL应急

前言 这个是比较简单的&#xff0c;其实和MySQL没啥太大的关系&#xff0c;没涉及太多MySQL的知识。看一下它的flag要求吧。 flag1 它说黑客写入的shell&#xff0c;那我们就去它的网站目录去看看&#xff0c;果然有一个叫sh.php的文件。 flag1{ccfda79e-7aa1-4275-bc26-a61…

DeepDriving | CUDA编程-05:流和事件

本文来源公众号“DeepDriving”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;CUDA编程-05&#xff1a;流和事件 1 CUDA流 在CUDA中有两个级别的并发&#xff1a;内核级并发和网格级并发。前面的文章DeepDriving | CUDA编程-04&…

ESP32 BLE学习(0) — 基础架构

前言 &#xff08;1&#xff09;学习本文之前&#xff0c;需要先了解一下蓝牙的基本概念&#xff1a;BLE学习笔记&#xff08;0.0&#xff09; —— 基础概念&#xff08;0&#xff09; &#xff08;2&#xff09; 学习一款芯片的蓝牙肯定需要先简单了解一下该芯片的体系结构&a…

园区地图导航系统:技术原理、部署方案与智能化应用解析

随着智能化时代的到来&#xff0c;园区管理面临诸多挑战。维小帮园区地图导航系统&#xff0c;采用前沿技术&#xff0c;为园区提供全面的导航解决方案&#xff0c;极大提升了园区管理效率和用户体验。 一、园区地图导航系统的功能特点 维小帮园区地图导航系统&#xff0c;以其…

MongoDB 多层级查询

多层级查询 注意&#xff1a;要注意代码顺序 查询层级数据代码放前面&#xff0c;查询条件放后面 if (StringUtils.isBlank(params.getDocType())) {params.setDocType(DOC_TDCTYPE);}String docName mapper.findByDocInfo(params.getDocType());List<ExpertApprovalOpin…

智能化状态管理:自动状态流转处理模块

目录 基本背景介绍 具体实现 基本数据准备 基本数据表 状态转换常量 状态转换注解 任务处理模版 各任务实现逻辑 开启比对任务进行处理 降噪字段处理任务处理 开启业务数据比对处理 业务数据比对处理 开始核对数据生成最终报告处理 核对数据生成最终报告处理 状…

AI项目二十二:行人属性识别

若该文为原创文章&#xff0c;转载请注明原文出处。 分享一个行人属性分析系统&#xff0c;识别行人&#xff0c;并标记每个人的属性。 项目代码来自公众号渡码的项目。 本人用Win10复现完整项目&#xff0c;并记录过程。 源码会上传到github,可以自行下载测试。 Yinyifen…

Flutter 简化CustomPainter的绘制

文章目录 前言一、为何简化&#xff1f;1、通常做法&#xff08;1&#xff09;、绘制形状1&#xff08;2&#xff09;、绘制形状2&#xff08;3&#xff09;、界面显示 2、简化 二、完整代码三、使用示例1、绘制图形2、动态触发绘制 总结 前言 使用Flutter做界面时&#xff0c…