测试时,可快速调用 Mapper 的 Mapper Generator

news2024/11/23 13:03:13

项目 Gitee 地址:MapperGenerator (当前使用的是 JDK17,JDK8 的需改下 pom.xml 文件)

解决的问题:SpringBootTest 启动太慢

使用方式

假设有这样一个数据库,名为 a

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for a
-- ----------------------------
DROP TABLE IF EXISTS `a`;
CREATE TABLE `a`  (
  `a` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `b` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `c` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of a
-- ----------------------------
INSERT INTO `a` VALUES ('1', '1', '2');
INSERT INTO `a` VALUES ('2', '1', '2');
INSERT INTO `a` VALUES ('3', '1', '3');
INSERT INTO `a` VALUES ('4', '1', '3');
INSERT INTO `a` VALUES ('5', '1', '4');
INSERT INTO `a` VALUES ('6', '1', '5');

SET FOREIGN_KEY_CHECKS = 1;

使用如下
在这里插入图片描述

 @Test
 public void test_mapper_find_all() {
     // 获取 Mapper
     AMapper mapper = MapperGenerator.getMapper(AMapper.class);
     // 执行内容
     List<A> all = mapper.findAll();
     // 输出结果
     all.forEach(System.out::println);
 }

项目结构如下,使用前,需修改 GeneratorConstants 下的配置信息
在这里插入图片描述

实现原理

实现原理大致如下:不使用 XML 构建 SqlSessionFactory

Configuration configuration = new Configuration(EnvironmentFactory.createEnvironment())

new SqlSessionFactoryBuilder().build(configuration);

一句话:手动配置 configuration

为 configuration 手动添加 mapper 及对应 xml

添加过程:

读取 xml 文件
xml 文件中有对应如 <mapper namespace="com.zhang.a.mapper.AMapper"> 这样的标签,你可以通过如下的方式获取到对应 mapper interface

 XPathParser parser = new XPathParser(inputStream, true, configuration.getVariables(), new XMLMapperEntityResolver());
 String namespace = parser.evalNode("/mapper").getStringAttribute("namespace");

这样,xml 文件有了,对应的 mapper interface 也有了,就可以将它们 add 到 configuration 中了

// 1)加载 mapper interface
configuration.addMapper(aClass);

// 2)加载 xml 文件,参考 mybatis 源码:XMLConfigBuilder # mapperElement(XNode parent)
try (InputStream inputStream = Resources.getUrlAsStream(path)) {
    XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, path, configuration.getSqlFragments());
    mapperParser.parse();
} catch (IOException e) {
    throw new RuntimeException(e);
}

具体感兴趣的可以看看整个项目的代码

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

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

相关文章

推荐 3 个令你惊艳的 GitHub 项目

昨日 GitHub Trending 上榜的开源项目&#xff0c;基于 AI 技术提高你的生产力。借助 AI 你能搭建自己的数字人、搭建自己的法律助手、文档分析助手。 本期推荐开源项目目录&#xff1a; 1. 数字人开源项目 2. AI 法律助手 3. 为 PDF 文档打招一个聊天机器人 01 数字人开源项目…

作业区域工服穿戴识别算法 yolov7

作业区域工服穿戴识别系统基于yolov7视频智能图像识别技术&#xff0c;作业区域工服穿戴识别算法模型利用深度学习技术&#xff0c;不需人为干预自动识别现场施工作业人员未按要求穿工作服行为&#xff0c;代替后台工作人员执勤时的人眼判断。YOLOv7 研究团队提出了基于 ELAN 的…

win10 全屏秒退

问题 程序比较老&#xff0c;而电脑配置很新窗口化无任何问题&#xff0c;但是一旦全屏就退出 解决方案 猜测可能是兼容性的问题。 定位发现&#xff1a;禁用全屏优化。 方式如下&#xff1a;右键配置。选择兼容性。 选择禁用全屏优化。以兼容性运行这个程序。

什么是图数据库Neo4j

什么是图数据库Neo4j 所谓的图数据库一般由节点和关系构成&#xff0c;neo4j是其中的一种 在寻求数据的关联性中优于传统数据库mysql 且neo4j支持上亿级别的节点和关系 传统图运算一般在内存中进行&#xff0c;无法处理整个知识图谱&#xff0c;neo4j可以在磁盘中完成图运算…

【官网解读】主页解读

1.简况 Quick Prototyping&#xff08;快速原型设计&#xff09; Build machine learning solutions on raw data&#xff08;原始数据&#xff09; in a few lines of code. State-of-the-art Techniques&#xff08;最先进的技术&#xff09; Automatically utilize SOTA…

如何进行物联网渗透测试?

渗透测试揭示了未知的安全漏洞&#xff0c;因为值得信赖的专业人员模拟威胁性攻击。他们深入挖掘固件和硬件&#xff0c;以查找漏洞和可访问性疏忽。 物联网(IoT)连接设备是严重且可预防的安全漏洞的意外来源&#xff0c;现在是时候像其他硬件一样对其进行渗透测试处理了。为什…

疑难问题定位案例复盘(二)

今天我们继续分析一个因野指针访问导致的内存异常、出现coredump问题。在上一篇案例中&#xff0c;我们分享了一个在内存被释放后&#xff0c;业务模块仍然在使用导致业务模块自身出现coredump的现象。其实&#xff0c;在使用野指针访问内存时还有一种可能&#xff0c;就是业务…

存储资源调优技术——SmartVirtualization异构虚拟化技术

目录 基本概念 相关专业术语 eDevLUN与外部LUN的关系 对异构存储系统接管的方式 基本概念 异构虚拟化技术&#xff0c;仅对块业务生效 当本端存储系统与异构存储系统相互连接后&#xff1b;本端存储系统能够将异构存储系统提供的存储资源当作本地存储资源进行使用并对其进行集中…

模型参数量(Parameters)和计算量(FLOPs)获取【使用thop】

Tips: 针对部分开源代码没有提供相关计算网络参数量和计算量的代码。这里给出一个通用的获取网络的参数量和计算量的方法。 使用thop即可快速获取 1 模型参数量和计算量 参数量#params 即为网络模型中含有多少个参数&#xff0c;与输入的数据无关&#xff0c;主要与模型的结构…

在 windows 端使用 vscode + ubuntu WSL 优雅的使用原生 linux 的 gcc/g++ 编译

当我在windows上进行c的开发时&#xff0c;通常会使用 vs 但缺点也比较明显&#xff0c;他不原生的 gcc 编译器&#xff0c;其次 vs 这个 IDE 太过于庞大&#xff0c;当然也有很多人会使用 vscode 但是&#xff0c;在 windows 中安装 gcc/g 的过程极为复杂&#xff0c;且因为我…

【C++】右值引用完美转发

文章目录 右值引用和左值引用左值和右值概念左值引用 && 右值引用右值引用使用场景和意义左值引用的使用场景**左值引用的短板:**右值引用和移动语义STL容器增加的接口move函数右值引用的其他使用场景 完美转发万能引用完美转发保持值的属性完美转发的使用场景 右值引用…

Python基础合集 练习16(函数的递归)

简单的递归 1.求阶乘 比如输入为3 那么3216 输出就为6 def fun(n): if n1: return 1 return n*fun(n-1) numint(input(‘输入数字&#xff1a;’)) print(‘该数的阶乘为:’,fun(num)) 2.数列 这个数从第三项开始每一项为前一项的两倍 假如输入为6 则[1,1,2,3,5,8] 第六位为…

Python 时间处理模块

import time # 导入时间模块 s_time time.time() # 程序开始的时间 time.sleep(3) # 慢三秒 print(f’cost{time.time()-s_time}’) # 用当前时间减去之前程序开始的时间 print(time.localtime()) # 打印当前的时间 时间对象 print(time.gmtime()) # 打印当前时间&#xff0…

Python基础合集 练习18(类与对象2)

访问限制 class Dog_dog(): def init(self, name) -> None: self.__name name # 定义私有属性 def run(self):print(我跑的很快!我的名字是, self.__name)dog1 Dog_dog(‘papi’) dog1.run() print(dog1._Dog_dog__name) # 加入类名访问 print(’-----分界线-----’) p…

Mix.AI.How is your Chirper?

Chirper.ai是什么&#xff1f; 一个名为Chirper的AI驱动的社交网络平台。Chirper为AI用户建立了一个独立的环境&#xff0c;与传统的人类社交媒体平台有所区别。是一个独特的交互和协作空间&#xff0c;只有AI可以进行交流和互动。 shadow 看看我的AI化身每天都在干什么&#x…

Python---多线程编程、基于Socket完成服务端程序开发、基于Socket完成客户端程序开发

1. 进程&#xff1a; 程序在操作系统内运行&#xff0c;即成为一个运行进程 线程&#xff1a; 进程内部可以有多个线程&#xff0c;程序的运行本质上就是由进程内部的线程在实际工作的。 并行执行&#xff1a; 多个进程同时在运行&#xff0c;即不同的程序同时运行&#xff…

【Floyd】CF1204 Anna, Svyatoslav and Maps

看错题意了一直看不懂题解浪费了好多时间... 思路&#xff1a; 先去考虑特殊的地方&#xff1a; 100 子序列 最短路径 一个个剖析&#xff1a; 100&#xff1a;考虑Floyd 子序列&#xff1a;DP?不懂 最短路径&#xff1a;考虑Floyd 我们要求的是子序列的方案&#xff0…

【MySQL 8.0】搭建一个使用 SSL 加密的 MySQL 主从复制拓扑(基于 Binlog 行复制)

文章目录 先决条件搭建配置源、副本服务器选项文件 验证启用了 SSL 连接创建复制用户获取复制源服务器的二进制日志坐标配置复制源开启复制 验证进阶 之前&#xff0c;我们一起搭建了一个极简 MySQL 主从复制拓扑&#xff08;基于 Binlog 行复制&#xff09;&#xff0c;这是一…

请问这个网址怎么用httpx 把json数据取出来

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 空山新雨后&#xff0c;天气晚来秋。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python铂金群【gyx】问了一个Python网络爬虫处理的问题&#xf…

【JavaEE】认识线程

目录 1、什么是线程 2、为什么引入线程 2.1、线程的优缺点 3、CPU的工作原理 4、线程和进程的关系 4.1、线程和进程的入口函数 4.2、线程独享的资源 1、什么是线程 一个进程中可以有一个或者多个线程&#xff0c;每个线程都是一个独立的执行流。多个线程之间&#xff0c;也…