Code Generate V1.0 代码生成器

实体代码生成工具(EntityCodeGenerate)使用教程 前言:     在交流的过程中发现了一种可以自动生成实体的工具,在自己修改完自己的数据库之后尝试使用了一番,可以使用,但是了解的不是太清楚,供大家参考。 What ECG     VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于OO、AD 阅读详情

Code Generate V1.0 代码生成器

根据配置的模板,根据建表语句,生成Code。

例如java代码、vue代码、jsp代码以及html代码等等,均可根据自己的代码写作习惯进行配置。

缺点:配置的模板,需要在工程里面写死,不够灵活。

页面

Java

包括常用 Controller、Service、Mapper、Entity;

Vue

以Element-UI代码为例,表格、增加、删除、修改;

themyleaf

基于Layui 表格、增加、删除、修改;

Jsp

基于Layui 表格、增加、删除、修改;

测试样例

建表语句


CREATE TABLE `course`
(
    `id`          int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `course_no`   int(11) DEFAULT NULL COMMENT '课程编号',
    `course_name` varchar(255) DEFAULT NULL COMMENT '课程名称',
    `create_time` datetime     DEFAULT NULL COMMENT '创建时间',
    `creator`     varchar(255) DEFAULT NULL COMMENT '创建人',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

测试

以生成Java实体类为例

package ${packageName}.entity;

import java.util.Date;

import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;

import java.io.Serializable;

/**
* (${className})表实体类
*
* @author ${author}
* @since ${date}
*/
@Data
public class ${className} extends Model<${className}> {
    <#list fieldList as field>
        /**
        * ${field.comment}
        */
        private ${field.type} ${field.name};
    </#list>
}

Result

package com.java.entity;

import java.util.Date;

import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;

import java.io.Serializable;

/**
* (Course)表实体类
*
* @author HelloWorld
* @since 2023-03-14 14:38:05
*/
@Data
public class Course extends Model<Course> {
        /**
        * 主键ID
        */
        private Integer id;
        /**
        * 课程编号
        */
        private Integer courseNo;
        /**
        * 课程名称
        */
        private String courseName;
        /**
        * 创建时间
        */
        private Date createTime;
        /**
        * 创建人
        */
        private String creator;
}

Code

依赖

只列出关键依赖

  <!--freemarker依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

TemplateService.java


@Service
public class TemplateService {

    @Autowired
    private ResourceLoader resourceLoader;

    /**
     * 统一 返回代码段
     *
     * @param tem 模板实体
     * @return
     * @throws IOException
     */
    public String commonReturnCode(TemplateEntity tem) throws IOException {
        //template:resource目录下的ftl文件放置目录
        SpringTemplateLoader templateLoader = new SpringTemplateLoader(resourceLoader, "classpath:templates");
        // 创建配置实例
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
        // 设置编码
        configuration.setDefaultEncoding(StandardCharsets.UTF_8.name());
        configuration.setTemplateLoader(templateLoader);
        try {
            // 获取模板
            Template template = configuration.getTemplate(tem.getTemplatePath()+tem.getTemplateName());
            StringWriter writer = new StringWriter();
            template.process(tem.getParams(), writer);
            return writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

GenerateService.java

@Service
public class GenerateService {

    @Resource
    private TemplateService templateService;


    /**
     * 生成java代码
     *
     * @param typeList  需要的类型 例如 1:entity 2:mapper 等等
     * @return
     */
    public  Result generateJavaCode(String sql ,String author,String packageName, List<Integer> typeList) {
        // 接收结果
        Map<String, String> result = new HashMap<>();

        POJOmaker pojOmaker = ResolveSqlUtil.resolve(sql,"","",packageName,author);
        Map<String, Object> params = new HashMap<>();
        // 作者名
        params.put("author",author);
        // 类名
        params.put("className",pojOmaker.getClassName());
        // 字段集
        params.put("fieldList",pojOmaker.getFieldList());
        // 包名
        params.put("packageName",pojOmaker.getPackageName());
        // 创建时间
        params.put("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        

        typeList.forEach(type -> {
            // 实体类
            if (type == ENTITY_TYPE) {
                String code = "";
                try {
                     code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"Entity.java.ftl"));
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                result.put("entity",code);
            }
            // Mapper 层
            if (type == MAPPER_TYPE) {
                String code = "";
                try {
                    code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"Mapper.java.ftl"));
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                result.put("mapper",code);
            }

            // service层
            if (type == SERVICE_TYPE) {
                String code = "";
                try {
                    code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"Service.java.ftl"));
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                result.put("service",code);
            }
            // serviceImpl 实现
            if (type == SERVICE_IMPL_TYPE) {
                String code = "";
                try {
                    code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"ServiceImpl.java.ftl"));
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                result.put("serviceImpl",code);
            }
            // controller
            if (type == CONTROLLER_TYPE) {
                String code = "";
                try {
                    code = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JAVA,"Controller.java.ftl"));
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                result.put("controller",code);
            }
        });
        return Result.success("success",result);
    }

    /**
     * 生成vue 代码
     * @return
     */
    public  Result generateVueCode(String sql){
        POJOmaker pojOmaker = ResolveSqlUtil.resolve(sql,"","","","");
        // 接收结果
        Map<String, String> result = new HashMap<>();
        // 参数
        Map<String, Object> params = new HashMap<>();
        // 字段
        params.put("fieldList",pojOmaker.getFieldList());
        // 类名
        params.put("className",pojOmaker.getClassName());
        // 生成表格
        String vue = "";
        try {
            vue = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_VUE,"Table.vue.ftl"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        result.put("vue",vue);

        // 生成弹窗
        String dialog = "";
        try {
            dialog = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_VUE,"Dialog.vue.ftl"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        result.put("dialog",dialog);
        return Result.success("success",result);
    }


    /**
     * 生成JSP代码
     * @return
     */
    public  Result generateJspCode(String sql,String author){
        POJOmaker pojOmaker = ResolveSqlUtil.resolve(sql,"","","","");
        // 接收结果
        Map<String, String> result = new HashMap<>();
        // 参数
        Map<String, Object> params = new HashMap<>();
        // 字段
        params.put("fieldList",pojOmaker.getFieldList());
        // 类名
        params.put("className",pojOmaker.getClassName());
        // 作者名
        params.put("author",author);
        // 创建时间
        params.put("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        // 生成表格
        String html = "";
        try {
            html = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JSP,"index.jsp.ftl"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        result.put("jsp",html);

        // 生成弹窗
        String js = "";
        try {
            js = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_JSP,"index.js.ftl"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        result.put("js",js);
        return Result.success("success",result);
    }


    /**
     * 生成ThemyLeaf 代码
     * @return
     */
    public  Result generateThemyLeafCode(String sql){
        POJOmaker pojOmaker = ResolveSqlUtil.resolve(sql,"","","","");
        // 接收结果
        Map<String, String> result = new HashMap<>();
        // 参数
        Map<String, Object> params = new HashMap<>();
        // 字段
        params.put("fieldList",pojOmaker.getFieldList());
        // 类名
        params.put("className",pojOmaker.getClassName());
        // 生成表格
        String html = "";
        try {
            html = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_THEMYLEAF,"index.html.ftl"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        result.put("html",html);

        // 生成弹窗
        String js = "";
        try {
            js = templateService.commonReturnCode(new TemplateEntity(params,TEMPLATE_THEMYLEAF,"index.js.ftl"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        result.put("js",js);
        return Result.success("success",result);
    }



    /**
     * mapper 在系统内部
     */
    public void generateMapper() {
        Configuration configuration = new Configuration(new Version("2.3.3"));
        configuration.setDefaultEncoding("utf-8");
        String absolutePath = System.getProperty("user.dir") + "\\src\\main\\resources\\templates";
        try {
            // 加载.ftl配置文件所在路径
            configuration.setDirectoryForTemplateLoading(new File(absolutePath));
            // 放模板变量的值
            Map<String, Object> params = new HashMap<>();
            params.put("package", "io.demo.generator");
            params.put("mapper", "dao");
            params.put("author", "xxx");
            params.put("date", "2022-06-03");
            params.put("comments", "freemarker模板");
            params.put("className", "GenerateFile");
            params.put("mapperSuffix", "Mapper");
            //给文件赋值
            Template template = configuration.getTemplate("Mapper.java.ftl");
            // 文件输出路径
            FileOutputStream file = new FileOutputStream("C:\\Users\\最可爱的WXQ\\Desktop\\文件资源\\GenerateFileMapper.java");
            OutputStreamWriter out = new OutputStreamWriter(file, "utf-8");
            template.process(params, out);
            out.close();
        } catch (IOException | TemplateException exception) {
            exception.printStackTrace();
        }
    }
}

GenerateController.java

/**
 * Code 接口
 */
@RestController
@RequestMapping("code")
public class GenerateController {


    @Resource
    private GenerateService generateService;

    /**
     * 生成java代码
     *
     * @return
     */
    @PostMapping("/generateJavaCode")
    public Result generateJava(@RequestBody BaseInfo baseInfo) {
        return generateService.generateJavaCode(baseInfo.getSql(), baseInfo.getAuthor(), baseInfo.getPackageName(), baseInfo.getType());
    }


    /**
     * 生成Vue Code
     *
     * @return
     */
    @PostMapping("/generateVueCode")
    public Result generateVue(@RequestBody BaseInfo baseInfo) {
        return generateService.generateVueCode(baseInfo.getSql());
    }

    /**
     * 生成ThemyLeaf Code
     *
     * @return
     */
    @PostMapping("/generateThemyLeafCode")
    public Result generateThemyLeaf(@RequestBody BaseInfo baseInfo) {
        return generateService.generateThemyLeafCode(baseInfo.getSql());
    }

    /**
     * 生成 JSP Code
     *
     * @return
     */
    @PostMapping("/generateJspCode")
    public Result generateJsp(@RequestBody BaseInfo baseInfo) {
        return generateService.generateJspCode(baseInfo.getSql(),baseInfo.getAuthor());
    }
}

前端的代码,只需要调用接口即可。

Codex与Claude Code本质区别:代码生成器vs编程智能体 在AI编程工具选型中,'代码生成'与'智能体编程'是两个根本不同的技术范式。前者基于确定性补全,强调语法合规与批量产出;后者依赖上下文感知与多步推理,聚焦工程现场的动态决策。Codex作为专用代码大模型,以GitHub语料训练,适配CLI流水线式开发;Claude Code则构建轻量智能体运行时,需项目快照、API集成与安全令牌协同。理解二者在API Key管理逻辑、CLI架构设计及上下文依赖程度上的差异,是避免配置失效、调试失焦与生产事故的关键。本文深入对比其原理、安全机制与落地工作流,助开发者建立精准的 阅读详情

相关推荐

CodeGenerater代码生成器

CodeGenerater代码生成器,支持java,.net及各种可以使用模板定制化得开发需求,解放效率,将关注度聚焦到业务功能实现上。可定制模板,以及保存历史生成数据,不用重复录入。

好像很厉害的生成器!一秒钟搞定一个项目

Code-Generate 代码生成器 简介 ???? Code-Generate是一个基于原生Mysql & SpringBoot & Mybatis 的代码生成器,建表之后即可完全解放双手,1秒钟构建CRUD接口以及漂亮的LayUi前端界面,同时支持在不改动任何老代码的情况下拓展新的模板,适合: 规律性定制化开发解放劳动力,一键完成固有代码原生mybatis.xml以及Sprin...

Kerwin的博客 956

codegenerate-3.6.1

codegenerate-3.6.1.jar的源码,下载了最新jd-gui工具反编译的。jeecg框架是最新的3.7,最近做二次开发需要修改自动生成代码。做jeecg二次开发的可以相互探讨交流

JAVA学习之使用code中的Generate自动生成数据的set和get方法

举例说明:首先新建一个类,然后定义两个私有成员数据 把鼠标光标放到{}内,打开工具栏的code,选择Generate 在弹出框中选择Getter and Setter 然后弹出框如下,按住control键同时选择两个变量,点击???? 即自动生成了这两个变量的set和get方法 ...

weixin_37879993的博客 2951

codegenerate-1.0.4.jar

codegenerate-1.0.4.jar

codeGenerate:代码自动生成jar包源码-源码包

codeGenerate 代码自动生成jar包源码###包含的方法#### CreateFile(tableName,createUser,packageUrl,前缀)tableName为表名,createUser为创建者,packageUrl为创建根目录(一般为com),前缀为主要关键字如输入wy则生成表插入时主键为wyXXXX000001 #### CreateController(表名,类名,列表,批注,地图,pk)#### CreateEntity(类名,列表,批注,地图)#### CreateIService(类名,列表,批注, map,pk)#### CreateService(className,list,批注,map,pk)#### CreateIDao(className,list,批注,map,pk)#### CreateSqlMapper(tableName,clas

解放双手,一键生成CRUD代码——Code-Generate代码生成器

解放双手,一键生成CRUD代码——Code-Generate代码生成器 项目介绍 在软件开发过程中,CRUD(创建、读取、更新、删除)操作是最基础也是最频繁的任务之一。为了提高开发效率,减少重复劳动,Code-Generate应运而生。这是一个基于原生Mysql、SpringBoot和Mybatis的代码生成器,旨在帮助开发者快速生成CRUD接口及前端界面,极大地简化了开发流程。 Code-Gen...

gitblog_00083的博客 728

HBuilderx连接微信开发者工具

系列文章目录 文章目录系列文章目录前言一、环境1.HBuilerx 工具2.微信开发者工具二、关联微信开发者工具1.HBuilderx新建项目2.关联微信开发者工具3.运行微信小程序出现异常解决方法3.最终效果总结 前言 使用HBuilderx工具关联微信开发者工具,进行小程序开发 提示:以下是本篇文章正文内容,下面案例可供参考 一、环境 1.HBuilerx 工具 HBuilderx 2.微信开发者工具 微信开发者工具 二、关联微信开发者工具 1.HBuilderx新建项目 2.关联微信开发者工具

拥有必珍惜 3077

Code Generate V2.0 代码生成器

代码生成器、可自定义配置

Java_Wxlin的博客 482

【上海大学计算机组成原理实验报告】五、机器语言程序实验

机器语言程序实验//理解计算机执行程序的实际过程//学习编制机器语言简单程序的方法//将R1中的数值左移n次送OUT,其中n是R2中的数值。(指令码从10开始)//完成R3=R0×R1,结果送OUT。(指令码从30开始)//建立“中文汇编指令”需要哪些条件?//上海大学计算机组成原理实验报告

HackerKevon的博客 2190

SD-WAN组网案例——数据中心

SD-WAN组网案例——数据中心

2301_78457663的博客 706

SpringBoot代码生成器

Code-Generate 代码生成器 简介 ???? 一个基于原生Mysql & SpringBoot & Mybatis 的代码生成器,建表之后即可完全解放双手,适合: 规律性定制化开发 解决双手,一键完成固有代码 原生mybatis.xml 文件,所有细节尽在掌握 支持拦截接口,允许开发者继承接口实现自定义文件内容 使用说明 该项...

Kerwin的博客 1838

Nature、science、cell旗下刊物

Nature\science\cell子刊说明

计算机视觉 5607

k8s:code-generator代码生成器的使用

k8s:code-generator代码生成器的使用

Jacson__的博客 2810

C# ScottPlot 5.0 WinForms 十字光标示例:轻松实现动态数值显示,你学会了吗?

ScottPlot是一个免费、开源的.NET交互式绘图库,能够轻松地实现大型数据集的交互式显示。它支持多种图表类型,如折线图、柱状图、饼图、散点图等。ScottPlot的性能非常出色,即使是处理千万级别的数据也游刃有余。

java专栏 2220

关于 ABAP OPEN SQL 的动态 WHERE 条件和 Dynamic Selections

ABAP动态查询技术解析 本文介绍了ABAP中实现灵活数据库查询的动态选择技术,通过FREE_SELECTIONS函数组实现用户自定义查询条件。核心内容包括: 传统固定WHERE条件的局限性,无法满足业务多变需求 Dynamic Selections机制的工作原理,使用FREE_SELECTIONS_INIT初始化、FREE_SELECTIONS_DIALOG交互 完整Demo程序演示如何构建通用表数据浏览器: 用户输入表名后校验权限 调用动态选择函数生成条件 动态拼接WHERE子句执行查询 使用CL_SA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 677

使用code-generator代码生成器没有生成informers,listers的处理办法

问题描述: 创建controller参考:k8s自定义controller 使用code-generator代码生成器没有生成Informer,lister的处理办法 解决方案: 这里我使用的是 go mod init创建一个go.mod文件, 使用 go mod tidy 增加缺少的module,删除没有用的module 然后使用 go mod vendor 将依赖复制到ventor中。 下面请看具体的操作: [root@ecs-431f-0001 crd_controller]# go mod

Azj12345的博客 2276

51智能小车(双轮)

前几天接了个小单子,是一个基于51单品机的作品,发现自己对小车的认识还是不太🆗。也算是完成了任了的;欢迎各位小伙伴来多多交流,大家一起进步。最后有需要单片机课程设计的小伙伴滴滴我哦(有偿)。企鹅:2397746994。

qq_56992543的博客 2348

深入解析 JSON for Modern C++ 的 Natvis 调试视图生成器 generate_natvis.py

> **导读**:`nlohmann/json` 仓库内置了为 MSVC 调试器生成可视化视图的自动化工具 `generate_natvis.py`,它通过一份 Jinja2 模板,为所有 ABI 命名空间组合批量产出 `basic_json` 的类型可视化规则,最终交付仓库根目录的 [nlohmann_json.natvis](https://link.gitcode.com/i/68f5599

gitblog_00241的博客 391

[毕设项目-大模型微调]现代文翻译文言文【基于LLaMA3.1-8B微调】

教你基于LLaMA3.1-8B微调如何做到现代文翻译文言文

逐梦苍穹的博客 2297

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

t3code:面向TypeScript项目的增量代码生成器设计与实践

代码生成技术是提升软件工程效率的重要手段,它基于预定义模板与参数契约,将重复性编码过程自动化。其核心原理在于利用模板引擎(如EJS)渲染结构化代码,并通过类型校验(如Zod)保证输入合法性,从而让生成结果具备类型安全与可维护性。在实际工程中,代码生成器不仅创建新文件,还需要处理路由注册、导出索引等增量联动,避免手工维护的遗漏。这一模式尤其适用于TypeScript项目中的API模块、React Hook、数据模型等高频重复场景。t3code正是一款面向TypeScript的增量代码生成器,它通过CLI命令、

weixin_29232507的博客 288

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Kubebuilder v0 与 v1 项目差异详解:从 --project-version 到脚手架与依赖库的全面对比

Kubebuilder 1.0 引入了一个全新的 `--project-version` 标志,它接受 `v0` 与 `v1` 两个取值,由此在同一个 CLI 中并存了两种架构截然不同的项目生成方式。本文以 Kubebuilder 官方文档 [docs/kubebuilder_v0_v1_difference.md](https://link.gitcode.com/i/6c2d865a3f8dd

gitblog_00888的博客 1032

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

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

sqlc 版本演进全解析:从 v0.1.0 到 v1.31 的核心能力、命令与工程实践

> 本文以仓库中的 [docs/reference/changelog.md](https://link.gitcode.com/i/33ba5157d358e20a5bae9af35f7f313e) 为骨架,系统梳理 sqlc(Generate type-safe code from SQL)从 2020 年首个版本 v0.1.0 到 v1.31.1 的功能演进脉络。你将掌握 `sqlc vet

gitblog_00510的博客 870

go-swagger v0.29.0 版本解读:go:embed 化模板、枚举 Pointer 方法与生成器稳定性修复

本篇指南基于 [notes/v0.29.0.md](https://link.gitcode.com/i/52365ad6ac4426491aed0b1bc83ea257) 版本发布说明,结合 go-swagger 仓库当前源码,逐项剖析 v0.29.0 的核心技术变更:模板资源从 bindata 迁移到 Go 1.16+ 的 `go:embed`、为字符串枚举生成的 `Pointer()` 便捷

gitblog_00698的博客 286

Terraformer Auth0 导入实战:将 Auth0 租户现有配置一键逆向为 Terraform 代码

Terraformer(Infrastructure to Code)是一个反向 Terraform 的 CLI 工具,能够从已有基础设施自动生成 Terraform 配置文件。本文聚焦该仓库中 Auth0 Provider 的使用方法,围绕 [docs/auth0.md](https://link.gitcode.com/i/73c9dd5c92319c79bdf901b3f54ea281) 展

gitblog_00291的博客 821

go-swagger v0.25.0 版本解析:x-go-type 外部类型增强与代码生成器稳定性改进

本篇文章基于 go-swagger(Swagger 2.0 implementation for go)仓库的 [notes/v0.25.0.md](https://link.gitcode.com/i/2aa52aa9f88ce76c2de73c3d7d1e1d27) 版本发布记录,深入解读 v0.25.0(2020-07-18 发布)带来的核心变化:`x-go-type` 外部类型引用能力的显

gitblog_00022的博客 657
上一篇: 【WebRtc】获取媒体设备信息
下一篇: 【Shell】脚本
程序员小菜鸡QAQ
博客等级 码龄9年 2360粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值