搞懂Mybatis逆向⼯程这一篇就够了

Mybatis逆向⼯程配置与⽣成

  • 使用基础版本
    • 前置准备
      • 项目结构
      • 导入依赖
      • 配置generatorConfig.xml
      • 数据库表
    • 使用逆向工程
      • 点击插件使用
      • 双击之后效果
      • UserMapper.xml的内容
      • UserMapper接口的内容
    • 测试逆向工程
  • 使用增强版
    • 项目结构
      • UserExample和UserWithBLOBs
      • UserMapper接口
    • 测试方法
    • 测试结果

使用基础版本

前置准备

项目结构

创建一个空的模块,此时java目录里面没有代码,mapper映射文件也没有。
在这里插入图片描述

导入依赖

在pom中添加逆向⼯程插件

<!--定制构建过程-->
<build><!--可配置多个插件--><plugins><!--mybatis逆向⼯程插件--><plugin><!--插件的GAV坐标--><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.1</version><!--允许覆盖--><!--如果存在pojo实体类使用逆向工程时候,是清空然后在写入,如果不覆盖可能是追加的模式,会出错--><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>

GAV坐标是指在软件开发中常用的一种标识方式,用于唯一确定一个软件插件或库。它由三个部分组成:Group ID(组织ID)、Artifact ID(项目ID)和Version(版本号),因此又称为GAV坐标。

  • Group ID(组织ID):代表开发插件或库的组织或团队的唯一标识符。
  • Artifact ID(项目ID):代表插件或库的名称或项目的唯一标识符。
  • Version(版本号):代表插件或库的特定版本。

配置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/hqyj03"userId="root"password="yjg"></jdbcConnection><!-- ⽣成pojo包名和位置 --><javaModelGenerator targetPackage="com.yjg.mybatis.pojo" targetProject="src/main/java"><!--是否开启⼦包-->
<!--如果为false会把com.yjg.mybatis.pojo当成一个目录造出来--><property name="enableSubPackages" value="true"/><!--是否去除字段名的前后空⽩--><property name="trimStrings" value="true"/></javaModelGenerator><!-- ⽣成SQL映射⽂件的包名和位置 --><sqlMapGenerator targetPackage="com.yjg.mybatis.mapper" targetProject="src/main/resources"><!--是否开启⼦包--><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- ⽣成Mapper接⼝的包名和位置 --><javaClientGeneratortype="xmlMapper"targetPackage="com.yjg.mybatis.mapper"targetProject="src/main/java"><property name="enableSubPackages" value="true"/></javaClientGenerator><!-- 表名和对应的实体类名--><table tableName="user" domainObjectName="User"/></context>
</generatorConfiguration>

数据库表

CREATE TABLE `user` (`id` int(11) NOT NULL,`username` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用逆向工程

点击插件使用

在这里插入图片描述

双击之后效果

双击之后就会出现,对应得实体类和mapper映射文件。
在这里插入图片描述

UserMapper.xml的内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yjg.mybatis.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.yjg.mybatis.pojo.User"><id column="id" jdbcType="INTEGER" property="id" /><result column="username" jdbcType="VARCHAR" property="username" /><result column="password" jdbcType="VARCHAR" property="password" /></resultMap><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from userwhere id = #{id,jdbcType=INTEGER}</delete><insert id="insert" parameterType="com.yjg.mybatis.pojo.User">insert into user (id, username, password)values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR})</insert><update id="updateByPrimaryKey" parameterType="com.yjg.mybatis.pojo.User">update userset username = #{username,jdbcType=VARCHAR},password = #{password,jdbcType=VARCHAR}where id = #{id,jdbcType=INTEGER}</update><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select id, username, passwordfrom userwhere id = #{id,jdbcType=INTEGER}</select><select id="selectAll" resultMap="BaseResultMap">select id, username, passwordfrom user</select>
</mapper>

UserMapper接口的内容

package com.yjg.mybatis.mapper;
import com.yjg.mybatis.pojo.User;
import java.util.List;
public interface UserMapper {int deleteByPrimaryKey(Integer id);int insert(User row);User selectByPrimaryKey(Integer id);List<User> selectAll();int updateByPrimaryKey(User row);
}

测试逆向工程

使用接口里面的方法看是否能够成功操作数据库

测试一

@Test
public void test01() throws Exception{SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> users = userMapper.selectAll();users.forEach(user -> System.out.println(user));
}

测试结果

能够查出结果,没有问题

在这里插入图片描述
测试二

@Test
public void test02() throws Exception{SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);int i = userMapper.deleteByPrimaryKey(0);System.out.println(i);
}

测试结果

能够删除数据库数据,没有问题
在这里插入图片描述

使用增强版

在配置generatorConfig.xml的时候

targetRuntime有两个值:
MyBatis3Simple:⽣成的是基础版,只有基本的增删改查。
MyBatis3:⽣成的是增强版,除了基本的增删改查之外还有复杂的增删改查。

只需要把上面的generatorConfig.xml文件的targetRuntime值换一下即可。

项目结构

当使用增强版本的时候,就会出现除了User实体类的其他两个类
在这里插入图片描述

UserExample和UserWithBLOBs

  1. UserExampleUserExample是一个用于构建查询条件的辅助类。它提供了一系列的方法,用于设置查询条件,比如等于、大于、小于、排序等。通过使用UserExample,可以方便地构建复杂的查询条件,并将其传递给MyBatis的查询接口进行数据库查询操作。
  2. UserWithBLOBsUserWithBLOBs是生成的包含大字段(BLOBs)的实体类。如果表中存在大字段类型(如TEXT、BLOB等),MyBatis逆向工程会为这些字段生成对应的实体类,并在原有的实体类(比如User)基础上扩展,以支持大字段的获取和设置。

总的来说,UserExampleUserWithBLOBs在MyBatis逆向工程中的作用如下:

  • UserExample帮助构建复杂的查询条件,提供了灵活的方法来指定查询规则和约束条件。
  • UserWithBLOBs是对包含大字段的表生成的实体类,它扩展了原有实体类的功能,使得对大字段的操作更加方便。

UserMapper接口

会比基础的版本多一些方法,相应的UserMapper.xml映射文件也会增多语句

package com.yjg.mybatis.mapper;import com.yjg.mybatis.pojo.User;
import com.yjg.mybatis.pojo.UserExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;public interface UserMapper {long countByExample(UserExample example);int deleteByExample(UserExample example);int deleteByPrimaryKey(Integer id);int insert(User row);int insertSelective(User row);List<User> selectByExample(UserExample example);User selectByPrimaryKey(Integer id);int updateByExampleSelective(@Param("row") User row, @Param("example") UserExample example);int updateByExample(@Param("row") User row, @Param("example") UserExample example);int updateByPrimaryKeySelective(User row);int updateByPrimaryKey(User row);
}

测试方法

@org.junit.Test
public void test01() throws Exception{SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));SqlSession sqlSession = sqlSessionFactory.openSession();//执行查询//查询一个UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = userMapper.selectByPrimaryKey(1);System.out.println(user);System.out.println("===============================================");//查询所有(selectByExample根据条件查询,如果条件为空,则表示没有条件)List<User> users = userMapper.selectByExample(null);users.forEach(user1 -> System.out.println(user1));System.out.println("===============================================");//按照条件进行查询//多条件查询// QBC ⻛格:Query By Criteria ⼀种查询⽅式,⽐较⾯向对象,看不到sql语句。UserExample userExample = new UserExample();userExample.createCriteria().andPasswordLike("%d%").andIdBetween(3, 5);List<User> userList = userMapper.selectByExample(userExample);userList.forEach(u-> System.out.println(u));
}

测试结果

查询一个成功
在这里插入图片描述
查询所有成功

在这里插入图片描述
根据条件查询成功
在这里插入图片描述

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

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

相关文章

深度学习12:胶囊神经网络

目录 研究动机 CNN的缺陷 逆图形法 胶囊网络优点 胶囊网络缺点 研究内容 胶囊是什么 囊间动态路由算法 整体框架 编码器 损失函数 解码器 传统CNN存在着缺陷&#xff08;下面会详细说明&#xff09;&#xff0c;如何解决CNN的不足&#xff0c;Hinton提出了一种对于图…

MySQL学习笔记(八)—— 锁

首先要说明&#xff0c;有的锁是我们自己想加的时候加的&#xff0c;比如全局锁要靠我们自己用命令去加。而有的锁是mysql默认就给你加上了&#xff0c;因为mysql要保证自己最起码的安全性。 InnoDB默认加的是行级锁。 一、全局锁 1.1 用途 全局锁就是把所有的表都给锁了&am…

【Maven教程】(三)基础使用篇:入门使用指南——POM编写、业务代码、测试代码、打包与运行、使用Archetype生成项目骨架~

Maven基础使用篇 1️⃣ 编写 POM2️⃣ 编写业务代码3️⃣ 编写测试代码4️⃣ 打包和运行5️⃣ 使用 Archetype生成项目骨架 1️⃣ 编写 POM 到目前为止&#xff0c;已经大概了解并安装好了Maven环境, 现在&#xff0c;我们开始创建一个最简单的 Hello World 项目。如果你是初次…

匿名对象和一般对象的区别

1.格式的不同 一般对象的格式&#xff1a; ​ Object obj new Object(); ​ 匿名对象的格式&#xff1a; ​ new Object(); 2.作为参数传递机制的不同 2.1先看看一般对象的使用机制 执行步骤&#xff1a; 1.首先程序进入main()函数&#xff0c;执行Object obj&#xff0c;…

电子词典dictionary

一、项目要求&#xff1a; 1.登录注册功能&#xff0c;不能重复登录&#xff0c;重复注册。用户信息也存储在数据库中。 2.单词查询功能 3.历史记录功能&#xff0c;存储单词&#xff0c;意思&#xff0c;以及查询时间&#xff0c;存储在数据库 4.基于TCP&#xff0c;支持多客户…

科技资讯|三星再申请智能戒指商标,智能穿戴进入更小型化发展

三星正在积极扩展可穿戴设备生态&#xff0c;近日向英国知识产权局提交了名为“Samsung Curio”的新商标&#xff0c;其分类为“Class 9”&#xff0c;可能会用于未来的智能戒指。 智能戒指&#xff1a; 可穿戴计算机本质上的智能手环、智能项链、智能眼镜和智能戒指&#xff1…

ARM-汇编指令

一&#xff0c;map.lds文件 链接脚本文件 作用&#xff1a;给编译器进行使用&#xff0c;告诉编译器各个段&#xff0c;如何进行分布 /*输出格式&#xff1a;32位可执行程序&#xff0c;小端对齐*/ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm",…

mysql(八)事务隔离级别及加锁流程详解

目录 MySQL 锁简介什么是锁锁的作用锁的种类共享排他锁共享锁排它锁 粒度锁全局锁表级锁页级锁行级锁种类 意向锁间隙临键记录锁记录锁间隙锁 加锁的流程锁的内存结构加锁的基本流程根据主键加锁根据二级索引加锁根据非索引字段查询加锁加锁规律 锁信息查看查看锁的sql语句 数据…

基于swing的火车站订票系统java jsp车票购票管理mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的火车站订票系统 系统有2权限&#xff1a;…

最新SQLMap进阶技术

SQLMap进阶&#xff1a;参数讲解 &#xff08;1&#xff09;–level 5&#xff1a;探测等级。 参数“–level 5”指需要执行的测试等级&#xff0c;一共有5个等级&#xff08;1~5级&#xff09;&#xff0c;可不加“level”&#xff0c;默认是1级。可以在xml/payloads.xml中看…

计算机安全学习笔记(II):自主访问控制 - DAC

书接上篇博客&#xff0c;自主访问方案是指一个实体可以被授权按其自己的意志使另一个实体能够访问某些资源。DAC的一种通常访问方式是在操作系统或数据库管理系统中运用的访问矩阵(access matrix)。 矩阵中的一维由试图访问资源的被标识的主体组成。这个列表一般由用户或用户…

微服务 Nacos配置热部署

在nacos中添加配置文件 在配置列表中添加配置&#xff0c; 注意&#xff1a;项目的核心配置&#xff0c;需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。 从微服务拉取配置 微服务要拉取nacos中管理的配置&#xff0c;并且与…

C语言初阶测评题:测试你的基础知识和编程技能!!

&#x1f493;博客主页&#xff1a;江池俊的博客⏩收录专栏&#xff1a;C语言刷题专栏&#x1f449;专栏推荐&#xff1a;✅C语言初阶之路 ✅C语言进阶之路&#x1f4bb;代码仓库&#xff1a;江池俊的代码仓库&#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐ 文…

深度学习7:生成对抗网络 – Generative Adversarial Networks | GAN

生成对抗网络 – GAN 是最近2年很热门的一种无监督算法&#xff0c;他能生成出非常逼真的照片&#xff0c;图像甚至视频。我们手机里的照片处理软件中就会使用到它。 目录 生成对抗网络 GAN 的基本原理 大白话版本 非大白话版本 第一阶段&#xff1a;固定「判别器D」&#x…

去除wps段落柄,删除空白页

如图&#xff0c;有一个段落柄在左端&#xff0c;无法删除&#xff0c;只能编辑。 导致本来是8页内容&#xff0c;现在是9页&#xff0c;多了一空白页 后面新建一个空白页&#xff0c;发现默认会自带一个段落柄&#xff0c;所以有可能这个段落柄是不能消除的&#xff0c;那么如…

五种重要的 AI 编程语言

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建3D应用场景 简而言之&#xff1a;决定从哪种语言开始可能会令人生畏。 不用担心&#xff01;本文将解释 AI 中使用的最流行编程语言背后的基础知识&#xff0c;并帮助您决定首先学习哪种语言。对于每种语言&#xff0c;我们将…

Qt Scroll Area控件设置,解决无法显示全部内容,且无法滚动显示问题。

前言&#xff0c;因为要显示很多条目的内容&#xff0c;原来是用Vertical Layout控件里面嵌套Horizontal layout显示了很多行控件&#xff0c;发现最简单的方法就是使用滚动条控件&#xff0c;但是无论如何调整需要滚动的控件高度&#xff0c;始终无法滚动显示内容。也就是说添…

Leetcode刷题笔记--Hot21-30

目录 1--全排列&#xff08;46&#xff09; 2--旋转图像&#xff08;48&#xff09; 3--字母异位词分组&#xff08;49&#xff09; 4--最大子数组和&#xff08;53&#xff09; 5--跳跃游戏&#xff08;55&#xff09; 6--合并区间&#xff08;56&#xff09; 7--不同路…

初阶数据结构(五) 栈的介绍与实现

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn&#x1f493; ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的学习足迹&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 栈 栈的介绍栈的概念栈的结构 栈的实现…

数学系硕士研究生的科研过程——PDE约束下含参优化控制问题的深度学习算法

笔者今天上午收到了之前北大课题组老板的通知&#xff0c;得知研究生期间和学长合作的论文终于被siam接收&#xff0c;终于为自己研究生涯画上了一个句号。这里打算分享一下个人的科研过程以及这篇论文的工作&#xff0c;即将读研或者打算读研的同学或许可以从中获得益处。论文…