Java框架_Mybatis_day02_CRUD操作

五天SpringCloud计划——DAY1之mybatis-plus的使用 这部分内容比较多,我总结一下要点mybatis-plus处理“更复杂的数据库操作”主要是通过条件构造器来实现的,个人觉得最好用的是,因为其比较全面,包括反射,条件构造,在更新的方法也可以用到它而条件构造器主要是构造where之后的内容,比如我们所讲到的自定义sql,字符串拼接的也是where部分的内容6.Service接口MybatisPlus不仅提供了BaseMapper,还提供了通用的Service接口及默认实现,封装了一些常用的service模板方法。通用接口为IService,默认实现为。 阅读详情

上接:Java框架_Mybatis_day01

目录

四、Mybatis的CRUD操作

4.1 依赖管理

4.2 User 实体类

4.3 UserDao接口(持久化层)

4.4 sqlMapConfig.xml 配置文件

4.5 UserDao.xml映像文件

4.6 log4j.properties 日志配置文件

4.7 TestUserDao 测试类

4.8 项目结构


四、Mybatis的CRUD操作

4.1 依赖管理

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cpz</groupId>
    <artifactId>mybatis_day01_crud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>
        <!-- 日志坐标 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <!--测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>
</project>

4.2 User 实体类

package com.cpz.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private int id;// 主键ID
    private String username;// 用户姓名
    private String sex;// 性别
    private Date birthday;// 生日
    private String address;// 地址

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", sex='" + sex + '\'' +
                ", birthday=" + birthday +
                ", address='" + address + '\'' +
                '}';
    }
}

4.3 UserDao接口(持久化层)

package com.cpz.dao;

import com.cpz.domain.User;

import java.util.List;

public interface UserDao {
    // 查询所有
    public List<User> findAll();

    // 保存
    public void saveUser(User user);

    // 修改
    public void updateUser(User user);

    // 删除
    public void deleteUser(Integer id);

    // 主键查询
    public User findUserById(Integer id);

    // 模糊查询(方案一)
    public List<User> findUserByUserNameLike1(String username);

    // 模糊查询(方案二)
    public List<User> findUserByUserNameLike2(String username);

    // 查询数量
    public int findCount();

}

4.4 sqlMapConfig.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--mybatis的核心配置文件-->
<configuration>
    <!--配置连接数据库的环境-->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql:///test"></property>
                <property name="username" value="root"></property>
                <property name="password" value="1234"></property>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件-->
    <mappers>
        <mapper resource="com/cpz/dao/UserDao.xml"></mapper>
    </mappers>
</configuration>

4.5 UserDao.xml映像文件

<?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">
<!--建立映射:建立Dao中的方法(namespace+id)和数据库sql执行的映射(查询的结果封装到实体中)-->
<mapper namespace="com.cpz.dao.UserDao">
    <!--查询所有
        namespace="com.itheima.dao.UserDao":表示类名的路径
        id="findAll":表示方法名
        resultType="com.itheima.domain.User":结果集的类型封装,封装到User实体中(实体中的属性和数据库表的字段一致)
    -->
    <select id="findAll" resultType="com.cpz.domain.User">
        select * from user
    </select>
    <!-- 保存
        parameterType:参数类型映射
        #{username},#{birthday},#{sex},#{address}:表示OGNL表达式,用对象图导航语言,使用#{}读取User中的属性值
        保存之后,将id查询的值,封装到实体中的id属性中
        selectKey:
            keyProperty="id":封装到id的属性中
            keyColumn="id":查询的列的名称
            resultType="":结果类型,完整写法java.lang.Integer == 使用别名 int(Int)
            order="AFTER":表示在执行insert语句之后执行
    -->
    <insert id="saveUser" parameterType="com.cpz.domain.User">
      <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
          select last_insert_id();
      </selectKey>
        insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address});
    </insert>

    <!--修改-->
    <update id="updateUser" parameterType="com.cpz.domain.User">
        update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
    </update>

    <!--删除
        如果传递的是1个参数,通过类型的方式写入值,所以名称随意命名
    -->
    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </delete>

    <!--主键查询-->
    <select id="findUserById" parameterType="int" resultType="com.cpz.domain.User">
        select * from user where id = #{id}
    </select>

    <!--模糊查询(方案一)-->
    <select id="findUserByUserNameLike1" resultType="com.cpz.domain.User" parameterType="java.lang.String">
        select * from user where username like #{name}
    </select>

    <!--模糊查询(方案二)-->
    <select id="findUserByUserNameLike2" resultType="com.cpz.domain.User" parameterType="java.lang.String">
        select * from user where username like '%${value}%'
    </select>

    <!--查询数量-->
    <select id="findCount" resultType="int">
        select count(*) from user
    </select>

</mapper>

4.6 log4j.properties 日志配置文件

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d://axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

4.7 TestUserDao 测试类

package com.cpz.test;

import com.cpz.dao.UserDao;
import com.cpz.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class TestUserDao {
    InputStream is;
    SqlSession sqlSession;
    UserDao userDao;

    @Before
    public void init() throws IOException {
        // 1:加载sqlMapConfig.xml(配置文件),同时加载UserDao.xml(映射文件)
        is = Resources.getResourceAsStream("sqlMapConfig.xml");
        // 2:创建SqlSessionFactory(1个),相当于DataSource
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 3:创建SqlSession(多个,每个线程都会使用独立的SqlSession),相当于Connection
        sqlSession = sqlSessionFactory.openSession();
        // 4:使用SqlSession获取Dao(底层反射和代理技术完成)
        userDao = sqlSession.getMapper(UserDao.class);
    }

    @After
    public void destroy() throws IOException {
        // 手动提交
        sqlSession.commit();
        // 6:关闭资源
        sqlSession.close();
        is.close();
    }

    // 查询所有
    @Test
    public void findAll() throws IOException {
        List<User> list = userDao.findAll();
        for (User user : list) {
            System.out.println(user);
        }
    }

    // 保存
    @Test
    public void saveUser(){
        User user = new User();
        user.setUsername("哪吒");
        user.setSex("男");
        user.setAddress("钱塘关");
        user.setBirthday(new Date());

        System.out.println(user);
        userDao.saveUser(user);
        System.out.println(user);
    }

    // 修改
    @Test
    public void updateUser(){
        User user = new User();
        user.setId(56);
        user.setUsername("浩克");
        user.setSex("男");
        user.setAddress("美国");
        user.setBirthday(new Date());

        userDao.updateUser(user);
    }

    // 删除
    @Test
    public void deleteUser(){
        userDao.deleteUser(56);
    }

    // 主键查询
    @Test
    public void findUserById(){
        User user = userDao.findUserById(52);
        System.out.println(user);
    }

    // 模糊查询(方案一)
    // 如果: select * from user where username like #{abc},此时%%在条件中完成
    // 此时执行的sql:select * from user where username like ?
    @Test
    public void findUserByUserNameLike1() {
        List<User> list = userDao.findUserByUserNameLike1("%王%");
        for (User user : list) {
            System.out.println(user);
        }
    }

    // 模糊查询(方案二)
    // 如果: select * from user where username like '%${value}%',此时%%在sql中完成
    // 此时执行的sql:select * from user where username like '%王%'
    // ${value}只能写成value,底层源代码固定value
    @Test
    public void findUserByUserNameLike2(){
        List<User> list = userDao.findUserByUserNameLike2("王");
        for (User user : list) {
            System.out.println(user);
        }
    }

    // 查询数量
    @Test
    public void findCount(){
        int count = userDao.findCount();
        System.out.println(count);
    }
}

4.8 项目结构

 

Cadence OrCAD: 层次化设计 Hierarchical Design 详细介绍OrCAD的原理图层次化设计方法。 阅读详情

相关推荐

centos8 安装新版bind9源码

bind一直在更新,使用了比较多的新架构 本文记录新版本的bind怎么安装,以及其依赖库的安装 1. 在https://www.isc.org/download/ 下载最新stable版本bind,本文以bind-9.17.9.tar.xz为例。将软件传到/root目录下。 也可以到https://ftp.isc.org/isc/bind9/ 下载更多历史版本 2. 安装基本的依赖库,像gcc、amake等 3. 需要安装libuv库,但直接用yum时可能安装不全 建议使用源码安装,需要安..

linggang_123的博客 2539

(not found): com.itheima.dao.IUserDao.findAll

后来仔细找了一下,原来在标签中,id的值和dao层方法的名不一致 具体的就是我<select id="findAll"值加多了一个空格 这个错误很低级 不过我也才刚学2个月 也还好 大家引以为戒 ...

zzzong778的博客 640

无需Root!用VirtualXposed+JustTrustMe在安卓高版本上抓包拼多多API数据

本文详细介绍了在安卓高版本设备上无需Root权限即可抓取拼多多API数据的完整方案,通过VirtualXposed与JustTrustMe组合技术,有效绕过SSL Pinning限制。文章涵盖工具准备、环境配置、应用处理及实战分析,特别针对PDD应用的混合通信策略提供了专业解决方案,适合开发者进行竞品分析和数据采集。

weixin_28678151的博客 453

Mapped Statements collection does not contain value for com/itheima/dao/UserDao.findAll

mybatis错误,原因是 参数传的是namespace加方法名。 我写成了com/itheima/dao/UserDao.findAll 写成了路径。不是/而是.

tutou_girl的博客 422

车载以太网SOMEIP入门必看:从服务发现到事件订阅,一次搞懂三种核心通信模式(附报文实例)

本文深入解析车载以太网SOME/IP的三种核心通信模式:服务发现、方法调用和事件订阅,通过真实报文实例和仿真工具演示,帮助开发者快速掌握这一关键技术。文章特别强调服务发现机制的基础作用,并详细介绍了Request/Response与Fire&Forget两种方法调用模式的应用场景,为智能汽车网络通信开发提供实用指南。

weixin_30955617的博客 111

RK3588平台开发系列讲解(DMA篇)DMA engine使用

Linux 内核的 DMA 引擎提供了一组完整的接口,用于申请和释放 DMA 通道、准备 DMA 描述符、启动和控制 DMA 传输,以及同步和管理缓存。通过这些接口,内核能够高效地处理异步的 DMA 传输任务,减少 CPU 的干预,提高数据传输的效率。

内核笔记 1834

ava框架-mybatis框架CRUD操作

1. Mybatis框架的CRUD操作 1.1 实现添加操作 以对用户表进行DRUD操作为例 1.1.1 构建环境 1.1.1.1 添加依赖(pom.xml) &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=...

KeepStruggling的博客 333

MT4/MT5 第三代移动平均线(MetaTrader 指标)

第三代移动平均线(3G-MA)是传统MA指标的升级版本,通过"时滞压缩"算法将信号滞后降至理论极限(λ=2)。该指标在保留平滑性的同时,信号速度比EMA快1.5-2.3倍,适用于MT4/MT5平台。核心参数包括计算周期(默认34)、滞后压缩系数(2-10)和应用价位选择,支持斜率变色功能。安装简单,无需外部依赖,通过多周期共振可提升12-18%胜率。指标代码包含完整的MT4/MT5实现方案,采用双缓冲计算结构,通过相位前移算法抵消群延迟。风险提示:需配合其他技术指标和严格风控(≤2%账户

JanLEE 579

利用mybatis框架实现数据库表的CRUD

利用mybatis框架实现数据库表的CRUD 本文是基于Windows 10系统环境,利用mybatis框架实现数据库表的CRUD Windows 10 IntelliJ 一、构建过程(简单入门) (1) 打开IntelliJ,创建一个新项目 (2) 选择“maven”工程,然后点击“next” (3) 填写公司ID等信息,然后点击“next” (4) 填写项目名称等信息,然后点击“f...

哈工大许政的博客 1万+

【Python计量】linearmodels面板数据回归(一)

我们以伍德里奇《计量经济学导论现代方法》的”第14章高级面板数据方法“的案例14.1为例,使用jtrain中的数据来进行固定效应估计。

mfsdmlove的博客 9277

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 885

MyBatis的CRUD

MyBatis的认识 1.MyBatis 是一个支持普通SQL查询,存储过程( Oracle最后一天)和高级映射的优秀持久层框架。 2.MyBatis 消除了几乎所有的JDBC代码和手工设置参数以及结果集的检索。 3.MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象) 映射成数据库中的记...

June_FlyingFrost的博客 988

ESM2蛋白预训练模型 蛋白质、氨基酸向量表示

参考: https://github.com/facebookresearch/esm https://huggingface.co/facebook/esm2_t33_650M_UR50D https://esmatlas.com/resources?action=fold tokenizer_对输入蛋白会头尾添加cls、eos特殊字符,占两个字符长度 参考:https://github.com/facebookresearch/esm 直接clone下来代码

weixin_42357472的博客 1万+

MyBatis-学习笔记05【05.使用Mybatis完成CRUD】

MyBatis-学习笔记05【05.使用Mybatis完成CRUD】

upward 946

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Mybatis学习(一)基础操作CRUD

前言: 什么是框架?使用框架有什么好处? 框架就是我们软件开发中的一种解决方案,不同的框架对应解决不同的问题。框架封装了很多细节,使开发者可以使用极简的方式去实现功能,大大的提升了开发效率。 现在学习的Mybatis是三层架构(表现层,业务层,持久层)中持久层相关的。 对于持久层来说,有以下几种解决方案: JDBC技术:Connection,Statement,ResultSet Spring的...

Harbor 209

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MyBatis(三)CRUD操作

mybatis的CRUD操作。增删改查,以及返回增加的id。

刘伟佳的博客 287

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

MyBatis注解CRUD详细操作

加油,新时代打工人! 更多MyBatis详细介绍 请参考: MyBatis是什么? MyBatis和Hibernate的区别 MyBatis入门和环境搭建 MyBatis两种类型别名 MyBatis的详细CURD基本操作 MyBatis多表关系操作 前期需要把环境配置完成可参考上面文章 MyBatis注解CRUD详细操作jdbcConfig.properties配置文件SqlMapConfig配置文件实体类user接口类IUserDaoCRUD测试类MyBatis常用注解 jdbcConfig.pr.

欢迎你的到来,我们一起加油!!! 483

Mybatis使用xml配置下,实现的CRUD操作

Dao中IUserDao中的代码 package com.itheima.dao; import com.itheima.domain.QueryVo; import com.itheima.domain.User; import java.util.List; public interface IUserDao { /** * 查询所有 * @return ...

weixin_44450604的博客 284

学习日志day53(2021-09-23)(1、MyBatis框架 2、完整的CRUD操作)

学习内容:学习MyBatis框架(Day53) 1、MyBatis框架 2、完整的CRUD操作 1、MyBatis框架 (1)MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,主要用来封装JDBC操作、利用反射实现实体类与SQL语句之间的相互转换。需要的依赖:mybatis.jar mysql-connector-java.jar 。 ORM:对象关系映射,常见的ORM框架有hibernate、mybatis。 通过SqlSessionFactory来创建SqlSession对

huzige_的博客 195

02-框架--Mybatis

Mybatis是持久层框架JDBC缺点:1、操作的复杂度偏高2、数据的查询结果集处理繁琐3、sql硬编码,sql和java代码混合写了Mybatis:1、需要配置文件2、直接把查询结果集的数据映射到实体类属性中3、把所有的sql统一的在文件中进行编写映射文件xxx.xml。

cfy264269的博客 235

mybatis注解——CRUD

目录1.Mybatis注解配置1.1注解配置SqlMapperConfig.xml内容详细解读2.Mybatis注解_CRUD3.Mybatis注解_多对一或一对一4.Mybatis注解_一对多 1.Mybatis注解配置 注解方法使我们的开发变得简单,下面是步骤 1.1注解配置 注意: 不用再配置Resource下的每一个dao中的配置文件为xxx.xml 在maven中导入jar包 &lt...

XiaoCoder的博客 571

JAVA WEB DAY14_ MyBatis(day02)

文章目录MyBatis01-根据用户 ID 查询用户-[★★★★]02-配置元素properties基本使用-[★★★★]03-配置元素 typeAliases 基本使用-[★★★★]04-配置元素 mappers 基本使用-[★★★★]使用 Mybatis 实现 CRUD 操作-[★★★★★]05-方式1- Mapper 接口代理的开发方式05-01-根据用户名称模糊查询用户-[★★★★★]05-02-新增用户-[★★★★★]05-03-获取新增记录的主键值-[★★★★★]05-04-根据用户 id 修改

NTT0101的博客 331

MyBatis02

MyBatis(第2天)-基本使用 项目结构 mybatis_day02_01_xml用户的增删改查操作 mybatis_day02_02_old传统DAO实现类方式 mybatis_day02_03_anno注解方式 mybatis_day02_04_dynamic_sql动态SQL mybatis框架的学习,不要纠结,不要老想wsm,我们的目标使用mybatis,等我们框架...

Bulid_Evolto的博客 716

mybatis的CRUD

《MyBatis的CRUD》 带着目标去学习,效果很不一样 学习目标 掌握sqlMapConfig.xml中常用标签 掌握mybatis框架在DAO层的开发 能够完成单表的CRUD操作 掌握mybatis框架的输入输出映射 回顾动态代理 代理模式的组成 作用:对真实角色功能的增强,真实角色和代理角色都是抽象角色的子类 抽象角色:定义了要实现的功能,通常使用接口。这个案例中就是UserMapper接口 真实角色:可以不存在的,这里没有 代理角色:也实现了接口中方法,使用动态代理来实现UserMapper

du664754270的博客 283

使用Mybatis完成CRUD

使用Mybatis完成CRUD 1 回顾Mybatis的环境搭建-实现查询所有功能 1.打开IDEA工具如图所示的界面,并点击Create New Project。 2.选择Maven工程和JDK的版本,并点击Next。如图所示: 3.填写项目名称和保存的地址,并点击Finish。如图所示: 3.填写项目名称和保存的地址,并点击Finish。如图所示: 4.导入相应的依赖的jar包的代码如下: <?xml version="1.0" encoding="UTF-8"?> <project

weixin_40055163的博客 332

MyBatis_Day02

文章目录MyBatis_Day021.mybatis的crud(基于代理)工程搭建及crud测试模糊查询占位符分析2.mybatis中的配置(主配置文件啊SqlMapConfig)properties标签typeAliases标签mappers标签 MyBatis_Day02 1.mybatis的crud(基于代理) 工程搭建及crud测试 SqlMapConfig.xml 配置事务 配置数据...

weixin_43912805的博客 172
上一篇: Java框架_Mybatis_day01_概述/入门案例
下一篇: Java框架_Mybatis_day03_参数的深入了解
chipeize
博客等级 码龄10年 23粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值