MyBatis动态SQL标签3

【深入解析MyBatis动态SQL中条件标签的演进与实践】 本文深入解析MyBatis动态SQL的条件标签演进与实践。作者王文峰(优快云博客之星)通过经典案例对比iBatis 2.x与MyBatis 3.x的动态SQL实现差异,重点分析旧版<isEqual>等标签的局限性和新版<if>/<choose>标签的优势。文章提供动态字段包含、多条件处理等最佳实践方案,包括OGNL表达式使用、复杂条件判断和空值处理技巧,并解答版本兼容等常见问题。最后建议开发者优先采用MyBatis 3新特性,逐步重构旧代码以提升SQL可维护性。本文出自 阅读详情

foreach标签是使用举例

在实际应用中,我常常需要根据多个id批量的操作:

查询指定id的记录:

这时就可以用foreach标签:

collection="ids" : 接口上传过来的数值或list集合或者map集合都可以

item="id" :设定遍历集合或数组里的每一个值的迭代变量

separator="," : 因为要构造出 (1,2,3)这种样子的字符串,设定中间的分隔符

open="(" : 因为要构造出 (1,2,3)这种样子的字符串,设定前缀的符号(

close=")": 因为要构造出 (1,2,3)这种样子的字符串,设计结尾的后缀)

index: 还有这个属性,数组或list集合的时候,设置索引变量,如果是Map集合就是map的key的迭代变量,这里的例子用不着这个。

Mysql数据库小批量保存记录:

批量保存的sql语句,可以这么写!所以,我们可以利用foreache标签来对values后面的部分构造出来:

也可以循环整个insert语句在线文档-mysql-5.1-zh:

但这样写,mysql数据库要求链接字符串要跟上链接属性allowMultiQueries:

Oracle数据库小批量保存记录:

Oracle数据库和Mysql数据库不一样,它不支持insert...values(),(),()这种写法,它支持的是以下的begin...end和中间表的两种写法:

①begin...end的写法,中间的insert语句用分号分割

begin
INSERT INTO  sb_users (id,username,password,state,reg_date)
   VALUES (40,'aa','aa',1,to_date('2018-12-1','yyyy-mm-dd'));
INSERT INTO  sb_users (id,username,password,state,reg_date)
   VALUES (41,'bb','bb',1,to_date('2018-12-2','yyyy-mm-dd'));
INSERT INTO  sb_users (id,username,password,state,reg_date)
   VALUES (42,'aa','aa',1,to_date('2018-12-3','yyyy-mm-dd'));
end;

②中间表的写法

INSERT INTO  sb_users (id,username,password,state,reg_date)
	select USERID_SEQ.nextval,username,password,state,regDate FROM(
		select 'testaa' username,'123aa' password,1 state,to_date('2018-12-1','yyyy-mm-dd') regDate from dual
		union
		select 'testbb' username,'123bb' password,1 state,to_date('2018-12-1','yyyy-mm-dd') regDate from dual
		union
		select 'testcc' username,'123cc' password,1 state,to_date('2018-12-1','yyyy-mm-dd') regDate from dual
	);

智算中心建设项目初步设计方案 本项目面向区级政府、智算中心及文旅从业者,聚焦某区智算中心一期建设,响应数字经济与智慧城市建设政策,推动文旅产业升级。遵循统筹规划、数据驱动原则,目标打造智慧文旅样板。建设内容涵盖云网数据底座(以租代建)、数据中台(全生命周期管理)、智慧文旅平台(含“一机游”电商)及气象监测等配套,采用前后端架构与低代码开发,强化三级等保与纵深防御,实现安全可控。方案融合多类资源目录,提供从设计到运营的完整技术支撑,助力区域智算与文旅深度融合。 阅读详情

相关推荐

数学建模 种群竞争模型 学习笔记

模型背景 应用场景 种群竞争模型 例如 s1=0.5,则表示对于供养甲的资源来讲,单位数量的乙的消耗为单位数量的甲的0.5倍,即表示乙对于该资源的占有能力是甲的0.5倍(即竞争力弱) 仿真结果及分析 (1)设置自然增长率 r1=r2=1 (2)改变自然增长率 r1=r2=0.3 (3)修改甲和乙的最大容量 n1=10000, n2=100 (4)修改甲和乙的初始数量 x1=10, x...

Test_tju的博客 2029

Mybatis 自定义批量更新

分享知识 传递快乐 因为项目需要,需要根据账号对数据批量更新,而传统的批量更新是根据id更新,一条一条更新又比较耗时,下面记录一下对其它字段批量更新的操作。 由于环境使用的Mybatis,在此以mybatis批量更新做示。 接口定义 int batchUpdate(List<StudentEntity> list); XML文件 <!-- 通过接收传进来的参数list进行循环着组装sql --> <update id="batchUpdate" param

旷野历程 1475

告别GIS软件!用R语言ggplot2+ggmapcn绘制出版级世界地图(附5种投影对比图)

本文提供了一份完整的实践指南,教你如何利用R语言及其强大的ggplot2生态系统,结合ggmapcn包,绘制出出版级的世界地图。文章详细对比了五种经典地图投影(如摩尔维德、罗宾森投影)的代码实现与视觉差异,并讲解了如何添加比例尺、指北针等专业元素,最终导出高清PDF,实现从数据分析到专业可视化的全流程代码化操作,彻底告别传统GIS软件。

p5l2m9n4o6q的博客 409

【Mybatis】动态SQL标签3

index: 还有这个属性,数组或list集合的时候,设置索引变量,如果是Map集合就是map的key的迭代变量,这里的例子用不着这个。批量保存的sql语句,可以这么写!separator="," : 因为要构造出 (1,2,3)这种样子的字符串,设定中间的分隔符。open="(" : 因为要构造出 (1,2,3)这种样子的字符串,设定前缀的符号(close=")": 因为要构造出 (1,2,3)这种样子的字符串,设计结尾的后缀)item="id" :设定遍历集合或数组里的每一个值的迭代变量。

CodeRunning的博客 362

Java Swing之多文档界面设计-JDesktopPane、JInternalFrame类简单应用示例

Java MDI多文档界面是一种用户界面风格,允许在一个主窗口中包含多个子窗口(文档窗口),每个子窗口可以显示不同的内容或功能模块,从而可以满足用户打开不同窗口完成不同功能的需求。开发多文档程序,一般需要JDesktopPane(桌面面板类)和JInternalFrame(内部窗体类)两个类。以下简单介绍,最后通过一个实例介绍实现逻辑。

编程语言教学工作者的博客 2209

Chromatix 7实战:从零开始调优ISP模块的完整流程(附常见报错解决方案)

本文提供了高通平台Camera调试工具Chromatix 7的完整实战指南。详细阐述了从环境准备、项目初始化、基础校正(如LSC、BPC)到核心ISP管线(Demosaic、CCM、HDR)及后处理(CAC、ANR)的调优全流程,并附带了常见报错(如“未初始化实例”)的解决方案,旨在帮助工程师建立系统性的调试方法论。

weixin_29290863的博客 627

[MyBatis] foreach collection用法

foreach一般在使用在SQL语句的IN条件中,目的是确认某个字段是否在目的范围内。在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了foreach功能,该功能比较强大,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。 格式为 WH...

Cessi的博客 2286

NRF24L01学习操作教程(二)——NRF实现一对一,一对多通讯

以上内容详细介绍了,使用NRF24L01实现1对1单向通讯、1对1双向通讯、1对多双向通讯。

Joseph Wen的博客 7391

MyBatis动态SQL之<foreach>用法

MyBatis动态SQL之用法

棒棒糖的糖不含糖的博客 4198

控制障碍函数(Control Barrier Function,CBF) 一、定义

介绍控制障碍函数

Lyajpunov的博客 2万+

GEE 案例:利用多源遥感数据计算RUSLE(Revised Universal Soil Loss Equation)土壤侵蚀

该数据集提供了全球范围内以250至500米的空间分辨率获取的多光谱图像数据,用于监测地表覆盖和变化。RUSLE模型的基本原理是通过考虑土壤侵蚀的主要驱动因素,来估计土壤侵蚀的速率。该数据集提供了全球范围内以10至60米的空间分辨率获取的多光谱图像数据,用于监测地表覆盖和变化。它对农业和土地资源管理者提供了一种评估和预测土壤侵蚀风险的工具,以制定适当的土壤保护措施和决策。2. soil(土壤)是来自OpenLandMap的土壤纹理分类数据,使用了USDA(美国农业部)土壤纹理分类系统。

此星光明博客 806

mybatis自定义动态sql批量保存(插入或更新)数据

mybatis批量插入更新动态sql

Killua____的博客 1530

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1344

MyBatis3 动态sql常用标签

MyBatis3 动态sql常用标签 动态sql是MyBatis的一大特性。 动态sql说白了就是在不改变数据库语言上进行添加标签完成相对复杂的操作功能。意思就是不能改变最终的数据库语言。 下面我介绍项目中最常用的几个标签 1、if标签 if标签类似java代码中的if,满足条件,则添加if标签内的sql语句。 例如: <select id="qeuryStaff"> SELECT * FROM STAFF WHERE staff_sex= ‘男’ <if test="titl

ningyq_的博客 411

WINCC7.3破解文件

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Mybatis入门(七)SpringBoot整合Mybatis_3 动态SQL标签

SpringBoot整合Mybatis 动态SQL标签

weixin_46030002的博客 997

深度学习工具包 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&#39;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(&#39;DeepLearnToolbox&#39;));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(&#39;state&#39;,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&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,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 = &#39;sigm&#39;;%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, &#39;Too big error&#39;);```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(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;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)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;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, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% 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&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 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, &#39;Too big error&#39;);```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(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % 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, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);%% 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(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

看程序学mybatis 动态SQL3-动态SQL - MYBATIS CHOOSE WHEN OTHERWISE 标签例子

Mybatis里面没有else标签,但是可以使用when otherwise标签来达到这样的效果。 SELECT * FROM product_ and name like concat('%',#{name},'%') and price > #{price} ...

tujiahao1的博客 180

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mybatis动态SQL多条件查询3 - trim标签

上一节我们介绍的where标签可以帮助我们去掉标签前多余的and或者or,但是不能去掉标签后的and/or, 本节我们介绍的trim标签可以帮助我们解决这个问题。 目录 1.trim标签属性介绍 2. mapper接口不变 3. mapper映射文件 4. 参数有内容时 4.1 测试结果 5. 参数无内容时 5.1 测试结果 1.trim标签属性介绍 trim标签属性 prefix 将trim标签前添加指定内容 prefixOverrides 将trim标签前去掉.

m0_53753920的博客 994

MyBatis动态SQL(一)

MyBatis 的强大特性之一便是它的动态 SQL。动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。 1.if标签 映射文件配置: <select id="q...

weixin_42510923的博客 165

MyBatis3源码深度解析(二十)动态SQL实现原理(一)动态SQL的核心组件

在使用JDBC API进行编程时,通常都要对SQL语句进行拼接,甚至还要根据不同的查询条件动态地拼接SQL语句,这个过程是比较繁琐且容易出错的,以致于花费更多的时间。MyBatis的动态SQL特性就用于解决这个问题。本节先对动态SQL的基本使用,以及涉及到的核心组件进行研究,下一节完整地研究动态SQL的解析过程。

挑灯日记 记录自己 3147

Mybatis(三)MyBatis 动态SQL

在 MyBatis 3 之前的版本中,使用动态 SQL 需要学习和了解非常多的标签,现在 MyBatis 采用了功能强大的 OGNL( Object-Graph Navigation Language)表达式语言消除了许多其他标签, 以下是 MyBatis 的动态 SQL 在 XML 中支持的几种标签 。 if choose(when、oterwise) trim(where、...

好风凭借力 54

学习笔记-SSM之Mybatis3(动态sql)

https://mybatis.org/mybatis-3/zh/dynamic-sql.html OGNL表达式介绍 [https://www.cnblogs.com/renchunxiao/p/3423299.html] 动态 SQL简介 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。 使

scc_make_belief的博客 288

MyBatis动态SQL

动态SQL相关问题及实现

weixin_54438185的博客 271

MyBatis动态sql

if标签和where标签的使用 <select id="findUserByCondition" resultType="domain.User" parameterType="domain.User"> select * from user <where> <if test="username != null" > and username = #{username} </if> ...

Steve_v的博客 163

MyBatis之动态 SQL

动态 SQL MyBatis 3 动态SQL MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素 涉及的标签 if choose (when, otherwise) trim (where, set) foreach 注意事项 mybatis if标签判断 ...

thebigdipperbdx的博客 203

mybatis:foreach与if标签组合,动态sql的完成

java mybatis的使用心得

Dmaple的博客 3616

3 Mybatis 动态 SQL

Mybatis 的强大特性之一便是它的动态 SQL。通过使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 Mybatis 的动态 SQL 主要分为下列几类: if 用于条件判断 choose 相当于 java 语言中的 switch t...

qq_45975759的博客 173
上一篇: DeepSeek-R1-671B大模型满血版私有化部署高可用教程-SparkAi系统集成图文教程
下一篇: 动态SQL的绑定和公共sql语句片段
synchronizeOn
博客等级 码龄3年 1193粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值