hibernate精华总结

Hibernate面试精华知识点---------不看你会后悔 这篇文章主要是对Hibernate中的一些知识点重点描述一下,因为这是在很多面试的时候都会问到的,而且还用用Hibernate与Mybatis进行比较,所以,对Hibernate其中的一些内容和原理都是需要进行了解的了。 1:进行更新操作的时候,为什么一般都是需要先获取到数据库中原数据,然后再把新对象的内容进行复制,然后再执行更新操作呢?比如下面的代码(1)而不是直接代码(2) 其中Persi 阅读详情

        hibernate所有的精华都沉淀在面向对象这个思想上,这也是它最出彩的地方。


一、关于多表:
多表是一种关系的表达,具体的有一对多,多对多这两种。




1、一对多关系,如订单和客户,一个订单只能属于一个客户,但一个客户可以有多个
订单


“一”的那一方
1)中的主键作为“多”的一方的外键,对应的,在“一”的实体类中建立private Set<> xx
= new Set<>();其中的泛型是“一”这个对象,在“一”的这一方要用private XX xx;XX
为其主键对象。




2)在“一”的那一方配置
<Set name="Set集合名">
<key column="外键名"/>
<one-to-many class="关联类"/>
</Set>




3)在“多”的那一方配置
<many-to-one name="对象名" column="外键名" class="关联类"/>








2、多对多关系,如课程与学生之间的关系
引用两者的主键作为外键,生成第三张中间表为两者建立起关系.




在两者的实体类中要分别建立对方类的Set集合




在两者的配置文件中,添加以下配置
<Set name="Set集合名" table="第三张关联表名">
<key column="自身主键名" />
<many-to-many class="关联类" column="关联类主键名" />
</Set>






3、inverse属性
inverse本意为反转,这个属性默认值为false,他的作用的表示是否维护外键,false
则为维护,true则为不维护,即反转控制权,在一对多关系中一般由多的那一方来维护
外键,即一的那一方要配置inverse=“true”,反转外键的控制权;
如果是多对多的情况,一定要在任一方设置反转,让一方拥有外键的控制权,不然两
方都维护外键关系就会出现冲突。






4、cascade属性
cascade意为级联操作,默认值为none用值有:


update
save
save-update
delete  
all
none
all-delete-orphan(孤儿删除)


若设置级联为update,那么设置级联属性的一方持久化后,无需再保存关联的另一方
需要注意的是,一般不使用delete和all-delete-orphan,这两个值很危险,一旦误删
会产生严重后果。






二、hibernate检索(查询)

 1、最简单的查询:
session.get(对象class,id)-----》通过id查询出对象,此id对应的对象必须
唯一。
 
 2、HQL查询
hibernate query language -----》hibernate的独家查询语言,需要些少量的
sql语句。

1)完全查询:
String hql ="from Xxx对象";
Query query = session.createQuery(hql);
List<Xxx> list = query.list();//返回对象结果集

2)条件查询:
按id查询:
String hql = "from Xxx where id = ?";
Query query = session.createQuery(hql);
query.setParameter(0,“idname”);
Xxx xx = (Xxx)query.uniqueResult();

匿名方式:
Stirng hql = "from Xxx where :id = c_id";
Query query = session.createQuery(hql);
query.setParameter("c_id","idName");
Xxx xx = (Xxx)query.uniqueResult();


3)分页查询
String hql = "from Xxx";
Query query = session.createQuery(hql);
query.setFirstResult(0);//起始索引
query.setMaxResults(2);//查询条数,相当于limit 0,2
索引=(当前页数-1)*查询条数

4)查询总条数
String hql = "select count(*) from Xxx";
Query query = session.createQuery(hql);
int count = (Long)query.iterate().next().intValue();
或写成Number count = (Number)query.uniqueResult();

5)投影查询
String hql ="select xxx属性 from Xxx对象";
Query query = session.createQuery(hql);
List list = query.list();//返回对象结果集

6)投影查询并把结果集给封装成对象
String hql ="select new Xxx(1属性,2属性) from Xxx对象";
Query query = session.createQuery(hql);
List<Xxx> list = query.list();//返回对象结果集
使用这个hql时要确保Xxx对象中提供了相应的构造方法

7)多表查询
|-内连接
|-外连接
|-左外连接
|-右外连接


内连接:
String hql = "from Xxx x inner join x.属性";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();

迫切内连接:
String hql = "from Xxx x inner join fetch x.属性";
Query query = session.createQuery(hql);
List<Xxx> list = query.list();
//直接获得与x.属性连接的Xxx对象

左外连接、右外连接
String hql = "from Xxx x inner left/right join fetch x.属性";
Query query = session.createQuery(hql);
List<Xxx> list = query.list();



三、QBC查询(query by criteria)
无sql语句的查询,完全面向对象

1、全部查询
Criteria c = session.createCriteria(Xxx.class);
List<Xxx> list = c.list();

2、条件查询
Criteria c = session.createCriteria(Xxx.class);
c.add(Restrictions.内置的条件);

3、分页查询
Criteria c = session.createCriteria(Xxx.class);
c.setFirstResult(0);
c.setMaxResults(2);

4、排列查询
Criteria c = session.createCriteria(Xxx.class);
c.addOrder(Order.asc("排序的列名"));
List<Xxx> list = c.list();


5、离线查询
    //在web层创建一个离线criteria对象方便在web层进行条件的拼接
DetachedCriteria dc = DetachedCriteria.forClass(Xxx.class);
dc.add(Restrictions.条件);//拼装好的条件
//dao层将离线查询对象关联到当前session上
Criteria c = dc.getExecutableCriteria(session);
...





四、查询优化


1、懒加载(延迟加载):get()--改为--》load
load方法是在执行时不发送任何sql语句,而是先返回一个对象,
只有在使用该对象时才查询;
而sava方法在执行时就会发送sql语句,无论这个被查询到的对象
使用还是不使用








 

drm 之modes #define _GNU_SOURCE #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <time.h&... 阅读详情

相关推荐

数据资产目录(SailCatalog)和数据地图(SailMap)

笔者接下来准备开发大数据平台(XSailboat)中的数据资产目录(SailCatalog)和数据地图(SailMap)相关的功能,本文用以记录笔者关于此部分功能的概念梳理和主体功能设计。

OkGogooXSailboat的博客 2328

hibernate的几点说明

上面回贴情绪有点激动,希望谅解,我不是因为有人批评Hibernate而感到不快,而是因为帖子里面的观点实在让我觉得荒谬。不管觉得Hibernate好也吧,不好也吧,我唯一觉得遗憾的是,在中文论坛里面找不到一个对Hibernate的真正高水平的评价。在TSS上有一个关于Hibernate的hot thread,跟了几百贴,其中包括Hibernate作者Gavin和LiDO JDO的CTO,对于JDO

zmoon的专栏 927

OpenFoam实用技巧——starccm网格高效转换openfoam格式全解析

本文详细解析了如何利用OpenFOAM官方工具`ccm26toFoam`,将STAR-CCM+生成的高质量网格高效、稳定地转换为OpenFOAM格式。内容涵盖从STAR-CCM+正确导出网格、执行转换命令、解读转换日志,到转换后关键的边界条件修复与网格质量检查等全流程,旨在帮助用户规避常见错误,实现无缝工作流衔接。

weixin_28309571的博客 460

Hibernate的优点 [精华]

一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。二、Hibernate是一个

新宾二亮子 937

SPSS27 paired t-test 中的Cohen’s D – Effect Size for T-Test

两组数据是相关的且是连续的。

moonlightpeng的博客 910

FFmpeg HDR视频转SDR视频命令

之前蓝光盘电影多是AVC 1080p 8bit SDR格式视频,近两年4K电影流行,下载的蓝光电影多是HEVC 2160p 10bit HDR视频格式。 ffprobe查看有如下属性: # 10bit HDR Stream #0:0(eng): Video: hevc (Main 10), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 23.98

彼此当年少,莫负好时光 1万+

hibernate 笔记精华

hibernate笔记(一)hibernate 配置及使用 http://blog.youkuaiyun.com/simon_steve_sun/article/details/5385319 hibernate笔记(二)ORM基础 http://blog.youkuaiyun.com/simon_steve_sun/article/details/5385791

大树叶 技术专栏 554

基于STM32环境温湿度监测系统设计

基于STM32环境温湿度监测系统设计1. 实验目的2. 任务和要求3. proteus仿真图4. 实验代码 1. 实验目的 (1) 掌握使用 KEIL MDK5 进行软件开发的具体流程; (2) 掌握硬件电路的设计方法; (3) 掌握 STM32 微控制器的程序设计及代码编写方法。 2. 任务和要求 (1)在 STM32F103 平台下,通过温度传感器 DS18B20 和湿度传感器 DHT11 实现环境温湿度信息的采集; (2)将温度传感器和湿度传感器所采集的数据在 LCD 液晶屏幕上显示出来,超

唯一的博客 2万+

Hibernate多对多增加与修改(精华)

Hibernate多对多的例子不少,但仔细一看,大多数都是保存的,删除谈的少,但问题还不少,因此有必须简单测试一下,以下我们来个简单的多对多关系建立老师Teacher 与 课程Course 是一个多对多的关系,Pojo与XMl配置如下。 PojoJava代码/**  * Course Entity  * see ta...

qingfengxia2013的专栏 118

YOLO+OpenClaw缺陷检测智能体 | 低代码工业质检自动化方案 | 含YOLO模型训练/智能体集成/任务全流程,支持离线日报/预警/趋势分析,解决实时性瓶颈问题(下篇)

某PCB板制造商需要对生产线上的PCB板进行缺陷检测,主要检测划痕、凹坑、污渍和裂纹等缺陷。原有人工检测方式效率仅为200件/小时,漏检率达5%,且检测人员长期工作易疲劳。

qq_36130719的博客 208

RK3588平台开发系列讲解(以太网篇)MDIO底层驱动

沉淀、分享、成长,让自己和他人都能有所收获!😄。

内核笔记 6886

hibernate save方法底层sql语句_精华Hibernate面试题及答案大集合

1.一般情况下,关系数据模型与对象模型之间有哪些匹配关系(多选)A)表对应类B)记录对应对象C)表的字段对应类的属性D)表之间的参考关系对应类之间的依赖关系2.以下关于SessionFactory的说法哪些正确?(多选)A)对于每个数据库事务,应该创建一个SessionFactory对象B)一个SessionFactory对象对应一个数据库存储源。C)SessionFactory是重量级...

weixin_31528001的博客 401

linux内核协议栈 TCP选项之SACK选项概述

目录 1SACK概述 1.1 SACK允许选项 1.2 SACK选项 2SACK允许选项的发送 2.1 SYN段发送 2.2 接收SYN段 2.2.1 struct tcp_options_received 2.2.2 tcp_parse_options() 2.3 发送SYN+ACK段 3D-SACK 1SACK概述 标准的TCP确认机制中,如果发送方发送了0-1000序号之间的数据,接收方收到了0-100、300-1000,那么接收方只能向发送方确认101,这时发送方会重...

2733

增加表字段会影响使用hibernate_精华Hibernate面试题及答案大集合

1.一般情况下,关系数据模型与对象模型之间有哪些匹配关系(多选)A)表对应类B)记录对应对象C)表的字段对应类的属性D)表之间的参考关系对应类之间的依赖关系2.以下关于SessionFactory的说法哪些正确?(多选)A)对于每个数据库事务,应该创建一个SessionFactory对象B)一个SessionFactory对象对应一个数据库存储源。C)SessionFactory是重量级...

weixin_30015835的博客 253

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

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

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

hibernate的精华----集合映射

关于hibenrate,两年前的开发中用到过,没想到再用hibernate开发是两年后的今天,这阵子用hibernate开发把以前没有用到的地方全用了,认识也深入了。那么,这阵子的开发应该做个总结了,从一些基础的知识开始总结,比看书快。来说一个基础全面的表关系student表   stuId(主键)classIdfileIdclass表classId(主键)lesson表lesId(主

融化的冰 862

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring3.0 Struts2 Hibernate 开发精华

1. 自动添加事务管理应用声明性事务 2. 直接引用hibernate.cfg.xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframew...

今天最成功 105

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[精华]struts2+spring+hibernate手动搭建环境需要的jar包

[精华]struts2+spring+hibernate手动搭建环境需要的jar包2011-02-28 14:20ssh框架的搭建,很多人都是使用myeclipse进行搭建,但是手动搭建就差劲很多了,不是缺这个包就是缺那个包,在网上找了很久这个手动添加jar的列表,分享一下。‍‍

liuzheng2684的专栏 928

第n+2周任务控制

  星期 日 期 任务 完成度 除了任务外的   星期一 8月 27日 写日志到文件、log4j、 324、文件、 存储字节、 链表、join、 yield、 socket总结、 hibernate3、 java精华集锦、JVM 基本完成 换行符: System...

iteye_19756的博客 128

Hibernate 开发培训教程 中文版

本文是由笔者2003年底一个咨询项目中,为客户做的持久层设计培训文案整理而来。   其中的内容涉及Hibernate的使用,以及一部分笔者实际咨询项目中的经验积累,另一方面,大部分是笔者在Hibernate的官方论坛中与众多技术专家交流所得。   既来于斯,则归于斯。希望能聊有所用。   本文并非试图替代Hibernate Reference,相对而言,Hibernate Reference的

软件开发资料汇总 253

自定义过滤条件的实现方法(1)

自定义过滤条件的实现方法可以有hibernate也可以用mybatis,很明显使用mybatis要方便得多。 以下是使用hibernate来实现自定义过滤条件的源代码: public String show() { forum = forumService.getById(id); // 准备分页信息 v3 String hql = "FROM Topic t WHERE t.foru

黄俊东的专栏 1756
上一篇: hibernate 啥叫一级缓存和快照?
下一篇: 各种编程资源百度云
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值