Java程序员玩转数据库的CRUD

ChatGPT提效:告别CRUD 随着AIGC的发展以及大语言模型的成熟,各种AI应用眼花缭乱,以至于我们看到各种新奇的应用都会产生焦虑,我有一天会不会被淘汰?且看后文分析。AIGC的发展与逐渐成熟已经是无可逆转的局势,既然我们打不过为何不加入进来,今天这篇文章将带领你掌握使用ChatGPT帮助我们程序员提高工作效率,摆脱焦虑。 阅读详情

01

关注"一猿小讲"朋友,都知道以往的文章一直倡导拒绝 CRUD,那到底什么是 CRUD?今天咱们就聊聊 Java 妹子小猿与数据库老头交互的事儿。

产品小汪铿锵有力的说:小猿同学,咱们近期要推一爆款产品,你先实现用户基本的登录的功能。

啥玩意?小猿内心嘀咕嘀咕:爆款产品,还基本的登录,那不就是实现用户的 CRUD(增删改查)么?

小汪一句话,累死三军。扯皮一上午的会议终于结束了,于是小猿便叫了个外卖,填补了肚子的空虚后,小猿习惯性的在脑海里,开始了爆款产品的从 0 到 1 的脑图搭建。

小猿的思路是这样的:先分析一下产品汪的需求,看看是否会有遗漏的需求功能点;然后进行数据库表结构设计;接着就是小猿喜欢的码代码操作。

小猿码代码的方式,那是出了名的相当特别的认真,所以引来了大家的围观。

之前只是道听途说,今日一见果然名不虚传。只见小猿先是在 sqlmaps 文件苦下了一番功夫,一个字母、一个标点的去编写映射文件;接着又一个一个去定义实体类,数据库表的字段一个一个的进行映射;然后用同样认真的方式去编写 dao 的代码;最后又回过头确认数据库表字段与实体类是否一一对应。

看着小猿认真的态度,确实值得赞扬。但是围观小猿码代码之后,看得我反而肾疼,这不都是重复性劳动么,难道就没有什么好的方式可以推荐给小猿吗?

02

带着小猿徒手造工具。

小猿,你找个你比较钟意的目录,创建个文件夹,你命名为 mybatis-generator,其实起啥名字无所谓啊,这个就是你的工具包目录,下面的东西都放这个目录中。

小猿,看看你电脑上有没有连接数据库的驱动包,没有咱就下载一个,给你个下载链接,再给你一分钟时间,把 jar 包下载一下,后面会用到,我去抽根烟。

https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

小猿你下载好了没,我一根烟都抽完啦。

既然你下载完了,那就再看看电脑上有没有这个包 mybatis-generator-core-1.3.2.jar,别管它是干啥用的,没有就按照下面的地址下载就是啦,反正后面要用到。

https://repo1.maven.org/maven2/org/mybatis/generator/mybatis-generator-core/1.3.2/mybatis-generator-core-1.3.2.jar

小猿,到这咱们的准备工作差不多了,但是还需要你创建个配置文件 generatorConfig.xml,不用操心文件内容,直接把下面的代码拿过去改吧改吧就行啦。注意一定要把里面涉及到的目录,都改成你电脑上的目录,你先修改一会儿,我去泡杯咖啡喝喝。内容如下(注意一定要修改目录)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
  <!-- 指定数据连接驱动jar地址 -->
  <classPathEntry
    location="/app/mybatis-generator/mysql-connector-java-5.1.38.jar" />

  <!-- 指定数据连接驱动jar地址 -->
  <context id="db2Tables" targetRuntime="MyBatis3">
    <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
    <commentGenerator>
      <property name="javaFileEncoding" value="UTF-8"/>
      <!-- 是否生成注释代时间戳 -->
      <property name="suppressDate" value="true" />
      <!-- 是否取消注释 -->
      <property name="suppressAllComments" value="false" />
    </commentGenerator>

    <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
      connectionURL="jdbc:mysql://localhost:3306/baokuan"
      userId="root" password="root" />

    <!-- targetProject:生成实体类存放的目录 -->
    <javaModelGenerator targetPackage="com.cool.baokuan.modules.model"
      targetProject="/app/mybatis-generator/src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!-- targetProject:mapper映射文件生成的位置 -->
    <sqlMapGenerator targetPackage="com.cool.baokuan.modules.dao"
      targetProject="/app/mybatis-generator/src">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <!-- targetPackage:mapper接口生成的位置 -->
    <javaClientGenerator targetPackage="com.cool.baokuan.modules.dao"
      targetProject="/app/mybatis-generator/src" type="XMLMAPPER">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <!-- 指定数据库表 -->
    <table tableName="T_USER" domainObjectName="User"
      enableCountByExample="false" enableUpdateByExample="false"
      enableDeleteByExample="false" enableSelectByExample="false"
      selectByExampleQueryId="false"/>
      
  </context>
</generatorConfiguration>

小猿,改完目录了吧?

既然改完了,那就差最后一步了,你在创建个执行脚本,你的系统是 Windows,所以脚本名称为 run.bat,我的是Mac,所以我的脚本名称为 run.sh。创建完成再把下面的内容 copy 进去。

Java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

好了,小猿,恭喜你已经徒手完成工具包的搭建,你自己看看效果,满意不?

小猿,是骡子是马,咱们都应该牵出来溜溜。到你小试牛刀、一展歌喉的时候啦。一键运行 run.bat 或者 run.sh 试试。

哇塞,看到上面的效果,小猿着实惊呆啦,因为有了这个工具,以后再也不用重复的写映射文件、写实体类、写 dao 了,就只配置配置数据库的表名就行啦,简直太帅啦。

小猿,切莫欣喜过度。你以后使用这个工具时,一定要注意修改 generatorConfig.xml文件中的以下几个地方,不然会出幺蛾子。

1. 修改指定数据连接驱动 jar 地址;
2. 修改数据库连接的url、用户名、密码;
3. 修改 targetProject 目录为你电脑的目录;
4. 修改数据库表。

好了,小猿,师傅领进猿门,修行在于个人,以后就看你自己的造化啦(🤭)。

03

造化弄人,小猿忙想招。

产品刚上线没几天,用户量陡增,真是爆款产品啊,用户查询越来越慢。

产品小汪牛掰哄哄的说:小猿,最近有好多用户反应系统体验越来越慢,是不是代码有 Bug 啊?

啥玩意,代码有 Bug,代码怎么可能有 Bug!其实小猿内心跟明镜一样,比任何人都清楚,是用户表太大了,以至于查询过慢,那该咋办呢?

只见小猿,拿出神笔,在本本上重重的写下啦“分库分表”,于是开始了分库分表一系列的烧脑的验算过程,不得不佩服小猿的数学功底,趁小猿不注意,我偷摸的记了一些,赶紧分享给你们。

分库分表的规则

若有 M 个数据库主节点,数据表总计拆分成 N 张子表,拆表字段可数值化转换为 X,则数据库实例的序号为  X % M; 数据表的序号为 X % N。

例如:当主节点个数 M=6,总计拆表数 N=1200 时,单库内子表个数为 200,那么数据库实例的序号为 X % 6;数据表的序号为 X % 1200。

那么序号为 0 的数据库中,会有序号为 0,6,12,18… 的数据表;序号为 1 的数据库中,会有序号为 1,7,13,19… 的数据表,以此类推。

拆表字段数值化机制

取拆表依据字段,对其取 crc32,之后取绝对值,即为上述“分库分表公式”中的 X。

没想到小猿,还专门为此写了段伪代码。

java.util.zip.CRC32 crc32 = new java.util.zip.CRC32();
// 拆分字段进行crc32
crc32.update(splitField.getBytes(DEFAULT_ENCODING));
long x = java.lang.Math.abs(crc32.getValue());

// 数据库下标
long n = x % dbNum;
String dbPos = String.format("%02d", n);
System.out.println("数据库的下标:" + dbPos);

// 表下标
long m = x % tableNum;
String tablePos = String.format("%03d", m);
System.out.println("表的下标:" + tablePos);

​​​​​​​而且,小猿在稿纸最后落款的时候,还写了三遍:Sharding-Jdbc、Sharding-Jdbc、Sharding-Jdbc。尤其是写了三遍,所以各位看官要自行脑补一下这个玩意啦,不然以后就永远跟不上小猿的节奏啦。

04​​​​​​​

不愧是能让大家一起围观的小猿,看到这我也只能 ORZ 膜拜小猿。引用一句经典:你大爷还是你大爷,但是小猿已经不再是以前重复 CRUD 的小猿啦。士别三日当刮目相待,所以不要小看身边的每一位小猿呦。

三相交错并联的boost变换器simulink仿真,电流双闭环控制策略 文章介绍了一种基于Simulink的三通道交错并联双向Buck-Boost变换器的设计与仿真。该变换器采用电压外环和三电流内环的控制策略,并通过120°载波移相技术实现Buck模式与Boost模式之间的平滑切换,有效避免了过压和过流问题。交错并联的拓扑结构不仅减少了电感电流的纹波,还缩小了每相电感的体积,提升了电路的响应速度,适用于储能系统。仿真过程完全离散化,采用离散解析器,主电路与控制部分以不同步长运行,更贴近实际应用。控制与采样环节均为手工搭建,未使用Matlab自带模块,展示了三相交错并联Boost 阅读详情

相关推荐

SPSS因子分析实战:从数据清洗到结果解读的完整流程

本文提供了一份详尽的SPSS因子分析实战指南,涵盖从数据清洗、适用性检验(KMO与巴特利特检验)、公因子提取、因子旋转到结果解读与报告撰写的完整流程。通过具体案例,手把手教你如何利用SPSS进行探索性因子分析,实现数据降维并提炼核心公共因子,适用于市场研究、心理学等多变量数据分析场景。

weixin_29055699的博客 329

Java程序员:CRUD,你真的会了吗?

CRUD,增删改查,读写分离,主从架构,CQRS,读写锁,事务控制,SQL,DQL,DML

nshkfhwr的博客 1207

利用docx4j与docx4j-ImportXHTML高效实现HTML到Word的自动化转换

本文详细介绍了如何利用docx4j与docx4j-ImportXHTML库,在Java环境中高效实现HTML到Word文档的自动化转换。内容涵盖从环境搭建、核心依赖配置,到集成Spring Boot REST API的完整实战流程,并深入解析了处理图片、CSS样式、字体设置以及使用模板保证样式统一等高级技巧与常见问题解决方案,帮助开发者构建稳定的文档自动化生成流水线。

cnn8visionary的博客 365

Java开发拿着30K的高薪,每天却只是CRUD,怎么办?

如果是复杂有难度的CRUD,比如几百万级别用户的CRUD那还是有挑战性的。其实一个项目中,还是可以多和其他成员交流学习新的技术新的业务,还是可以提升自己的。作为程序员来说,各种各样的业务处理各种技术都想尝试,像程序员这样勇于学习勇于尝试新东西的工作的人并不多见。很多其它行业的人巴不得有这样轻松的而且拿着高薪的工作。程序员做着简单的CRUD工作,拿的是30K的高薪,是不是让人特羡慕?要说CRUD不能说特简单,大部分的数据处理业务基本也就是各种花样的CRUD工作,真要把CRUD做溜做好,不是一件容易的事情。

javaAnPou的博客 837

【YOLOv13多模态融合改进】| CFT:跨模态融合Transformer | 利用Transformer的自注意力机制,解决跨模态融合中的长距离依赖和全局信息整合问题

本文记录的是利用 CFT 模块改进 YOLOv13 的多模态目标检测网络模型。的设计出发点在于解决传统多模态检测中跨模态特征融合不充分的问题,即当不同模态数据需协同检测时,基于CNN的方法因局部卷积的局限性,难以捕捉长距离依赖和全局模态间的互补信息,导致复杂光照、遮挡等场景下检测精度不足。本文利用模块,将多模态特征序列拼接后自动学习模态内与模态间的交互权重,在特征提取阶段整合全局上下文信息,增强对不同模态互补特征的利用能力,从而提升模型在多模态场景下的检测鲁棒性与准确性。Cross-Modality Fus

Limiiiing的博客 539

Unity 编辑器篇|(一)MenuItem菜单栏

"一级菜单/二级菜单上/三级菜单""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""GameObject/二级菜单""CONTEXT/组件名/菜单名""一级菜单/二级菜单上 #_A""Assets/二级菜单""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""自定义/Test"

游戏开发小Y的博客 13万+

JavaWeb基础知识入门-Mybatis框架的crud(一)

javaweb基础知识入门和Myatis框架的增删改查

m0_59230408的博客 2万+

Jetson AGX Orin平台Jetpack5升级Jetpack6,自研载板USB不工作问题调试

1. 问题描述将AGX Orin工业的新板放到定制的载板上当在ubuntu 22和Jetpack 6.1上使用SDKManager刷机时,lsusb为空,并且在引导时没有发现/注册xusb设备。USB C端口正常打开并供电,但似乎没有数据传输。在Ubuntu 18 Jetpack 5.1.4 SDKManager上同样刷机之后,usb C集线器在引导时被正确地发现,显示在lsusb中,并识别/挂载外部驱动器。

jzwjzw19900922的博客 1510

关于程序员的发展之路,5年了,以后的路该如何走?!

从事it行业将近5年,这五年,在工作上平平淡淡,简简单单的。最近成家了,然后为了生活吧,内心深处想真正的去改变一次,想去多学技术,多学知识,多接触人,多总结。 从刚毕业到实习,是一个阶段。从大学到实习,从学的基础,到实践。然后感觉自己有了质的变化。那时候自己对知识渴望,所以自己学习东西都是抱着积极的心态去学,对比着学,然后总结。那个期间,上班时间安心的上班,完成本分的工作,并且总结学习知识点。下

chiasing的专栏 4126

【YOLO目标检测全栈实战】68 模型量化:从FP32到INT8,精度不掉,速度翻倍

摘要: 模型量化能显著提升推理速度(如YOLOv5s帧率从15FPS提升至38FPS),但需避免三大误区:1)校准集需覆盖实际场景,而非随机采样;2)敏感层(如检测头)应保留FP32精度;3)预处理必须与量化前后一致。通过混合精度量化(Backbone用INT8,检测头用FP32)和逐通道量化,可实现<1%的mAP损失。关键步骤包括校准数据准备、量化感知训练及逐层精度评估,最终在Jetson Nano等边缘设备上实现速度与精度的平衡。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 146

五十天精通硬件设计第6天-放大器知识及选型

运算放大器(Operational Amplifier,简称运放)是一种高增益的直流耦合差分放大器,广泛应用于信号处理、滤波、比较、积分、微分等电路中。

whm128的博客 594

Java开发每天只是CRUD,却拿着30K的高薪,有点迷茫

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面小编专门为你量身定制了一套针对知识面不够,也莫慌!还有一整套的,可以瞬间查漏补缺全都是一丢一丢的收集整理纯手打出来的。

2401_84048935的博客 1076

文末含资料链接和视频讲解!YOLOv8集成CoordAtt注意力机制详细教程

本文详细介绍了如何在YOLOv8目标检测框架中集成CoordAtt注意力机制。首先解析了CoordAtt的工作原理,它通过分解式池化将位置信息嵌入到通道注意力中,相比传统注意力机制具有更好的空间信息保持能力。然后提供了PyTorch实现代码解析,包括自适应平均池化、Hard-Swish激活函数等关键实现细节。最后概述了YOLOv8架构,为后续集成CoordAtt提供基础。该教程适合具备深度学习基础的开发者,将理论与实践结合,帮助读者掌握这一目标检测优化技术。

FJN110的博客 266

Java程序员如何快速的完成CRUD操作

有前端小伙伴的话,作为一个后端CRUD程序员那必须的写出一个漂亮的接口文档,让前端小伙伴对你不会产生杀意哈项目启动成功后打开浏览器,地址栏输入然后就可以看见接口文档了哈这样就完成了CRUD的流程了吧,当然这还是不够的,还是要写单元测试等等等等等毕竟CRUD找不到工资。

weixin_63623921的博客 853

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

WINCC7.3破解文件

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

我们后端程序员不是操作MyBatis的CRUD Boy

大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。

JavaSouth南哥 2820

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

程序员除了会CRUD之外,还应该知道什么叫CQRS!

阅读本文约需要5分钟今天主要跟大家分享一下什么是 CQRS,以及在项目中如何去使用。1. CRUD系统我们平常最熟悉的就是三层架构,通常都是通过数据访问层来修改或者查询数...

4214

VC中sqlite的使用

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

Java开发工作4年还是只会“crud”,Java程序员该如何提升?

对于很多学习Java的程序员来说,回过头来看入门Java的过程并不难,反而是学到后期感觉没有进步,尤其是对于一个进军编程界的两三年的Java程序员来说,工作如果还只是增删改查,这可是相当痛苦的。 有这种情况的程序员,有不少是在外包公司,每天就期待下班,简直就是做一天和尚撞一天钟。为了打破这种僵局,Java程序员在这个迷茫的阶段应做什么呢? 下面将为程序员小伙伴们分享5个进阶的注意点,俗话说:师傅领进门,修行在个人,要提高自己还是要自己付出努力。 一、阅读框架源码 阅读源代码首先是选择,无论是你选择s

Java0258的博客 2949

从CRUD到源码级别:Java程序员必须掌握的8项底层能力

掌握Java程序员技术路线关键节点,从CRUD进阶源码级开发。涵盖JVM原理、多线程、Spring源码、性能调优等8项底层能力,提升架构思维与系统设计水平。适用于中高级Java开发者突破瓶颈,值得收藏。

CodeTrick的博客 1057

JDBC JAVA连接数据库(黑马程序员)

把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,()使用这些类库可以以一种标准。

F2022697486的博客 1920

只会CRUD的Java程序员如何提升技术?

性能优化可以说是我们程序员的必修课,如果你想要跳出CRUD的苦海,成为一个更“高级”的程序员的话,性能优化这一关你是无论无何都要去面对的。为了提升系统性能,开发人员可以从系统的各个角度和层次对系统进行优化。除了最常见的代码优化外,在软件架构上、JVM虚拟机层、数据库以及操作系统层面都可以通过各种手段进行调优,从而在整体上提升系统的性能。

weixin_50205273的博客 361

JDBC实现CRUD操作

目录 前言 一、JDBC介绍 1、概念 2、关系 3、优点 二、JDBC编程步骤 1、导包 2、获取连接 2.1创建配置文件 2.2数据连接方式(通用格式) 3、实现CRUD操作 3.1为什么要替换? 3.2使用PreparedStatement实现增、删、改操作 3.3使用PreparedStatement实现查询操作 4、资源释放 三、JDBC API 总结 前言 前面介绍了MySQL基本的增删改查操作,那么如何在java中来实现对数据库的数据操作呢!本编介绍的JDB

shmilyche的博客 2241

JDBC? Java Database Connectivity(Java语言连接数据库)

JDBC课堂笔记 1、什么是JDBC? Java DataBase Connectivity 在java语言中编写sql语句,对mysql数据库中的数据进行CRUD操作。 2、JDBC相关的类库在哪里? java.sql.*; 3、JDBC本质上是一堆什么呢? java.sql.*; 这个包下都是JDBC的接口,SUN公司制定的! JDBC是体现“接口作用”的非常经典的例子。 JDBC降低了耦合度,提高了扩展力。 对于java程序员来说,不需要关心数据库是哪个品牌。只要面向JDBC接口编程就行! JDBC整

途中的博客 1万+

Java注解实现增删改查CRUD

以前,我们都把对数据库的增删改查语句写在xml文件中(详见:《程序员成长笔记(一)》第三部分,第四章,第四节)。 由于Java注解的简洁高效,在Java注解的思想(干掉xml)下,现在越来越多的人使用java注解来进行增删改查操作。 而且MyBatis3也支持并鼓励我们使用Java注解来进行CRUD操作。 注:CRUD即:增Create、查Retrive、删Delete、改Update。 ...

JustryDeng 2万+

Java程序员拿着30k+,就干curd和几个简单玩意儿,眼高手低?

程序员做着简单的CRUD工作,拿的是白领的高薪30K,是不是让人特羡慕?要说CRUD不能说特简单,大部分的数据处理业务基本也就是各种花样的CRUD工作,真要把CRUD做溜做好,不是一件容易的事情。但如果长期只是做这一项事情而且是很简单的CRUD而不涉及其它,还是挺让人心里发慌的。 但之前看到有网友吐槽说经常看见java 30k、40k的,简直不敢想象,就这简单个玩意加上个增删改查我觉得不熟练的给个...

Java____superman的博客 1252

java程序员入行科目一之CRUD轻松入门教程(一)

java程序员入行科目一

励志成为一名优秀的全能型软件开发工程师。 2292

一个JAVA程序员成长之路分享

我搞JAVA也有些日子了, 因为我比较贪玩,上进心不那么强, 总是逼不得已为了高薪跳槽才去学习, 所以也没混成什么大牛, 但好在现在也已经成家立业, 小日子过的还算滋润, 起码顶得住一月近万元的吃喝拉撒玩各种贷款信用卡 不为金钱过于发愁了。 我特别感谢当初贴吧遇见的那位大神, 虽然每个月也就聊那么几句, 但是他总能在我不知道该学啥, 该怎么走的时候, 给我方向, 毫不夸张的说,我现在的衣食无忧,

u013659231的博客 2万+
上一篇: 机器学习如何为业务赋能?
下一篇: 码农的逆袭
一猿小讲
博客等级 码龄15年 294粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值