Hibernate笔记(三) 表与表的关系分析、一对多、多对多、

hibernate一对多、多对一、多对多问题 最近在写一个博客项目,数据库表的建立要考虑多表的问题,记录下学习所得! CRUD create read update delete 实体类的设计: Article: articleId title content  createDate author(User类型 多对一关系维护端) category(Category类型 多对一关系维护端)                comment... 阅读详情

表的关系分析

Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数
据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置、数据的增加、
删除等。
数据库中多表之间存在着三种关系,也就是系统设计中的三种实体关系。如图所示。
在这里插入图片描述系统设计实体类的三种关系:一对多,多对多,一对一,在数据库中实体表之间的映射是通过外键来映射的

表与表之间的关系

【一对多】

建表原则,多的一边创建外键指向一的一方的主键
在这里插入图片描述

【多对多】

建表原则:创建一个中间表,中间表至少两个字段作为外键分别指向双方的主键
在这里插入图片描述

【一对一】

建表规则:
一种:唯一外键对应:假设- -对一种的任意一方为多, 在多的一方创建外键指向一的一.方的主键,
然后将外键设置为唯–。
二种:主键对应:一方的主键作为另- -方的主键。
在这里插入图片描述在这里插入图片描述

hibernate的一对多映射

以客户和联系人为例:客户是一,联系人是多

第一步 创建两个实体类,客户和联系人
在这里插入图片描述

第二步 让两个实体类之间互相表示
(1)在客户实体类里面表示多个联系人

  • 一个客户里面有多个联系人
    在这里插入图片描述

(2)在联系人实体类里面表示所属客户

  • 一个联系人只能属于一个客户
    在这里插入图片描述

第三步 配置映射关系
(1)一般一个实体类对应一个映射文件
(2)把映射最基本配置完成

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.zy.entity.LinkMan" table="t_linkman">
        <!-- 2 配置实体类id和表id对应
			hibernate要求实体类有一个属性唯一值
			hibernate要求表有字段作为唯一值
         -->
        <id name="lkm_id" column="lkm_id">
            <!-- 设置数据库表id增长策略
				native:生成表id值就是主键自动增长
			-->
            <generator class="native"></generator>
        </id>
        <!-- 配置其他属性和表字段对应
			name属性:实体类属性名称
			column属性:生成表字段名称
		-->
        <property name="lkm_name" column="lkm_name"></property>
        <property name="lkm_gender" column="lkm_gender"></property>
        <property name="lkm_phone" column="lmk_phone"></property>
    </class>
</hibernate-mapping>

(3)在映射文件中,配置一对多关系

  • 在客户映射文件中,表示所有联系人

在这里插入图片描述

  • 在联系人映射文件中,表示所属客户
    在这里插入图片描述

第四步 创建核心配置文件,把映射文件引入到核心配置文件中

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <!--配置数据库信息必须的-->
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_study</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">1234</property>

        <!--hibernate的配置信息-->
        <!--sql语句显示-->
        <property name="show_sql">true</property>
        <!--sql语句格式化-->
        <property name="format_sql">true</property>
        <!--hibernate帮忙创建表,update表示没有就创建,有就更新-->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!--数据的方言配置-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--        在hibernate核心配置文件中配置  与本地线程绑定session-->
        <property name="current_session_context_class">thread</property>
        <!--最后一步,把配置文件引入到这里-->
        <mapping resource="com/zy/entity/LinkMan.hbm.xml"></mapping>
        <mapping resource="com/zy/entity/Customer.hbm.xml"></mapping>


    </session-factory>

</hibernate-configuration>

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

一对多级联操作

级联操作

1 级联保存

(1)添加一个客户,为这个客户添加多个联系人

@Test
    public void testTogertherSave(){
        try{
            //与本地绑定的session
            sessionFactory = HibernateUtil.getSessionFactory();
            session=    HibernateUtil.getSessionObject();
            transaction=session.beginTransaction();
            //创建客户对象
            Customer customer = new Customer();
            customer.setCustName("axc");
            customer.setCustLevel("vip");
            customer.setCustMobile("112");
            customer.setCustPhone("234235");
            customer.setCustSource("网络");
            //创建联系人对象
            LinkMan linkMan = new LinkMan();
            linkMan.setLkm_name("xiaozhangxu");
            linkMan.setLkm_gender("男");
            linkMan.setLkm_phone("1235");
            //在联系人里面表示客户,在客户里面表示联系人
            //建立客户和联系人的关系
            //把联系人对象放入客户的set集合里面
            customer.getSet().add(linkMan);
            //把客户对象放入到联系人
            linkMan.setCustomer(customer);
        session.save(customer);
        session.save(linkMan);
            //提交
            transaction.commit();
        }catch (Exception e){
            e.printStackTrace();
            //回滚
            transaction.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

(2)简化写法

  • 一般根据客户添加联系人
    第一步 在客户映射文件中进行配置
  • 在客户映射文件里面set标签进行配置
    在这里插入图片描述然后只需要将一的一方传入到多的一方的set集合即可

2 级联删除
(1)删除某一个客户,这个客户里面的所有的联系人也删除

一对多联级删除

删除每一个客户其下的联系人也删除

第一步在客户配置文件的set标签的cascde属性里添加delete属性即可
在这里插入图片描述第三步 直接在代码里删除用户即可,调用session.delete
在这里插入图片描述

执行流程

第一步先根据id查询客户
在这里插入图片描述第二步根据customer的cid去查对应linkman表的cid
在这里插入图片描述第三步,将linkman的cid设置为null
在这里插入图片描述第四步,执行删除操作
在这里插入图片描述

一对多修改操作

 @Test
    public void testUpdate(){
        try{
            //与本地绑定的session
            sessionFactory = HibernateUtil.getSessionFactory();
            session=    HibernateUtil.getSessionObject();
            transaction=session.beginTransaction();
            //根据id查出来之后再删除
            Customer customer = session.get(Customer.class,2);
            LinkMan linkMan = session.get(LinkMan.class, 1);
            //把客户和联系人进行绑定操作
            //把联系人放入到客户中去
            customer.getSet().add(linkMan);
            //把客户放入到联系人中去
            linkMan.setCustomer(customer);
            session.update(customer);
            //提交
            transaction.commit();
        }catch (Exception e){
            e.printStackTrace();
            //回滚
            transaction.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

在这里插入图片描述

inverse属性

(1)因为hibernate双向维护外键,在客户和联系人里面都需要维护外键,修改客户时候修改一次外键,修改联系人时候也修改一次外键,造成效率问题
在这里插入图片描述解决方案:让其中一方放弃外键的维护,一般让一的一方放弃维护外键
在这里插入图片描述

hibernate多对多操作

多对多映射配置
以用户和角色为例演示

第一步 创建实体类,用户和角色
在这里插入图片描述在这里插入图片描述

第二步 让两个实体类之间互相表示
(1)一个用户里面表示所有角色,使用set集合

(2)一个角色有多个用户,使用set集合

第三步 配置映射关系
(1)基本配置
(2)配置多对多关系

  • 在用户里面表示所有角色,使用set标签
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.zy.pojo.User" table="t_user">
        <!-- 2 配置实体类id和表id对应
			hibernate要求实体类有一个属性唯一值
			hibernate要求表有字段作为唯一值
         -->
        <id name="user_id" column="user_id">
            <!-- 设置数据库表id增长策略
				native:生成表id值就是主键自动增长
			-->

            <generator class="native"></generator>
        </id>
        <!-- 配置其他属性和表字段对应
			name属性:实体类属性名称
			column属性:生成表字段名称
		-->
        <property name="user_name" column="user_name"></property>
        <property name="user_code" column="user_code"></property>
        <property name="user_password" column="suer_password"></property>
        <property name="user_state" column="user_state"></property>

<!--        在用户映射文件中,表示用户的角色
                set标签表示所有联系人
                name属性是实体类中定义集合的名称
                -->
        <set name="roles" table="sys_user_role">
            <!-- hibernate机制双向维护外键,多的和一方都加column属性
            column 填的是-->
            <key column="user_id"></key>

            <many-to-many class="com.zy.pojo.User" column="role_id"></many-to-many>
        </set>
    </class>
</hibernate-mapping>
  • 在角色里面表示所有用户,使用set标签
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.zy.pojo.Role" table="t_role">
        <!-- 2 配置实体类id和表id对应
			hibernate要求实体类有一个属性唯一值
			hibernate要求表有字段作为唯一值
         -->
        <id name="role_id" column="role_id">
            <!-- 设置数据库表id增长策略
				native:生成表id值就是主键自动增长
			-->
            <generator class="native"></generator>
        </id>
        <!-- 配置其他属性和表字段对应
			name属性:实体类属性名称
			column属性:生成表字段名称
		-->
        <property name="role_name" column="role-name"></property>
        <property name="role_memo" column="role_memo"></property>

<!--        在角色映射文件中,表示所属客户
                set标签表示所有用户
                name属性是实体类中定义集合的名称
                table表示中间表第三张表的表名
                -->
        <set name="users" table="sys_user_role">
            <!-- hibernate机制双向维护外键,多的和多方都加column属性
            column 填的是role_id-->
            <key column="role_id"></key>

            <many-to-many class="com.zy.pojo.Role" column="user_id"></many-to-many>
        </set>
    </class>
</hibernate-mapping>

第四步 在核心配置文件中引入映射文件

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

多对多级联保存

根据用户保存角色

第一步 在用户配置文件中set标签进行配置,cascade值save-update
在这里插入图片描述

第二步 写代码实现
(1)创建用户和角色对象,把角色放到用户里面,最终保存用户就可以了
在这里插入图片描述在这里插入图片描述

多对多的级联删除

第一步在配置文件配置
在这里插入图片描述第二个进行删除操作
在这里插入图片描述

维护第三张表

1 用户和角色多对多关系,维护关系通过第三张表维护

2 让某个用户有某个角色
第一步 根据id查询用户和角色

第二步 把角色放到用户里面
(1)把角色对象放到用户set集合
在这里插入图片描述

3 让某个用户没有某个角色
第一步 根据id查询用户和角色

第二步 从用户里面把角色去掉
(1)从set集合里面把角色移除
在这里插入图片描述

5G时代必知:LDPC与Polar码实战解析(附MATLAB仿真代码) 本文深入解析5G时代核心信道编码技术LDPC码与Polar码的原理差异及性能表现,通过MATLAB仿真代码展示其在实际通信系统中的应用。LDPC码适用于大数据块高速传输,而Polar码在小数据块低时延场景表现优异,帮助开发者优化5G系统设计。 阅读详情

相关推荐

STC15单片机实战项目软件开发第四讲 - 按键检测(状态机)

软件开发第四讲 - 按键检测(状态机) 一、工具链接 1、Keil c51 UV4 https://yunpan.360.cn/surl_yrIfYYmeRFk 2、STC-ISP下载软件 https://yunpan.360.cn/surl_yxH4CuUUvI3 二、学习板获取方式 方法1:自己设计PCB,自行打板焊接; 方法2:用群主设计的PCB,自行打板焊接; 方法3:向群主购买,淘宝链接...

硬件家园 3048

Hibernate一对多,多对一,多对多的关联关系

一对多,多对一,多对多的关联关系

qq_55518624的博客 407

Polyworks脚本开发学习笔记(一)-脚本开发环境

详细的总结和记录了利用Polyworks进行脚本开发的一些方法和心得

qq_43662503的博客 6813

hibernate类之间的引用关系(一对一,一对多/多对一,多对多)

什么是关联association1.什么是关联(association) 1.什么是关联(association) 1.1 关联指的是类之间的引用关系。如果类A与类B关联, 那么被引用的类B将被定义为类A的属性。例如: public class A{ private B b = new B; public A(){} } 1.2 关联的分类:关联可以分为一对一、一对多/多对一、和多对多关联 关联是...

weixin_45067120的博客 928

命令行执行YOLO训练命令报错:1.PermissionError: [WinError 5] 拒绝访问 2.OMP: Error#15: Initializing libiomp5md.dll...

(已解决!)报错:1.PermissionError: [WinError 5] 拒绝访问 2.OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

Gpengyuyan的博客 1125

Pinocchio 安装教程|机器人学的必备库

安装pinocchio,不要安装pip3 install pinocchio!

darcsdn 1662

JAVA面试总结(第十二模块答案)

十二、Hibernate 113. 为什么要使用 hibernate? 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 hibernate的性能...

Tanet Blog 665

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集的建立

运动物体的微多普勒效应为人体动作识别提供了可能,基于雷达的居家检测具有良好的隐私保护性,且不易受环境因素影响(如光照、温度等),近年来已受到国内外学者的广泛关注。基于雷达与深度学习的摔倒检测使用自建的雷达数据集进行人体摔倒检测的研究。雷达数据集的建立分为雷达数据采集和雷达数据处理两部分工作。

洋洋Young的博客 3404

Hibernate 多对一与一对多关系配置(个人理解)

在我的理解中,在两边的xml配置文件中一起加入各自的关联关系就可以了,但是事实是我单独配置一方(多对一或一对多) 的时候,是可以级联查询另一方的,但是当多对一和一对多的关系同时配置时, 却只能实现多对一,获得作者的时候读取不出文章信息 所以我认为两边关系不能同时存在.

qishubiao的博客 1703

华为eNSP镜像包全集下载,包含CE6800、CE12800、NE系列等!

你好,这里是网络技术联盟站。昨天给大家介绍了win11、10下安装eNSP最新系列(1.3.00)并完美运行,附下载。从文章发布到发文前,一直有朋友想让瑞哥提供一下华为ENSP镜像包,今天安排!eNSP安装包、以及eNSP中所需要的镜像包(设备包)(CE、CX、NE40E、NE5000E、NE9000、USG)例如:导入一个USG设备包,eNSP中的USG5500和USG6000V都是可以启动的。如果你的报错“40”的话,那么打开Oracle VM VirtualBox这个虚拟机,删除对应报错的虚拟机,然后

网络技术联盟站 3万+

Cleo Synchronization接口任意文件读取漏洞CVE-2024-50623 附POC

微信公众号搜索:南风漏洞复现文库该文章 南风漏洞复现文库 公众号首发Cleo。

nnn2188185的博客 481

06-Hibernate中一对多,多对一,多对多分别在数据库表,对象entity,以及xml文件中的表达

06-Hibernate中一对多,多对一,多对多分别在数据库表,对象entity,以及xml文件中的表达 一对多|多对一 关系表达 表中的表达 在表中的表达,例如客户对联系人,客户是一的一方,联系人是多的一方,也就是一个客户下可以有多个联系人,而多个联系人对应一个客户,所以客户对联系人就是一对多的关系,联系人对客户就是多对一的关系,数据库表中在多的一方使用外键表示关联关系。(详情请参考...

qq_26270869的博客 561

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JAVA框架——Hibernate(三)实体之间的关系,一对多的关系维护,多对多关系维护

一、 多表之间的关系 1. 一对多 建表原则:在多的一方创建外键指向一方的主键 2. 多对多 建表原则:创建一个中间表,中间表中至少两个字段作为外键分别指向多对多双方的主键 3. 一对一 建表原则有两两种 第一种:唯一外键对应:假设一对一种的任意一方为多,在多的一方创建外键指向一方的主键。 第二种:主键对应:一方的主键作为另外的主键 二、 实体之间的数据关系 数据库的表能够描述实体数据之间的关系,通过对象也可以进行描述,所谓的关联映像就是将关联关系映射到数据库种。在对象模型种就是一个或多个引用。 在Hibe

Mr_GYF的博客 1042

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SpringBoot与Hibernate整合 一对多,多对多(实例)

简介 一对多: 在一对多双向关联时,在一的一方需要设置@OneToMany和mappedby,在多的一方需要设置@ManyToOne和@JoinColumn 多对多: 在多对多双向关联时,在控制的一方设置@ManyToMany和@JoinTable,在另一方需要设置@ManyToMany和mappedby Demo目录 数据表 核心代码 application.properties #自己的数...

小夏陌的博客 7381

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

hibernate学习笔记三:表之间的关系、一对多和多对多操作

文章目录1. hibernate学习笔记三:表之间的关系、一对多和多对多操作1.1. 一对多&&多对一之间的关系1.2. 级联操作2. 多对多关系3. 小知识点 1. hibernate学习笔记三:表之间的关系、一对多和多对多操作 1.1. 一对多&&多对一之间的关系 在数据库中要将外键设置在多的一方。 在实体对象中 实体类中要分别建立具有联系的属性对象,一...

公子&小白的博客 570

3、Hibernate一对多及多对多操作

Hibernate一对多及多对多操作一.表与表之间的关系1.一对多 (客户与联系人)2.多对多 (用户和角色)二.hibernate 一对多操作1.一对多映射配置(1)创建两个基本的实体类(2)让两个实体之间有相互表示的属性(3)配置映射关系2.一对多联级保存(1) 完整写法(2) 简化写法3.一对多联级删除(1) 删除某个客户,把客户里面所有的联系人删除(2)具体实现4.inverse属性三.h...

ph154的博客 1323

hibernate 一对一、一对多、多对多的情况

转载了篇hibernate 一对一、一对多、多对多的情况的文章这些个例子中,将考虑到表之间的一对一、一对多、多对多的情况。如图1所示: 在上面的数据模型图中,Student是所有表的核心,它和Classes表是一对多的关系,和Course表是多对多的关系(通过Student_Course_Link表来链接),和Address表是一对一的关系。通过分析,我们可以把上面的数据模型转

myst_aa的专栏 1496

Hibernate中的一对多和多对多关系

Hibernate是一个优秀的ORM框架,它简化了Java应用程序与关系型数据库之间的数据访问。在Hibernate中,我们可以使用一对多和多对多的关系来处理复杂的数据模型。本文将介绍Hibernate中的一对多和多对多,包括配置和操作。

互联说 1121

Hibernate的映射关系与级联(一对一、一对多、多对多)

Hibernate的映射关系与级联(一对一、一对多、多对多) 长期专业踩坑,现记录点滴,望提升自我,为祖国软件事业作贡献(害羞脸) 1、主键一对多示例 2、非主键一对多示例 3、主键多对多示例 4、非主键多对多示例 5、主键一对一示例 6、非主键一对一示例 7、双向示例 8、单向示例

iamzhuwh 1548

Hibernate详解 一对多、多对多的映射

目录数据库表与表之间的关系Hibernate的一对多的关联映射Hibernate一对多的关系配置Hibernate一对多的相关操作Hibernate的多对多的关联映射Hibernate的多对多的关系配置Hibernate的多对多的相关操作 数据库表与表之间的关系 一对多 一个分类可以对应多个商品,一个商品是能属于一个分类。 一个客户对应多个联系人,一个联系人只能属于某一个客户。 一对多的建...

weixin_44142032的博客 557

hibernate多表操作之多对多

一对多描述的是对象与集合的关系或者对象与对象之间的关系。 更准确的说:一对多描述的对象与集合之间的关系 即:在Classes类中set集合属性,多对一描述的是对象与对象的关系,即:在Student类中有一个Classes属性,两者之间就是对象与对象的关系 多对多描述的就是对象与集合之间的关系,每个类中都有一个集合装多的一方的类对象 实例:老师与学生,学生与课程 对多对,数据库中得有

l7945685的博客 4106

hibernate多对多,转换为两个一对多

例如,现在有商品表,订单表,两者是多对多的关系, --订单表 create table ORDERS ( ID NUMBER(8) not null, TOTAL NUMBER(8,2) not null, CREATED_DATE VARCHAR2(40) not null, REALNAME VARCHAR2(20), TELPHONE VARCHAR2(20), MOBIL

xyjikl 2059

Hibernate—— 一对多、多对多关系

最近在学习一个项目,遇到了hibernate的一些问题,所有找了这篇博客来温习温习一下。

weixin_40290074的博客 208

hibernate的表关系一对多,多对一,多对多

一对多: 举例:一门课程会有多个学生学(虽然多个可能会有多门课程,但这里就当只有一门课程,或者一个省会有多个城市) 然后要在实体类中体现出来还有在实体类对应的映射文件中也要映射出来 course的实体类 创建一个学生对象的集合set,提供set get方法 实体类的映射文件 以谁为主谁级联(谁少),维护数据就是多的维护 多对一: 举例:多个城市同属于一个省(多个学...

weixin_45357829的博客 197

Java 框架之Hibernate (三、Hibernate一对多及多对多的关系分析)

上一篇博客中我们讲了一对一的关系,那么这篇博客我们来讲一讲一对多和多对多的关系,我们现在都是在建立关系,具体怎么使用,我会在下面的博客中提到,所以不要急。我们先把关系分析清楚,建立好关系。好,废话不多说,今天我们来说一说一对多的关系。举个例子,省份和城市。这就是很典型的一对多,一个省份可以有多个城市,但一个城市只会有一个省份。那么,这如何在我们Hibernate中体现呢??老规矩,首先是数据库设计,

qq_37999820的博客 365

Hibernate一对多,多对多操作

表与表之间的关系 一对多: 分类和商品关系,一个分类里面有多个商品,一个商品只能属于一个分类。 客户和联系人是一对多关系: 联系人在人际交流中担任着重要的角色,在销售过程中,我们通常不是在最开始就联系到有决策权的高管,而有可能是接电话的前台A、营销人员B、客服C、技术人员D等等。这些人都是我们与企业保持交流的联系人。他们对产品的支持态度决定了产品是否能够顺利推送到高管面前...

ane9542的博客 169
上一篇: Jquery随记
下一篇: Hibernate笔记(四)hibernate查询方式、HQL查询、QBC查询、HQL多表查询、hibernate检索策略
·小脑斧·
博客等级 码龄7年 10粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值