当前位置: 首页 > news >正文

MyBatis实现多表映射、分页显示、逆向工程

目录

一、MyBatis实现多表映射

1.1 实体类设计

1.2 一对一关系实现案例

1.3 对多配置实现案例

1.4 设置自动映射与n张表关联映射

二、MyBatis实现分页功能

2.1 mybatis插件工作原理       

2.2 引入插件与插件的使用

三、逆向工程插件

3.1 什么是逆向工程

3.2 MyBatisX插件导入与使用


一、MyBatis实现多表映射

1.1 实体类设计

设计实体类首先需要知道实体类之间的关系,实体类一般关系如下:

一对一:夫妻之间的关系

一对多|多对一:教师与学生之间的关系

多对多:教师与学生之间的关系

一对一案例(订单与用户):

public class Customer {private Integer customerId;private String customerName;}public class Order {private Integer orderId;private String orderName;private Customer customer;// 体现的是对一的关系}  

一对多案例(用户与订单):

public class Customer {private Integer customerId;private String customerName;private List<Order> orderList;// 体现的是对多的关系
}
public class Order {private Integer orderId;private String orderName;private Customer customer;// 体现的是对一的关系}
//查询客户和客户对应的订单集合  不要管!

多表结果实体类设计小技巧: 

对一,属性中包含对方对象

对多,属性中包含对方对象集合

只有真实发生多表查询时,才需要设计和修改实体类,否则不提前设计和修改实体类!

无论多少张表联查,实体类设计都是两两考虑!

在查询映射的时候,只需要关注本次查询相关的属性!例如:查询订单和对应的客户,就不要关注客户中的订单集合!


1.2 一对一关系实现案例

使用上述关系,用户与订单关系

在数据库中创建两张表代码如下:

CREATE TABLE `t_customer` (`customer_id` INT NOT NULL AUTO_INCREMENT, `customer_name` CHAR(100), PRIMARY KEY (`customer_id`) );CREATE TABLE `t_order` ( `order_id` INT NOT NULL AUTO_INCREMENT, `order_name` CHAR(100), `customer_id` INT, PRIMARY KEY (`order_id`) ); INSERT INTO `t_customer` (`customer_name`) VALUES ('c01');INSERT INTO `t_order` (`order_name`, `customer_id`) VALUES ('o1', '1');
INSERT INTO `t_order` (`order_name`, `customer_id`) VALUES ('o2', '1');
INSERT INTO `t_order` (`order_name`, `customer_id`) VALUES ('o3', '1'); 

注意:
实际开发时,一般在开发过程中,不给数据库表设置外键约束。 原因是避免调试不方便。 一般是功能开发完成,再加外键约束检查是否有bug。

实体类中创造上述两个对应的类与接口。

接口如下:

public interface OrderMapper {
//    根据id查询订单与用户的信息public Order selectOrderWithCustomer(Integer orderId);
}

 而实现这个功能的sql语句如下:

select * from t_customer c join t_order oon c.customer_id = o.customer_idwhere order_id = 1
# 其中order_id结果为方法中查询的参数id

可以看到结果如下:

下一步需要实现结果集对应,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--此处的namespace修改为对应的接口全类名-->
<mapper namespace="com.alphamilk.mapper.OrderMapper">
<!--     接口中业务方法public Order selectOrderWithCustomer(Integer orderId);--><resultMap id="orderInfoById" type="com.alphamilk.pojo.Order">
<!--        设置主键--><id column="order_id" property="orderId"/>
<!--        设置一般属性与列表对应--><result column="order_name" property="orderName"/><result column="customer_id" property="customerId"/>
<!--        通过association标签进行关联其中property填入对象属性名javaType填入对象类型
--><association property="customer" javaType="com.alphamilk.pojo.Customer">
<!--            customer的主键--><id column="customer_id" property="customerId"/><result column="customer_name" property="customerName"/></association></resultMap><select id="selectOrderWithCustomer" resultMap="orderInfoById">
#         填入对应sql语句select * from t_customer c join t_order oon c.customer_id = o.customer_idwhere order_id = #{id}</select>
</mapper>

列表结果与实体集之间的对应如下:

注意:做完这些后需要在mybatis配置中将对应的mapper文件导入其中

<mappers>
<!--        此处的mapper标签使用配置里的UnderGraduate.xml的路径-->
<!--        <mapper resource="mappers/UnderGraduateMapper.xml"/>--><mapper resource="mappers/OrderMapper.xml"/></mappers>

进行测试:

public class CRUDTEST {private SqlSession session;@BeforeEachpublic void init() throws IOException {session = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")).openSession();}@Testpublic void Test() throws IOException {OrderMapper mapper = session.getMapper(OrderMapper.class);Order order = mapper.selectOrderWithCustomer(1);System.out.println("订单id:"+order.getOrderId());System.out.println("订单名称:"+order.getOrderName());System.out.println("订单对应客户id"+order.getCustomerId());System.out.println("订单对应客户名称"+order.getCustomer().getCustomerName());}@AfterEachpublic void clear(){session.commit();session.close();}
}

总结(关键字):

关键词

在“对一”关联关系中,我们的配置比较多,但是关键词就只有:association和**javaType


1.3 对多配置实现案例

在案例中,客户与订单之间的关系是对多的,即一个客户有多个订单信息。现在业务需求是通过客户id查询所有客户信息与订单信息。

客户实体类设计

@Data
public class Customer {private Integer customerId;private String customerName;//  对多关系,只需要创建对应的链表即可,泛型使用对应类private List<Order> orderList;}

 业务方法对应的sql语言

select * from  t_customer c join  t_order owhere  c.customer_id = 1;

业务对应的接口

public interface CustomerMapper {
//业务:根据客户id查询其订单public List<Customer> CUSTOMERAndOrder(Integer id);
}

接口对应的映射实现

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--此处的namespace修改为对应的接口全类名-->
<mapper namespace="com.alphamilk.mapper.CustomerMapper"><!--    自定义结果集-->
<resultMap id="customerAndOrder" type="com.alphamilk.pojo.Customer"><id column="customer_id" property="customerId"/><result column="customer_name" property="customerName"/><!--    通过collection实现集合赋值--><collection property="orderList" ofType="com.alphamilk.pojo.Order"><id column="order_id" property="orderId"/><result column="order_name" property="orderName"/><result column="customer_id" property="customerId"/>
<!--        注意:里面的customer不需要赋值--></collection>
</resultMap><!--     public Customer CUSTOMERAndOrder(Integer id);--><select id="CUSTOMERAndOrder" resultMap="customerAndOrder">select * from  studb.t_customer c join  studb.t_order owhere  c.customer_id = #{id};</select>
</mapper>

功能测试:

@Testpublic void Test() throws IOException {CustomerMapper mapper = session.getMapper(CustomerMapper.class);List<Customer> customers = mapper.CUSTOMERAndOrder(1);for (Customer customer :customers){List<Order> orderList = customer.getOrderList();System.out.println("用户"+customer.getCustomerName()+"订单信息如下");for (Order order : orderList){System.out.println(order);}}}


1.4 设置自动映射与n张表关联映射

 在经过sql语句结果集的对应过程中可以发现,结果集的对应是一个十分重复且繁琐的工作(表单的属性十分多的情况下),那么有没有能够解放双手简化代码的方法呢?答案是肯定的。

在Mybatis-config设置中进行设置

    <settings>
<!--        设置自动映射,有没有嵌套都会自动帮我们进行映射result标签的属性与列--><setting name="autoMappingBehavior" value="FULL"/></settings>

 下面介绍如何使用与注意事项

在设置好自动映射后,只需要设置好对应的主键即可正常运行。

上面两个案例,在开启自动映射后代码如下

对一映射关键代码如下:

<!--    自定义结果集-->
<!--     接口中业务方法public Order selectOrderWithCustomer(Integer orderId);--><resultMap id="orderInfoById" type="com.alphamilk.pojo.Order">
<!--        设置order主键--><id column="order_id" property="orderId"/><association property="customer" javaType="com.alphamilk.pojo.Customer">
<!--            设置customer的主键--><id column="customer_id" property="customerId"/></association></resultMap>

 注意:
直接使用自动映射有一个前提要求,那就是需要类中的属性名要与列表中的列名称一一对应才行。否则无法自动映射成功。如果在设计实体类和数据库名称不对应的情况下,可以通过起别名的方式进行自动映射。

数据库列名与类属性名不一致情况下的结果:


二、MyBatis实现分页功能

2.1 mybatis插件工作原理       

问题引出:

        由于前端页面的限制,如果返回的数据量十分庞大,前端可能无法进行数据有效展示,这时候就需要用到分页功能。

想要实现分页功能需要 了解mybatis与插件的工作机制。

程序员在写完sql语句后交给mybatis处理sql语句。而mybatis处理过程中可以引入插件,插件的作用就是可以在写过的sql语句上进行一些特殊的修改。分页插件就是对原本的sql语句进行修改。

想要实现sql语句实现分页功能,只需要使用关键字limit x , y( 其中x为偏移量,y为查询数量)如下案例:

SELECT * FROM your_table
LIMIT 20, 10

其中:x , y遵循以下等式(page 为页数,pageSize为页容量)

x = (page-1)*pageSize

y = pageSize

 所以引入的插件,就是动态得帮助我们输入的sql语句上加上limit 对应的x , y.

但是请注意:

1.不需要自行添加limit结尾。

2.写的sql语句代码不能用“ ;” 结尾,因为插件会在分号后面加上limit关键字导致sql报错


2.2 引入插件与插件的使用

这里使用插件名称为pageHelper。

1.首先需要导入对应的依赖,依赖如下:

<!--        实现mybatis分页插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.11</version></dependency>

 2.在Mybatis-config.xml里面进行配置插件

  <plugins><plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--                                               声明拦截的语言是mysql--><property name="helperDialect" value="mysql"/></plugin></plugins>

 3.插件使用

业务接口与实现的映射都按照原来即可,有区别的在于测试时候,如下案例代码

查询所有大学生信息:

//     TODO:注意使用分页插件的sql语句不能以 分号(;)结尾!!!
//    查询所有数据@Select("select * from undergraduate.undergraduate")public List<UnderGraduate> selectAll();

使用插件测试代码:

    @Testpublic void Test4() {UnderGraduateMapper mapper = session.getMapper(UnderGraduateMapper.class);//        TODO:注意,如果想要进行两条查询语句进行分页,那么不能放在同一个分页区。需要重新启动!// 开启分页插件,第一次查询总条数PageHelper.startPage(1, Integer.MAX_VALUE);List<UnderGraduate> totalList = mapper.selectAll();PageInfo<UnderGraduate> totalPageInfo = new PageInfo<>(totalList);// 第二次查询,获取想要的分页信息,一般由前端提供,这里参数表明当前第1页,一页容量为2个大学生成员PageHelper.startPage(1, 2);List<UnderGraduate> list = mapper.selectAll();PageInfo<UnderGraduate> pageInfo = new PageInfo<>(list);// 输出信息System.out.println("list = " + list);System.out.println("total = " + totalPageInfo.getTotal());System.out.println("pages = " + pageInfo.getPages());System.out.println("hasNextPage = " + pageInfo.isHasNextPage());System.out.println("hasPreviousPage = " + pageInfo.isHasPreviousPage());}

注意:

需要在查询语句开始之前就开启pageHelper插件进行拦截即这段代码

PageHelper.startPage(1, Integer.MAX_VALUE);


三、逆向工程插件

3.1 什么是逆向工程

        所谓逆向工程,举一个通俗的例子,根据一个人的影子来画出一个人大致的轮廓。这就是所谓的逆向。在Java工程中,由于数据库每一张表都要对于一个Java的实体类。而构造实体类又需要花费大量的时间,所以就有了逆向工程,根据一个数据库的表,反向创建对应的实体表。

        在MyBatis中有一些插件就是实现数据库表单逆向创建实体类的功能,比如MyBatisX插件。在介绍MyBatisX插件的使用前,先介绍MyBatisX插件的工作原理。

  1. 数据库反向生成 XML 配置文件

MyBatisX 会通过 JDBC 连接到数据库,然后自动读取数据库中的表、字段、约束等信息,并按照指定的模板格式生成对应的XML配置文件。

  1. 解析 XML 配置文件并生成 Java 类

MyBatisX 会读取之前生成的XML配置文件,解析其中的信息,并使用 Velocity 等相关技术将其转换成Java类、Mapper接口、XML映射文件等相关代码。

  1. 将生成的代码写入磁盘并导入到项目中

MyBatisX 会将生成的 Java 代码、XML映射文件等写入到指定目录下,同时更新项目的配置文件,以便自动扫描并引入生成的代码。

总的来说,MyBatisX 的工作原理是利用反射机制和代码模板生成技术,通过数据库和 XML 配置文件的交互,实现自动生成 MyBatis 相关的映射文件、POJO 类等代码的功能。这样,可以避免手动编写繁琐的代码,提高开发效率和代码质量。


3.2 MyBatisX插件导入与使用

1.找到设置

2.找到插件,输入MybatisX,安装即可

安装好了,那么如何使用呢?

1.首先需要idea连接上mysql数据源,在idea右侧数据库中进行连接,如果已经连接上数据库则可以跳过。

2.如果没有连接上数据库,则在栏中添加MySQL数据库

填写对应用户与密码后测试连接,若提示连接成功即可

3.连接好后选择对应架构之后,在架构对应的表下右键即可看到插件

 选择图中勾选选项,最后进行finish即可创建对应的实体类。


相关文章:

MyBatis实现多表映射、分页显示、逆向工程

目录 一、MyBatis实现多表映射 1.1 实体类设计 1.2 一对一关系实现案例 1.3 对多配置实现案例 1.4 设置自动映射与n张表关联映射 二、MyBatis实现分页功能 2.1 mybatis插件工作原理 2.2 引入插件与插件的使用 三、逆向工程插件 3.1 什么是逆向工程 3.2 MyBat…...

C++基础面试题

一、vector和list的区别 1.1 底层数据结构 vector 使用动态数组作为底层数据结构&#xff0c;元素在内存中是连续存储的&#xff1b; list 使用双向链表作为底层数据结构&#xff0c;元素在内存中通过节点相互连接。 1.2 插入和删除操作 vector 在尾部插入或删除元素效率高&…...

asp.net人事管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 人事管理信息系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net 人事管理系统1 应用技术…...

【Docker】Docker中 的AUFS、BTRFS、ZFS、存储池概念的详细讲解

前言 作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&…...

华为云运维小结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、pandas是什么&#xff1f; 一、pandas是什么&#xff1f; HCIP学习笔记-华为云运维方案-9&#xff1a;https://blog.csdn.net/GoNewWay/article/details/13152…...

Firefox 119 正式发布

Firefox 119 已正式发布。新版本除了修复 Bug 之外&#xff0c;还增强了 Firefox View 功能、支持在 PDF 文档中插入图片&#xff0c;以及引入 Encrypted Client Hello (ECH) 以增强隐私保护等。 主要变化 改进 Firefox View&#xff1a;用户可以在该页面查看所有窗口打开的标…...

apachesolr启动带调试

这里solr.cmd报错&#xff0c;报错原因是java版本问题&#xff0c;后面发现这是因为多个java版本导致读取java_home失败&#xff0c; 那么我们修改solr.cmd中的JAVA_HOME为SOLR_JAVA_HOME IF DEFINED SOLR_JAVA_HOME set "JAVA_HOME%SOLR_JAVA_HOME%"环境变量将SOLR…...

【MATLAB】基于灰狼优化算法优化BP神经网络 (GWO-BP)的数据回归预测

文章目录 效果一览文章概述订阅专栏只能获取一份代码部分源码参考资料效果一览 文章概述 【MATLAB】基于灰狼优化算法优化BP神经网络 (GWO-BP)的数据回归预测 在MATLAB中,基于灰狼优化算法优化BP神经网络(GWO-BP)进行数据回归预测的步骤如下: 数据准备:首先,将用于回归预…...

雨水收集设施模块把雨水收集起来,经简单处理用于消防洗车冲厕等

雨水收集设施模块是一种利用雨水资源的环保设施&#xff0c;它可以将雨水收集起来&#xff0c;经过简单的处理后&#xff0c;用于消防、洗车、冲厕等用途。 雨水收集设施模块通常由多个雨水收集器组成&#xff0c;每个收集器都有一个集水口和一个小型储水池。当雨水流入集水口…...

Mac机RVM安装,手动下载安装,经过验证可以正常使用

1、正常方法&#xff08;不容易成功&#xff09;&#xff0c;我自己就卡了两周&#xff08;因为墙的问题一直搞不定&#xff09; 中国境内访问 https://rvm.io 虽然可以访问&#xff0c;但是下载使用会被强&#xff0c;可能有一些翻越的方法&#xff0c;但是不容易搞 2、手…...

人工智能-深度学习之延后初始化

到目前为止&#xff0c;我们忽略了建立网络时需要做的以下这些事情&#xff1a; 我们定义了网络架构&#xff0c;但没有指定输入维度。 我们添加层时没有指定前一层的输出维度。 我们在初始化参数时&#xff0c;甚至没有足够的信息来确定模型应该包含多少参数。 有些读者可…...

Jupyter Notebook交互式开源笔记本工具

1、官网 http://jupyter.org/ 2、什么是Jupyter Notebook Jupyter Notebook一个交互式的开源笔记本工具&#xff0c;可以用于编写、运行、和共享代码、文本、图形等内容。 如下文本、代码、图形 支持多种编程语言&#xff0c;包括python、R和Julia等&#xff0c;可以走一个…...

基于晶体结构算法的无人机航迹规划-附代码

基于晶体结构算法的无人机航迹规划 文章目录 基于晶体结构算法的无人机航迹规划1.晶体结构搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用晶体结构算法来优化无人机航迹规划。 …...

刷题笔记day11-栈与队列2

20. 有效的括号 这个是典型的使用栈&#xff0c;来进行匹配。 因为栈是先进后出&#xff0c;所以&#xff0c;最近的左括号一定在栈顶。如果不是&#xff0c;则就是不匹配了。 func isValid(s string) bool {stack : Stack{}dict : map[byte]byte {): (,]: [,}: {,}for _, it…...

ngixn的指令

Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;它可以处理静态资源、动态内容、负载均衡、反向代理和HTTP缓存等任务。本文将详细介绍在CentOS上安装和配置Nginx服务器&#xff0c;并讲解Nginx常用指令。 安装Nginx 在CentOS上安装Nginx非常简单&#xff0c;只需要执行…...

管理类联考——数学——汇总篇——知识点突破——代数——函数、方程——记忆

文章目录 考点记忆/考点汇总——按大纲 整体局部 本篇思路&#xff1a;根据各方的资料&#xff0c;比如名师的资料&#xff0c;按大纲或者其他方式&#xff0c;收集/汇总考点&#xff0c;即需记忆点&#xff0c;在通过整体的记忆法&#xff0c;比如整体信息很多&#xff0c;通常…...

2014年亚太杯APMCM数学建模大赛C题公共基础课教师专业化培养方式研究求解全过程文档及程序

2014年亚太杯APMCM数学建模大赛 C题 公共基础课教师专业化培养方式研究 原题再现 近年来&#xff0c;世界基础工业、信息产业、服务业的跨越式发展引发了大量人才需求&#xff0c;导致了职业教育的飞速发展&#xff0c;除原有专科层次高等职业教育院校外&#xff0c;大量普通…...

【广州华锐互动】VR历史古城复原:沉浸式体验古代建筑,感受千年风华!

在科技日新月异的今天&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经成为了我们生活中不可或缺的一部分。从娱乐游戏到医疗健康&#xff0c;从教育培训到房地产销售&#xff0c;VR技术的应用领域日益广泛。而近年来&#xff0c;VR技术在文化遗产保护和古迹复原方面的…...

http和https分别是什么?

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTTPS&#xff08;HTTP Secure&#xff09;是互联网上应用最为广泛的两类协议&#xff0c;都是用于在网络中进行数据交换。 1.HTTP&#xff1a; HTTP是一种无状态的协议&#xff0c;即服务器并不保持与客户端的连接…...

C语言--一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高

一.思路分析 这是一个简单的物理题目&#xff0c;解题思路比较明确。程序使用 for 循环来模拟球的下落和反弹过程&#xff0c;通过多次计算得到最终结果&#xff0c;最后使用 printf 函数将结果输出。 定义初始高度 height 和总共经过的米数 distance 的变量&#xff0c;初始化…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...