SpringBoot整合持久层框架

【SpringBoot】76、SpringBoot中使用JPA作为数据持久化框架 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 阅读详情

SpringBoot整合持久层框架

一、创建SpringBoot项目

二、在 pom.xml 文件中添加依赖

添加Mybatis依赖、数据库驱动依赖、数据库连接池依赖。

		<!-- Mybatis 启动器 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<!-- mysql 数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- druid 数据库连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.9</version>
		</dependency>

三、创建数据库表

CREATE TABLE `book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  `author` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into book(id, name, author)values(1, '三国演义', '罗贯中');

四、配置数据源及连接数据库的4大参数

#配置连接数据库的一些信息
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=dbc:mysql://localhost:3306/entryLevel?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

#配置数据源,数据源的全称
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

五、使用代码生成器生成实体类和数据库访问层

public class Book {
	private String name;
	private String author;
}
@Mapper
public interface BookMapper {	
	void insertBook(Book book);
	List<Book> selectBookAll();
	Book selectBookById(Integer id);
	void updateBook(Book book);
	void deleteBookById(Integer id);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- namespace="" 必须和接口的名称相同 -->
<mapper namespace="com.company.entryLevel.mapper.BookMapper">
	<insert id="insertBook" parameterType="com.example.demo01.book.bean.Book">
		insert into book(name, author)values(#{name},#{author})
	</insert>

	<delete id="deleteBookById"> 
		delete from book where id = #{id} 
	</delete>
</mapper>

六、创建Service和Controller

//这是Service接口,实现类在次不写;
public interface BookService {
	// 新增书籍
	int addBook(Book book);	
	// 查询所有书籍
	public List<Book> findBookAll();
	// 通过ID查询书籍
	public Book findBookById(Integer id);
	//通过ID删除书籍信息
	public int deleteBookById(Integer id);
	//修改书籍信息
	public int updateBook(Book book);
}
@RestController
public class BookController {
	@GetMapping("/bookOps")
	public void bookOps() {
		Book bl = new Book();
		bl.setName("西厢记");
		bl.setAuthor("王实甫");
		int i = bookService.addBook(bl);
		System.out.println("addBook>>" + i);

		List<Book> allBooks = bookService.findBookAll();
		System.out.println("getAllBooks>>" + allBooks);
	}
}

七、配置pom.xml

在Maven 工程中,XML 配置文件建议写在 resources 目录下,但是上文的 Mapper.xml 文件写在Mapper包下,Maven 项目在运行时会忽略Mapper包下的 XML 文件,因此需要在 pom .xml 文件中重新指明资源文件位置,配置如下

	<build>
		<!-- 重新指明资源文件的位置 -->
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
			</resource>
		</resources>
	</build>

八、访问结果

在这里插入图片描述在这里插入图片描述

SpringBoot整合持久层技术之搭建并整合Spring Data JPA项目 SpringBoot整合持久层技术进行一个项目的搭建,做一个练手,以前搞过但是都淡忘了,特意来总结一下。今天是JPA,后面陆续搭建MyBatis、JdbcTemplate等持久层技术,供大家相互学习。 立即下载

相关推荐

DDR3性能优化实战:如何用Xilinx MIG控制器实现800MHz稳定读写(7系列FPGA版)

本文深入探讨了在Xilinx 7系列FPGA上使用MIG控制器实现DDR3存储器800MHz稳定高速读写的实战优化技巧。文章聚焦于高级时序调优、Bank Machine调度策略、用户接口设计优化以及利用ILA进行信号完整性调试,旨在帮助工程师突破性能瓶颈,实现接近理论峰值的稳定带宽,并为进一步冲刺更高频率提供进阶调参指南。

seed的博客 775

Spring框架----Spring框架的基本概念

1.spring 是什么 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IOC(Inverse Of Control: 控制反转)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多 著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架。 mybatis是持久层框架,spr

Java硬件工程师的博客 2239

Cadence Allegro 17.4学习记录开始00

Cadence Allegro 有三个版本,16.6,17.2,17.4。现在主要学习最新的版本17.4.原理图设计:OrCADPCB设计:Allegro主要用到的就下面三个图片软件:PCB Editor 17.4 是用来画PCB和元器件封装的;Padstack Editor 17.4 是用来画元器件焊盘的;Capture CIS 17.4 是用来画原理图和原理图库的。其实Cadence还有很多功能,现在计划先学习以上内容,后面熟悉了这个软件,还可以继续学习放仿真等功能。

qq_31444421的博客 7441

SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作

一、JAP框架简介 JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范。主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。 二、与SpringBoot2.0整合 1、核心依赖 <...

bianyun7870的博客 241

R链式中介:如何一次性生成4个变量所有可能的链式中介结果?(含结果解读与粗略作图)#bruceR#ggplot2

一次性生成4个变量所能生成的24种链式中介并作图

weixin_64183017的博客 3236

CCS8.1 导入CCS3.3工程方法

    CCS3.3作为开发人员使用最广开发工具,研究人员手上存在不少该版本的建立的程序版本,然而随着TI公司推出高级版本的CCS平台,在新的平台上集成了更加丰富的功能和优点。利用新版本的平台在开发和编译旧版本工程上可以节省大量时间和精力。在使用新版本开发3.3版本工程时,首要解决的就是加载3.3的工程文件,现将加载过程记录如下: 第一步:Project-&gt;Import Legacy CC...

1万+

Springboot与持久层框架

整体架构图。

weixin_53227829的博客 578

Matlab Copula函数实战:从金融风控到数据建模的5个应用场景

本文深入探讨了Matlab Copula函数在金融风控与数据建模中的五大实战应用场景,包括投资组合风险价值计算、信用违约相关性建模、跨市场套利策略优化等。通过具体代码示例和数据分析,展示了Copula模型在捕捉复杂依赖关系方面的优势,为金融风险管理和量化分析提供实用工具。

weixin_29090677的博客 425

Redis——SpringBoot整合、持久化、集群(主从、哨兵、分片)

1.2 自定义RedisTemplate 1.2.1 传递对象的两种方式 1.pojo序列化——jdk默认的序列化 2.手动转json 1.2.2 配置序列化方式 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。RDB持久化在四种情况下会执行: (1

m0_63544124的博客 1425

USB2.0信号完整性测试之眼图

名称线缆颜色引脚描述红色绿色白色GND黑色。

qq_53766840的博客 3285

PyTorch实战(21)——扩散模型(Diffusion Model)

扩散模型通过简单的噪声扩散过程,就能创造出高质量的超现实图像。在本节中,我们首先学习了扩散如何用于图像生成,了解了扩散模型的内部运作机制。随后基于动漫图像数据集,使用 PyTorch 和 Hugging Face 框架训练和运行自定义扩散模型,生成逼真动漫图像。

盼小辉丶的博客 3349

如何在Spring Boot中整合持久层框架

在现代软件开发中,数据持久化是一个核心需求。Spring Boot作为一个流行的Java基础框架,提供了一个非常便捷的环境来整合各种持久层框架,如JPA(Java Persistence API)、Hibernate、MyBatis等。本文将指导你如何在Spring Boot项目中整合持久层框架,以实现数据的高效管理和访问。

zzzzltai的博客 618

MongoDB分布式事务实现:两阶段提交、日志复制与冲突解决

MongoDB分布式事务机制解析 本文深入剖析了MongoDB 4.0+版本的分布式事务实现原理,重点分析了其在跨文档/跨集合/跨分片场景下的数据一致性解决方案。核心内容包括: 底层机制:采用改进的两阶段提交协议,通过oplog日志复制实现无中心协调器的事务管理,结合WiredTiger存储引擎和锁机制保障ACID特性。 创新设计:将传统2PC的中心协调功能分散到Primary节点,利用oplog作为事务状态记录,实现自动故障恢复和60秒超时回滚机制。 性能优化:针对大事务、写冲突等常见问题,提出拆分微事务

数据知道的博客 1261

如何在SpringBoot中整合持久层框架(Mabatis、Mabatis-Plus、JPA等

FooMapper@Service@Autowired@Primary通过上述步骤,可以在Spring Boot项目中整合JPA、Hibernate和MyBatis等持久层框架,实现高效的数据访问和操作。这些整合不仅提高了开发效率,还增强了项目的可维护性和扩展性。在实际开发中,根据项目需求选择合适的持久层框架,并根据上述指南进行配置和编码,可以有效地实现数据持久化的需求。

weixin_45424996的博客 1091

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring boot整合持久层框架Mybatis

spring boot整合mybatis持久层框架,采用注解的方式,自动扫描mapper接口,与mapper xml文件,实现更方便,更简洁的 整合方式 技术:Java1.8 maven spring boot mybatis 框架

天涯共明月的博客 952

深度学习工具包 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")

如何在SpringBoot中整合持久层框架(Mabatis、Mabatis-Plus、JPA等)

在 Spring Boot 中整合持久层框架是开发中最常见的需求之一,Spring Boot 对主流持久层框架(MyBatis、MyBatis-Plus、JPA)提供了自动化配置支持,整合过程简洁高效。

chenwtt12的博客 886

WINCC7.3破解文件

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

如何在Spring Boot中整合持久层框架(MyBatis、MyBatis-Plus、JPA等)

MyBatis:灵活且高效的 SQL 映射工具,适用于复杂的 SQL 操作。MyBatis-Plus:在 MyBatis 基础上提供增强功能,简化了 CRUD 操作。JPA:基于 ORM 的数据访问方案,适合标准化的数据操作。每种框架都有其适用场景,开发者可以根据项目的具体需求选择合适的框架。Spring Boot 为这些框架的整合提供了极大的便利,使得我们能够快速搭建高效的持久层系统。希望本文能够帮助你更好地理解和使用Spring Boot中的持久层框架!

2301_78782049的博客 1336

Spring系列之Spring boot整合持久层框架Mybatis

前言 本文主要分析Spring boot 整合持久层框架Mybatis,大致概括了其过程,希望对大家有帮助。 环境 Java1.8 maven spring boot 2.0.8.RELEASE mysql 添加依赖 第一步:添加spring boot和mybatis的依赖,可以根据实际情况进行修改版本 spring boot相关依赖 <parent> <groupId>org.springframework.boot</groupId> <artifac

Melodrammaaaaa的博客 447

SpringBoot应用开发:快速搭建项目与整合持久层框架

通过以上步骤,我们详细介绍了如何快速搭建SpringBoot项目,并分别展示了如何在SpringBoot中整合MyBatis、MyBatis-Plus和JPA三种持久层框架。每种框架都有其特点和优势,可以根据项目需求和团队熟悉度进行选择。掌握这些技能,可以帮助我们更高效地进行SpringBoot应用开发。

2301_82039941的博客 1058

mybatis依赖_Spring boot整合持久层框架Mybatis

前言本文主要分析Spring boot 整合持久层框架Mybatis,大致概括了其过程,希望对大家有帮助。环境Java1.8mavenspring boot 2.0.8.RELEASEmysql添加依赖第一步:添加spring boot和mybatis的依赖,可以根据实际情况进行修改版本spring boot相关依赖 org.springframework.boot spring-bo...

weixin_39875675的博客 202

Springboot整合持久层框架

Springboot在数据层涉及到的技术主要有数据库、持久层框架、数据源三个,三个是不同知识点,千万不能弄混了;数据库可以选用mysql、clickhouse等持久层框架可以选择用mybatis、jdbcTemplate等数据源选择用druid、c3p0等这篇文章主要介绍spring boot如何整合数据源。springboot中数据库选择和持久层框架选择使用参考以下文章。

程序员一博 1060

SpringBoot中整合持久层框架

通过以上步骤,你可以在Spring Boot应用中整合MyBatis、MyBatis-Plus或Spring Data JPA,构建强大的数据访问层。:在Service层中注入Mapper接口,调用其方法进行数据库操作。:定义与数据库表对应的实体类,使用注解标注字段与数据库列的映射关系。:在Service层中调用Mapper接口的方法进行数据库操作。:定义实体类,使用JPA注解标注实体与数据库表的映射关系。:与MyBatis相同,配置数据库连接信息。文件中添加MyBatis-Plus的依赖。

L3696的博客 506
上一篇: SpringBoot整合SpringMVC之拦截器
下一篇: 集群/分布式/微服务/SOA是什么?
Xxacker的Latitude
博客等级 码龄9年 64粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值