JPA映射关系

JPA(二):JPA 实体映射关系 映射关系思维导图 清晰思维导图分享地址为:JPA思维导图 1.单向一对一映射 一个实体A与另一个实体B之间存在关系,通过A可以获得B,通过B不能获得A。 1.1.数据库 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `... 阅读详情

单向多对一

场景

一个顾客N个订单,一个订单属于1个顾客。

// Order.class
@JoinColumn(name="buyer_id")// 映射外键列名
// 及时查询(默认):fetch=FetchType.EAGER、懒加载:fetch=FetchType.LAZY
@ManyToOne // 映射单向多对一。
publice Buyer getBuyer(){
	return buyer;
}

测试

保存
	@Test
	public void persist() {
		Buyer buyer = new Buyer();
		// ...添加属性

		Order o1 = new Oreder();
		// ...添加属性
		Order o1 = new Oreder();
		// ...添加属性

		buyer.getOrders().add(o1);
		buyer.getOrders().add(o2);

		/**
		 insert into buyer ...
		 insert into order ..
		 insert into order ..
		 update order set buyer_id ..
		 update order set buyer_id ..
		 */
		entityManager.persist(buyer);
		entityManager.persist(o1);
		entityManager.persist(o2);

		/**
		 insert into buyer ...
		 insert into order ..
		 insert into order ..
		 update order set buyer_id ..
		 update order set buyer_id ..
		 */
		entityManager.persist(o1);
		entityManager.persist(o2);
		entityManager.persist(buyer);
	}
  • 小结
    (先1后N)单向多对一时,优先保存1的一端,后保存N的一端, 效率更高
查询
/**
select xxx from order left join buyer on ..
where order.id = ?
*/
@Test
public void find(){
	Order o1 = entityManager.find(Order.class, {主键值});
	System.out.println(o1.getXx());

	System.out.println(o1.getBuyer().getXxx());
}
  • 小结
  1. 默认使用及时查询,默认会使用左外连接查询出1的一端。
  2. 采用懒加载,会先查询出N端,再查询出1的一端。
删除
// 删除多的一端
@Test
public void removeN(){
	Order o1 = entityManager.find(Order.class, {主键});
	entityManager.remove(o1);
}
// 删除有映射关系的1的一端
@Test
public void remove1(){
	Buyer buyer = entityManager.find(Buyer.class, {主键});
	entityManager.remove(buyer);
}
  • 小结
  1. 删除N端时,能正常删除。
  2. 删除1的一端时,不能直接删除。因为有外键关联。
更新
public void update(){
	Order o1 = entityManager.find(Order.class, {主键});
	// 完成更新
	o1.getBuyer().setXxx(xx);
}

  • 小结
    更改持久化对象(entityManager查询出来的对象),会同步更新到数据库

结论

  • 保存时,单向多对一时,优先保存1的一端,后保存N的一端。
  • 查询N端时,默认会使用左外连接查询出1的一端,即默认使用的及时查询策略。
  • 不能直接删除1的一端,因为有外键关联。
  • 更改持久化对象,会同步更新到数据库。

单向一对多

// Buyer.class
Set<Order> orders = new HashSet();

@JoinColumn(name="buyer_id")// 映射外键列名
/** 及时查询(默认):fetch=FetchType.EAGER、懒加载:fetch=FetchType.LAZY
级联删除属性:级联删除:cascad={CascadeType.REMOVE}
*/
@OneToMany // 映射单向一对多。
publice Set<Order> getOrders(){
	return orders;
}

测试

保存
@Test
public void persist(){
		Buyer buyer = new Buyer();
		// ...添加属性

		Order o1 = new Oreder();
		// ...添加属性
		Order o1 = new Oreder();
		// ...添加属性

		buyer.getOrders().add(o1);
		buyer.getOrders().add(o2);

		/**
		 insert into buyer ...
		 insert into order ..
		 insert into order ..
		 update order set buyer_id ..
		 update order set buyer_id ..
		 */
		entityManager.persist(buyer);
		entityManager.persist(o1);
		entityManager.persist(o2);

		/**
		 insert into buyer ...
		 insert into order ..
		 insert into order ..
		 update order set buyer_id ..
		 update order set buyer_id ..
		 */
		entityManager.persist(o1);
		entityManager.persist(o2);
		entityManager.persist(buyer);
	}
  • 小结
    先保存1端还是N端,都会执行update语句,因为关联关系是1的一端在维护。
查询
@Test
public void find(){
	Buyer buyer = entityManager.find(Buyer.class, {主键});

// 默认懒加载策略,两条select语句	System.out.println(buyer.getXx());
System.out.println(buyer.getOrders().size());

// 及时查询策略时,select .. from buyer left outer join oreder on ..
}
  • 小结
  1. 默认对关联的N端使用懒加载策略。
  2. 如果采用及时查询策略,会执行左外连接查询语句。
删除
@Test
public void remove(){
	Buyer buyer = entityManager.find(Buyer.class,{主键});
	
	// 能直接删除1的一端。先执行order表中对应值外键置空,再删除buyer中数据。
	entity.Manager.remove(buyer);
}
  • 小结
  1. 默认不执行级联删除,若删除1的一端,会先将关联的外键置空,在删除1的一端。
更新
  1. 可以修改@OneToMany的cascad属性为{CascadeType.REMOVE},实现级联删除。
@Test
public void update(){
	Buyer buyer = entityManager.find(Buyer.class,{主键});

	buyer.getOrders().iterator().next().setOrderName("xx");
}

结论

  1. 单向1对N时,关联关系执行保存时,一定会多执行update语句,因为关联关系是1的一端在维护,N端在插入时不会插入外键列。
  2. 查询时,默认对关联的N端使用懒加载策略。如果采用及时查询策略,会执行左外连接查询语句。
  3. 删除时,默认不是级联删除,若删除1的一端,会先将关联的外键置空,在删除1的一端。可以修改@OneToMany的cascad属性为{CascadeType.REMOVE},实现级联删除。

双向一对多

// Order.class
@JoinColumn(name="buyer_id")// 映射外键列名
// 及时查询(默认):fetch=FetchType.EAGER、懒加载:fetch=FetchType.LAZY
@ManyToOne // 映射单向多对一。
publice Buyer getBuyer(){
	return buyer;
}

// Buyer.class
Set<Order> orders = new HashSet();

// @JoinColumn(name="buyer_id")// 映射外键列名
/** 及时查询(默认):fetch=FetchType.EAGER、懒加载:fetch=FetchType.LAZY
级联删除属性:级联删除:cascad={CascadeType.REMOVE}
关联关系维护:mappedBy="buyer" 申明,由N端维护关联关系。此时不能定义@JoinColumn属性。
*/
@OneToMany(mappedBy="buyer") // 映射单向一对多。
publice Set<Order> getOrders(){
	return orders;
}

测试

保存
@Test
public void persist(){
	Buyer buyer = new Buyer();
	// ...添加属性

	Order o1 = new Oreder();
	// ...添加属性
	Order o1 = new Oreder();
	// ...添加属性

	// 建立关联关系
	buyer.getOrders().add(o1);
	buyer.getOrders().add(o2);

	o1.setBuyer(buyer);
	o2.setBuyer(buyer);

	/**
	// 先保存N的一端
	 insert into order .. # buyer_id为null
	 insert into order .. # buyer_id为null
	 insert into buyer ..
	 // 从order方维护一次关联关系
	 update order set order ..
	 update order set order ..
 	// 从buyer方维护一次关联关系
	 update order set order ..
	 update order set order ..
	 */
	entityManager.persist(o1);
	entityManager.persist(o2);
	entityManager.persist(buyer);

	/**
	// 先保存1的一端
	
	*/
	entityManager.persist(buyer);
	entityManager.persist(o1);
	entityManager.persist(o2);
	
	
	
}
  • 小结
  1. 双向1对N时,若先保存N端,默认会多出n条update语句。若先保存1的一端,会多出n条buyer维护的update
  2. 在进行双向 1对N关联关系时,建议使用N的一端进行关联关系的维护,1的一端不维护,这样会有效减少SQL语句。

结论

  • 在进行双向 1对N关联关系时,建议使用N的一端进行关联关系的维护,1的一端不维护,这样会有效减少SQL语句。可通过在1的一端@OneToManay的mappedBy="{N端中,1端的属性名}" 申明,由N端维护关联关系,此时@JoinColumn属性不能再1的一端使用。

双向一对一

一个经理只能管一个部门,一个部门只能被一个经理管。

// Manager.class
// 及时查询(默认):fetch=FetchType.EAGER、懒加载:fetch=FetchType.LAZY
@OneToOne(mappedBy="mgr") // 映射双向一对一。使用对方的哪个属性
publice Department getDept(){
	return dept;
}

// Department.class
@JoinColumn(name="mgr_id", unique=true)
@OneToOne
public Manager getMgr(){
	return mgr;
}

测试

保存
@Test
public void persist(){
	Manager mgr = new Manager();
	// 设置属性..
	
	Department dept = new Department();
	// 设置属性..

	mgr.setDept(dept);
	dept.setMgr(mgr);


	// 先保存不维护关联关系的一方。	entityManager.persist(mgr);
	entityManager.persist(dept);
}
  • 小结
    建议先保存不维护关联关系的一方,否则会多出update语句。
查询
@Test
public void find(){
	// 获取维护关联关系的一方
	Department dept = entityManager.find(Department.class,{主键});
	System.out.println(dept.getXx());
	System.out.println(dept.getMgr().getXx());

	// 获取不维护关联关系的一方
	Manager mgr = entityManager.find(Manager.class,{主键});
	System.out.println(mgr.getXx());
	
	// 此时不清楚当前mgr有关联关系的dept是否存在。所以,无论怎样都会执行sql语句去查询。	System.out.println(mgr.getDept().getXx());
}
  • 小结
  1. 默认(及时查询),获取维护关联关系的一方,会通过左外连接获取关联对象。可通过@OneToOne的fetch属性修改策略。
  2. 默认(及时查询),获取不维护关联关系的一方,会通过左外连接获取关联对象。且@OneToOne的fetch属性修改为LAZY后,反而还会多发一条SQL。

结论

  1. 需要确定哪一方维护关联关系。
  2. 双向1对1,@JoinColumn需要添加unique=true
  3. 无外键的一方,需要设置mappedBy="{对方维护映射关系的属性}"
  4. 双向1对1时,建议先保存无外键的一端,否则会多出update语句。
  5. 双向1对1时,先查询不维护关联关系的一端时,建议不修改不维护关联关系一端的@OneToOne的fetch属性为LAZY。

双向多对多

一个商品属于多个类别,一个类别有多个商品。

// Item.class
public Set<Category> categories = new HashSet();

@JoinTable(name="item_category",joinColumns={@JoinColumn(name="item_id", referencedColunmnName="{当前类的主键名称}")}, inverseJoinColumns={@JoinColumn(name="category_id", referencedColunmnName="{关联类的主键名称}")})// 映射表
// 及时查询(默认):fetch=FetchType.EAGER、懒加载:fetch=FetchType.LAZY
@ManyToMany // 映射双向多对多。
publice Set<Category> getCategories(){
	return categories;
}

// Category.class
public Set<Item> items = new HashSet();

// @ManyToMany(mappedBy="{维护关联关系类中的关联属性名}")
@ManyToMany(mappedBy="categories")
public Set<Item> getItems(){
	return items;
}

测试

保存
@Test
public void persist(){
	Item i1= new Item();
	Item i2= new Item();

	Category c1 = new Category();
	Category c2 = new Category();

	i1.getCategories().add(c1);
	i1.getCategories().add(c2);
	i2.getCategories().add(c1);
	i2.getCategories().add(c2);

	c1.getItems().add(i1);
	c1.getItems().add(i2);
	c2.getItems().add(i1);
	c2.getItems().add(i2);

	entityManager.persist(i1);
	entityManager.persist(i2);
	entityManager.persist(c1);
	entityManager.persist(c2);
}
查询
@Test
public void find(){
	// 获取维护关联关系的一方
	Item item = entityManager.find(Item.class, {主键});
	System.out.println(item.getXx());
	System.out.println(item.getCategories().size());

	// 获取非维护关联关系的一方
	Category c1 = entiryManager.find(Category.class, {主键});
	
	System.out.println(c1.getXx());
	System.out.println(c1.getItems().size());
}

结论

获取维护关联关系的一方,还是获取非维护关联关系的一方,都默认使用懒加载策略,且使用左外连接进行查询。

【代码审计】RuoYi定时任务漏洞:从SQL注入到RCE的攻防演变 本文深入剖析了RuoYi框架定时任务模块从早期版本无校验到引入黑白名单机制,再到被组合利用实现RCE的完整漏洞演变过程。文章详细分析了SQL注入与定时任务功能结合导致的远程代码执行漏洞,并总结了代码审计与安全开发的核心要点,为开发者提供了重要的安全参考。 阅读详情

相关推荐

舵机PWM信号转互斥继电器开关信号

-----------------本文由“麦粒电子”撰写,并提供相应产品服务。---------------- 叙述 上次的PWM转继电器开关方案得到大家的不少好评(博客链接),但是发现有些玩家需要一路PWM同时去控制两路继电器开关通断,并且两者是互斥的,好去控制两种不同的负载。所以就继续升级了如下的模块。 正常的控制部件顺序这样:遥控器按钮拨动,遥控器接收机相应通道PWM值变化,PWM转开关模块检测PWM值发生变化从而驱动相应机械继电器触点吸合释放。本模块的两个继电器动作是互斥的,也就是不会同时吸合。

Mai_LiElectronic的博客 1627

一文搞定,详细说明JPA实体关系映射

文章目录前言一、多对多关系二、实体说明学生实体 Student课程实体 Course 前言 本文,暂时对多对多关系进行阐述,后续会对一对一,一对多进行补充 一、多对多关系 为了便于理解,此篇边用学生类Student与课程类Course来说明,一名学生可选择多种课程,一种课程也可被多名学生选择,适用 Many-To-Many 关系 二、实体说明 @ManyToMany 作用:用于映射多对多关系   属性:     cascade:配置级联操作。     fetch:配置是否采用延迟加载。     tar

pi_tiger的博客 1453

基于本地知识库的智能问答系统架构

智能问答系统的核心可以分为4部分。1)知识库构建。2)检索。3)后处理。4)推理。知识库构建:知识库中可以包含多个向量数据库和知识图谱等,核心是怎么建立索引,使得检索时能够将与问题相关的知识给检索出来。检索:从知识库中的多个库或者知识图谱中检索出与问题相关的信息。后处理:从知识库中检索出来的信息可能是冗余的,而且可能不符合我们希望的格式要求,因此,我们需要对这些数据进行过滤,格式化等操作。推理: 基于检索出来的知识进行推理,让输出能够回答用户的问题,目前主要使用大模型进行推理。

qq_44993593的博客 1709

JPA基本属性注解

JPA注解1、@Entitypackage javax.persistence;@Target(TYPE) @Retention(RUNTIME)public @interface Entity{    String name( ) default "";}name( )属性指定实体bean的名称,如果没有为该属性提供取值,默认值为 bean class 的非限

哇哈哈 3万+

libfacedetection 框架阅读及扩展经验

libfacedetection 框架源码解析与扩展心得1. libfacedetection 框架简介2. 源码解析2.1 facedetectcnn.h2.2 facedetectcnn.cpp2.3 facedetectcnn-model.cpp3. 其他层的扩展--depthwise convolution 前段时间因为工作需要,对libfacedetection框架做了些扩展,在阅读源...

weixin_42616332的博客 1500

AI开发助手介绍

AI开发助手介绍随着NLP方向发展越来越成熟,AI写代码领域出现了几个非常好的模型,今天笔者给大家推荐几个AI Coding 助手AI Coding助手是以IDEA插件或vim插件形式提供服务,在编辑器中写代码时,可以实时预测下一行要输入的代码,提升开发效率。Github Copilot首先要介绍的是Github Copilot,Copilot是个AI Coding助手,它从注释和代码中提取上下文,给出单行和整个函数的代码建议,Copilot由Open AI 的CodeX模型提供支持,它是一个由OpenAI

bobo_simpler的博客 5765

使用 JPA 进行对象关系映射-与数据库的轻松交互

通过 JPA,Java 开发者能够快速地实现对象与关系数据库之间的映射。通过定义实体类及其注解,开发者可以避免繁琐的 SQL 操作,实现数据的持久化处理。此外,JPA 提供了灵活的查询机制及关系映射能力,使得数据库操作更具可读性和扩展性。在现代 Java 项目中,JPA 是构建稳定持久层的优选方案。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 922

FDTD远场分析实战:从monitor数据到3D远场可视化的完整流程

本文详细介绍了FDTD远场分析的完整流程,从monitor采集的近场数据出发,通过近场-远场变换(NFFFT)生成3D远场可视化结果。文章重点解析了远场转换的物理原理、关键参数设置,并提供了构建稳健数据处理流水线及高级可视化(如3D辐射方向图)的实战脚本与技巧,适用于天线设计与光学器件分析。

weixin_29063035的博客 228

jpa中映射关系

1.单向一对多 单向一对多用得比较少(性能差),但是依然要求必须掌握,因为我们在使用双向一对多还会用到单向一对多的相应配置。 映射关系 @Entity public class Product { @Id @GeneratedValue private Long id; private String name; @Entity public class ProductDir ...

weixin_45415977的博客 639

STM32开发 -- GPS模块开发详解

一、了解硬件 我使用的GPS模块型号为UBX-M8030 参看:UBX-M8030 系列 查看一下它的特性: 多用途 GNSS 芯片,提供三种产品等级 最多可并发接收 3 个 GNSS(GPS、伽利略、GLONASS、北斗) 行业领先的 -167 dBm 导航灵敏度 业界最低电流消耗 在城市峡谷中具有绝佳的定位精度 安全性和完整性保护 支持所有的卫星增强系统 车载级芯片的工作...

不积跬步,无以至千里 3万+

SKUA-GOCAD入门教程-第二节

软件启动及项目设置

江洋大葱的博客 1146

JPA学习(五) 五种 映射关系

一、JPA_映射单向多对一的关联关系 1、创建实体类 //订单 @Table(name="JPA_ORDER") @Entity public class Order { private Integer id; private String orderName; private Customer customer; @Id @GeneratedValue public ...

殇莫忆的博客 1072

基于YOLOv8的人群聚集检测系统:含UI界面设计与数据集应用

人群聚集检测是智慧城市、公共安全和疫情防控等领域的重要任务。本文结合YOLOv8最新目标检测技术,设计并实现了一个高效的人群聚集检测系统,支持可视化UI界面操作,方便用户实时检测和分析视频中的人群密度。本文详细介绍了系统设计思路、使用的数据集、YOLOv8模型训练和推理过程,以及UI界面的开发与整合。最后通过实验验证了该系统的实用性和性能表现。更灵活的模型架构强化的特征融合网络(PAN++)自动混合精度训练支持支持多任务学习(目标检测+分类+分割)预训练模型丰富,适应多种应用场景。

YOLO 432

JPA的七种映射关系

JPA的七种映射关系<br />在实体BEAN中,互相之间的关系有七种,分别是如下七种 <br />1,一对一单向 <br />2,一对一双向 <br />3,一对多单向 <br />4,一对多双向 <br />5,多对一单向 <br />6,多对多单向 <br />7,多对多双向<br /> <br />大家可能发现,为什么没有多对一双向呢?其实多对一的双向,就是一对多的双向,道理是一样的.<br />1.一对一单向<br />之间的关系的客户和一个地址。您清楚地希望能够寻找客户的地址,但你可能不关心寻找

carus的专栏 1050

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JPA注解和表映射关系

JPA注解和表映射关系 一、注解 (1)@Entity、@Table并列使用 @Entity 标注用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的数据库表 @Table 映射数据表的表名,常用选项是 name,用于指明数据库的表名 (2)@Id和、@Basic、@Column可置于属性之上,也可置于属性的getter方法之上 @Id 映射主键(配合@GeneratedValue使...

Breeze_u的博客 1319

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JAVA学习笔记:JPA映射关系

1. 单向多对一 映射配置: // 多对一,懒加载 @ManyToOne(fetch = FetchType.LAZY) // 多方的外键id @JoinColumn(name = “xxx_id”) 注意:一方不要实例化 保存时,先保存一方,再保存多方 2. 单向一对多 映射配置: // 一对多,默认懒加载,最好是写出来 @OneToMany(fetch = FetchType.LAZY) //...

Java_gleaner的博客 416

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JPA ---- 表之间的映射关系

一、单向多对一关系: @Entity @Table(name="jpa_order") public class Order { private Integer id; private String orderName; private Customer customer; @Generate...

weixin_30276935的博客 190

JPA的映射关系

##JPA映射关系 ###单向一对一 onetoone;双向两边都写(用的很少),在实际中一般一对一直接写在一个表里面,所以了解这个就可以了。 ###单向一对多 onetomany;(几乎不用但是依然要求必须掌握,因为我们在使用双向一对多还会用到单向一对多的相应配置。),使用list或者set集合,并且会创建第三方中间表,对其进行一定优化(必须配置外键id,否则会多生成一张表,形成多对多的关系@J...

weixin_45739442的博客 202

jpa 映射关系

ex:【产品类Product--多方 ,产品分类ProductDir--一方】 单向一对多:给一方加上@OneToMany ex:【产品类Product--多方 ,产品分类ProductDir--一方】 双向多对一、一对多: 给多方加上@ManyToOne,给一方加上@OneToMany ex:【部门类Department--一方 ,员工类Employee--多方...

qq_41764878的博客 451

Jpa映射关系

1.单向一对多 单向一对多用得比较少(性能差), @OneToMany 必须配置外键id,否则会多生成一张表,形成多对多的关系 ,保存代码: import cn.itsource.jpa.manytoone1.Product; import cn.itsource.jpa.manytoone1.ProductDir; import cn.itsource.util.JpaUtils; impor...

qq_43853427的博客 264

JPA - 逆向生成数据表与映射关系配置

目录环境JPA逆向生成数据表映射关系配置单向一对多关系双向一对多关系单向多对多关系双向多对多关系 环境 SpringBoot + JPA + Mysql JPA逆向生成数据表 pom.xml <!-- jpa --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artif

Maggieq8324的博客 2127

JPA 映射关系

1.单向一对多配置 // 一次性保存一方,同时保存2个多方 @Before public void persist() throws Exception { // 一方 ProductDir dir = new ProductDir(); dir.setName("类型1"); // 多方 Product product = new Product(); product....

primarykey123的博客 273

JPA教程:JPA概述、JPA实体生命周期、JPA实体映射关系、JPA查询语言

JPA教程:JPA概述、JPA实体生命周期、JPA实体映射关系、JPA查询语言

Java仗剑走天涯 3199

JPA映射关系_day03

文章目录1 单向一对多1.1 映射关系1.2 延迟加载1.3 判断集合是否有值2 集合映射2.1 集合映射的JAVA类型2.2 怎么选择集合映射?2.3 set映射2.4 list映射2.5 小结 1 单向一对多 单向一对多用得比较少(性能差),但是依然要求必须掌握,因为我们在使用双向一对多还会用到单向一对多的相应配置 1.1 映射关系 //产品分类 @Entity @Table(name = "...

Java_pipixia的博客 208
上一篇: 正则表达式
下一篇: Java发送Https请求(跳过证书验证)-新版
松林羊
博客等级 码龄11年 43粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值