dto.java.ftl 和 vo.java.ftl 两个核心数据传输对象模板文件1

快速生成DTO 通过导入Excel模板快速生成DTO,简单易用,下载即可打开使用,加快开发效率 立即下载

以下是符合 企业级 RESTful API 设计规范、遵循 OpenAPI 3.0 标准 的两个核心数据传输对象模板文件:

  • dto.java.ftl(Data Transfer Object,用于请求入参)
  • vo.java.ftl(View Object,用于响应出参)

这两个模板均包含完整的 OpenAPI 3.0 注解(使用 SpringDoc),并集成 JSR-303 参数校验,附有详尽的中文注释,可直接用于 MyBatis-Plus Generator 或自定义代码生成器。


✅ 1. dto.java.ftl(请求 DTO 模板)

package ${package.DTO};

<#-- 导入 OpenAPI 和校验注解 -->
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.*;
import java.io.Serializable;
<#-- 根据字段类型动态导入时间类 -->
<#list table.fields as field>
<#if field.propertyType == "LocalDateTime" || field.propertyType == "LocalDate">
import java.time.${field.propertyType};
</#if>
</#list>

/**
 * <p>
 * ${table.comment!} 创建/更新请求 DTO
 * </p>
 *
 * <p>
 * 【设计目标】
 * 1. 作为 Controller 层 {@code @RequestBody} 的接收对象
 * 2. 定义 API 请求的契约(字段、校验规则、示例值)
 * 3. 与内部 Entity 解耦,避免暴露数据库结构
 * 4. 集成 JSR-303 参数校验,确保数据合法性
 * </p>
 *
 * <p>
 * 【关键原则】
 * - 仅包含前端需要提交的字段(可少于 Entity)
 * - 字段命名与业务语义一致,不强制与数据库一致
 * - 必须添加 OpenAPI 注解({@code @Schema})生成高质量 API 文档
 * - 必须添加校验注解(如 {@code @NotBlank}、{@code @Email})
 * - 不包含敏感字段(如密码明文、内部状态码等)
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Data
@Accessors(chain = true)
@Schema(description = "${table.comment!} 请求参数")
public class ${entity}DTO implements Serializable {

    private static final long serialVersionUID = 1L;

<#-- 遍历表字段生成属性(排除基类字段) -->
<#list table.fields as field>
<#-- 跳过基类字段(createTime, updateTime, deleted)和主键(DTO 通常不需要传 ID) -->
<#if !(field.name == 'id' || field.name == 'create_time' || field.name == 'update_time' || field.name == 'deleted')>
    /**
     * ${field.comment!}
     */
    @Schema(
        description = "${field.comment!}",
        <#-- 根据字段类型设置示例值 -->
        <#if field.propertyType == "String">
        example = "${field.propertyName}",
        <#elseif field.propertyType == "Integer" || field.propertyType == "Long">
        example = "${field_index + 1}",
        <#elseif field.propertyType == "Boolean">
        example = "true",
        <#elseif field.propertyType == "LocalDateTime">
        example = "2023-01-01T12:00:00",
        <#elseif field.propertyType == "LocalDate">
        example = "2023-01-01",
        </#if>
        requiredMode = Schema.RequiredMode.REQUIRED // 可根据业务调整为 NOT_REQUIRED
    )
    <#-- 添加 JSR-303 校验注解(根据字段类型和业务规则) -->
    <#if field.propertyType == "String">
    @NotBlank(message = "${field.comment!}不能为空")
    @Size(max = 50, message = "${field.comment!}长度不能超过50")
    <#elseif field.propertyType == "Integer" || field.propertyType == "Long">
    @NotNull(message = "${field.comment!}不能为空")
    <#if field.name == "email">
    @Email(message = "邮箱格式不正确")
    </#if>
    <#elseif field.propertyType == "Boolean">
    @NotNull(message = "${field.comment!}不能为空")
    </#if>
    private ${field.propertyType} ${field.propertyName};
</#if>
</#list>

    /**
     * 【扩展建议】以下为常见场景示例(按需取消注释)
     */

    /*
    // 示例:密码字段(需特殊校验)
    @Schema(description = "密码", example = "StrongPass123!")
    @NotBlank(message = "密码不能为空")
    @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d@$!%*?&]{8,}$",
             message = "密码必须包含大小写字母、数字,且长度至少8位")
    private String password;

    // 示例:确认密码(需与 password 一致)
    @Schema(description = "确认密码", example = "StrongPass123!")
    @NotBlank(message = "确认密码不能为空")
    private String confirmPassword;

    // 示例:枚举字段(前端传 code,后端转 Enum)
    @Schema(description = "用户状态:0-禁用,1-启用", allowableValues = {"0", "1"}, example = "1")
    @NotNull(message = "状态不能为空")
    private Integer status;
    */
}

✅ 2. vo.java.ftl(响应 VO 模板)

package ${package.VO};

<#-- 导入 OpenAPI 注解 -->
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
<#-- 根据字段类型动态导入时间类 -->
<#list table.fields as field>
<#if field.propertyType == "LocalDateTime" || field.propertyType == "LocalDate">
import java.time.${field.propertyType};
</#if>
</#list>

/**
 * <p>
 * ${table.comment!} 响应视图对象(VO)
 * </p>
 *
 * <p>
 * 【设计目标】
 * 1. 作为 Controller 层 {@code @ResponseBody} 的返回对象
 * 2. 定义 API 响应的数据结构和语义
 * 3. 与内部 Entity 解耦,隐藏敏感字段和内部逻辑
 * 4. 通过 OpenAPI 注解生成清晰的响应文档
 * </p>
 *
 * <p>
 * 【关键原则】
 * - 仅包含前端需要的字段(可少于 Entity)
 * - 可包含计算字段(如 formattedCreateTime)
 * - **绝不包含敏感信息**(如密码、密钥、内部 ID 等)
 * - 必须添加 OpenAPI 注解({@code @Schema})
 * - 字段命名应面向前端业务,而非数据库
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Data
@Accessors(chain = true)
@Schema(description = "${table.comment!} 响应数据")
public class ${entity}VO implements Serializable {

    private static final long serialVersionUID = 1L;

<#-- 遍历表字段生成属性(包含主键,排除敏感字段) -->
<#list table.fields as field>
<#-- 跳过敏感字段(如 password, salt)和逻辑删除字段 -->
<#if !(field.name == 'password' || field.name == 'salt' || field.name == 'deleted')>
    /**
     * ${field.comment!}
     */
    @Schema(
        description = "${field.comment!}",
        <#-- 设置示例值 -->
        <#if field.propertyType == "String">
        example = "${field.propertyName}Value",
        <#elseif field.propertyType == "Integer" || field.propertyType == "Long">
        example = "${field_index + 1}",
        <#elseif field.propertyType == "Boolean">
        example = "true",
        <#elseif field.propertyType == "LocalDateTime">
        example = "2023-01-01T12:00:00",
        <#elseif field.propertyType == "LocalDate">
        example = "2023-01-01",
        </#if>
        accessMode = Schema.AccessMode.READ_ONLY // VO 字段通常只读
    )
    private ${field.propertyType} ${field.propertyName};
</#if>
</#list>

    /**
     * 【扩展建议】以下为常见场景示例(按需取消注释)
     */

    /*
    // 示例:格式化时间(前端友好显示)
    @Schema(description = "注册时间(格式化字符串)", example = "2023年01月01日 12:00")
    private String formattedCreateTime;

    // 示例:关联对象(避免 N+1 查询,通常通过 Service 组装)
    @Schema(description = "所属部门信息")
    private DepartmentVO department;

    // 示例:状态文本(将 code 转为可读文本)
    @Schema(description = "用户状态文本", example = "启用")
    private String statusText;
    */
}

🔍 关键设计说明与最佳实践

1. DTO 与 VO 的核心区别
维度DTO(请求)VO(响应)
用途接收前端请求参数返回前端响应数据
字段范围通常不含 ID、创建时间等通常包含 ID、状态等
敏感字段绝不包含密码等绝对禁止包含密码、密钥等
校验必须 JSR-303 校验无需校验
OpenAPI 注解requiredMode、exampleaccessMode = READ_ONLY
命名面向操作(如 createUserDTO)面向展示(如 UserDetailVO)
2. OpenAPI 注解最佳实践
  • ✅ @Schema 必加:每个字段都应有描述和示例
  • ✅ requiredMode:明确是否必填(DTO 通常为 REQUIRED)
  • ✅ accessMode = READ_ONLY:VO 字段标记为只读,Swagger UI 会灰显
  • ✅ allowableValues:枚举字段指定可选值
3. 安全红线
  • 🔒 Entity 绝不直接用于 API:避免 password、deleted 等字段泄露
  • 🔒 VO 中显式过滤敏感字段:模板中已排除 password、salt、deleted
  • 🔒 DTO 不接收 ID:创建操作不应由前端传 ID(更新操作可单独设计 UpdateDTO)
4. 扩展性设计
  • 支持 动态导入时间类(仅当字段使用 LocalDateTime 时才导入)
  • 预留 密码、确认密码、枚举转换 等常见场景示例
  • 支持 计算字段(如 formattedCreateTime)

🛠️ 配套使用建议

(1) Controller 层使用示例
@PostMapping
@Operation(summary = "创建用户")
public ApiResponse<UserVO> createUser(@Valid @RequestBody UserCreateDTO dto) {
    User user = userService.create(dto);
    UserVO vo = userMapper.toVO(user); // 使用 MapStruct 转换
    return ApiResponse.success(vo);
}
(2) MapStruct 转换示例(推荐)
@Mapper
public interface UserConvert {
    UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);
    
    UserVO toVO(User entity);
    User toEntity(UserCreateDTO dto);
}
(3) DTO 分类建议
  • UserCreateDTO:创建用户
  • UserUpdateDTO:更新用户(ID 通常从 PathVariable 获取)
  • UserQuery:查询条件(配合 @ParameterObject)

📦 项目结构示例

src/main/java
└── com.example.demo
    ├── dto
    │   ├── user
    │   │   ├── UserCreateDTO.java
    │   │   └── UserUpdateDTO.java
    ├── vo
    │   ├── user
    │   │   └── UserVO.java
    └── entity
        └── User.java

✅ 这两份模板体现了 “API 契约清晰化” 和 “数据安全隔离化” 的现代 API 设计思想:

  • DTO/VO 专注 API 层,与持久层完全解耦
  • OpenAPI 注解全覆盖,生成专业级文档
  • JSR-303 校验保障数据合法性
  • 安全红线明确,杜绝敏感信息泄露

可作为团队标准模板,在代码生成器中直接使用,大幅提升 API 开发效率与质量。

Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码 Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码,代码可以直接复制到项目中使用,代码是基于pring框架的 立即下载

相关推荐

FreeMarker模板包括dto、dao、rowmapper、bo、service

FreeMarker通用模板。FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据

MyBatisPlus新版代码生成器(Velocity模板引擎详解)

Velocity是一个基于Java的模板引擎,可以通过特定的语法获取在java对象的数据 ,填充到模板中,从而实现界面和java代码的分离。应用场景Web应用程序 : 作为为应用程序的视图, 展示数据源代码生成 : Velocity可用于基于模板生成Java源代码自动电子邮件 : 网站注册 , 认证等的电子邮件模板网页静态化 : 基于velocity模板 , 生成静态网页只需要关注.vm结尾模板即可(属于velocity引擎模板),其他模板是其他模板引擎的模板,这里不做过多介绍。

从基础到源码解析的学习记录 7897

【Telephony】APN配置及加载流程&项目实践(AOSP)

学习APN关键是学会明白apns-conf.xml文件各个参数的意思,然后熟悉TelephonyProvider是如何读取文件创建数据库的,譬如数据库表的约束、文件的读写顺序等,还有读取后的ApnSetting的二次定制以及显示(例如屏蔽xcap等)。虽然一般在项目中APN的需求很简单,就是按照客户提供的APN参数添加上配置,或者在显示屏蔽一些参数,但是项目维护的过程中APN的问题也是比较多的。

weixin_44513784的博客 5505

概念POJO、DTO、DAO、PO、BO、VO、QO、ENTITY详解

在java开发过程中,新手总是被DAO、PO、BO、VO等等概念弄得晕头转向。 下面我查找了很多资料,总结如下: POJO(Plain Ordinary Java Object 简单Java对象) 实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。 POJO的内在含义是指:那些没有继承任何类、也没有实现任何接口,更没有被其它框架侵入的java对象。它包括PO、DTO、VO、BO等。 POJO持久化-》PO POJO传递-》 DTO POJO在表示层-》VO PO(persistence o

晓风残月淡的博客 4万+

重访时间与覆盖分析的stk操作

1.打开stk 2.创建一个新的场景,命名为Test,选择地球为场景星球,若为金星,可在Central Body里选择Venus(金星自转周期慢,自转周期243天,卫星轨道变化不明显)(其中start stop时间可设置长一些) 3.插入一个AreaTarget或者place,以AreaTarget为例 选择Pattern,Add三个点(用法可见前面的博客,有时候编程的代码也可以帮助理解stk的操作) 4.插入Satellite,选择Orbit Wizard(若想设置卫星的六根数也可

weixin_42664107的博客 1万+

闲置服务器之代理服务器篇

这台服务器是在阿里云免费白嫖的,天工开物计划,阿里给的300块无门槛优惠券,买了一台新加坡的境外服务器,288,刚刚抵扣完,因为是境外服务器,能够访问一些国内不能访问的网站,所以本文章仅从技术的角度来搭建代理服务器,使用时,请自觉遵守国家相关规定,如有任何违法行为,与本人无任何关系!!!。本文使用tinyproxy来搭建代理服务器。

m0_50281408的博客 2103

【我的开源】拿来即用!代码生成器:mybatis-plus-generator自定义模板生成 DTO、VO、Convertor、增删改查方法

在开发后台管理系统的时候,感觉基本上操作都是一样的:curd,于是借助并扩展mp的代码生成器自动生成一套api,减少重复劳动而且还统一规范,何乐而不为

万物皆字节 8985

《囚徒健身》 六艺,十式

文章目录《囚徒健身》 六艺,十式1、六艺,十式2、优缺点3、手臂和上半身 《囚徒健身》 六艺,十式 1、六艺,十式 1、俯卧撑: 2、深蹲: 3、举腿: 4、引体向上: 5、桥: 6、倒立撑: 十式就是每个动作分拆为十个不同的动作等级,进行训练 每一式里面,又根据做的组数和个数,分成三层,初级,中级,高级 依次循序渐进,每完成上一个动作的高级,则向下一个动作前进 2、优缺点 优点 : 六个动作都是很常见的,日常的动作,不太需要依赖什么器械,随时随地都可以练习,很方便 这些动作可以覆盖到全身大部分

简简单单Onlinezuozuo 4561

dto.java.ftl 和 vo.java.ftl 两个核心数据传输对象模板文件2

企业级分层架构数据传输对象模板 摘要: 本文提供了标准化的DTO和VO模板文件,用于实现前后端数据安全交互。DTO模板用于接收前端请求参数,排除主键和系统字段,包含字段校验注解;VO模板用于返回前端数据,支持字段扩展和格式化处理。两个模板均采用Lombok简化代码,包含详细中文注释,遵循RESTful API最佳实践,确保数据安全性和语义清晰性。模板自动生成,建议在Service层进行DTO/Entity/VO的转换处理。 (字数:149字)

python15397的博客 388

如何利用air780e与stm32c8c6进行通信实现给手机发送一条英文短信的功能?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1237

低功耗设计-Power Switch

power gating与power switch cell

m0_61544122的博客 1万+

网友共享自动生成DTO/DataAccess/BizObject的CodeSmith模板

转:http://www.cnblogs.com/lifework/archive/2006/10/20/229605.html2005-9-13:更新了BizObject.cst文件,如果原来文件中有此文件,就覆盖之。如果你有什么代码模板,可以与我们共享吗,我打算搞一个CodeSmith模板共享的团队,共享我们的模板(CodeSmith论坛上已经有很多了)。只要你点击一下按钮,DTO对象及其

2725

医疗AI多智能体资源调度:用Python构建高性能MCU资源池

本文介绍了医疗AI服务平台中多智能体资源争用问题的解决方案。作者设计了一个基于MCU(多点控制单元)理念的中央资源调度器,通过三层架构(资源抽象层、调度策略层、执行控制层)实现对GPU、API、数据库等医疗资源的统一管理。系统采用增强版信号量机制处理可计数并发资源,优化令牌桶算法管理速率资源,并支持急诊优先、配额限制、审计合规等医疗场景特殊需求。核心代码提供了带优先级抢占的并发控制和医疗专用令牌桶实现,可有效解决多智能体资源争用导致的优先级混乱、资源利用不均等问题。

AllenLV的博客 3211

VO(DTO)存在的必要性,以及使用工厂模式+模版模式+自省实现可拓展VO

引子: 想起以前第一个项目的时候,使用springMvc+mybatis+restful实现一个论坛的网站,那个时候因为还不知道VO层的存在(因为一直使用MVC三层架构)。为了不想重复写get,set方法(把po的数据封装到map或者新的bean),所以直接从数据库里面读取出来的po就直接封装成json反馈到前端,很多重要的数据字段如用户密码这些都直接抛给前端,数据泄漏了出去。 后来使用

读书就是赚钱 1万+

解锁RK3588多屏异显:MIPI+HDMI+EDP混合输出全攻略

本文详细介绍了RK3588处理器在MIPI+HDMI+EDP混合输出配置中的技术实现与应用。作为一款高性能处理器,RK3588凭借其强大的图形处理能力,支持多屏异显功能,可满足智能安防、工业控制等领域的多屏显示需求。文章从硬件连接、设备树配置、内核驱动设置到显示参数调整,系统阐述了配置流程,并针对信号不稳定、显示模式不匹配等常见问题提供了解决方案。通过智能安防监控案例,展示了该技术在提高监控效率方面的实际应用价值。随着技术进步,RK3588多屏异显技术将在更多领域发挥重要作用,为开发者提供灵活多样的显示方案

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2431

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java反射实现dto与entity互转,解决联合主键或嵌套entity方法

public class TransformUtils { /** * 将dto和entity之间的属性互相转换 */ public static Object populate(Object src, Object target) { Method[] srcMethods = src.getClass().getMethods(); M...

博客模板 1729

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

DTO(数据传输对象)介绍与实例

DTO就是数据传输对象(Data Transfer Object)的缩写。   DTO模式或称VO模式,是指将数据封装成普通的JavaBeans,在J2EE多个层次之间传输。   DTO类似信使,是同步系统中的Message。    一个DTO实例:   public interface Dto extends Map{ /** * 以Integer类型返回键值 * ...

Mike 4802

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

vue 打印(模板套打)

vue 使用print-template生成pdf 打印 。支持生成二维码、条形码、文本、图片、线 安装 yarn add print-template 或 npm install print-template 内容类型 line 线条 barcode 条形码 qrcode 二维码 image 图片 text 文本 内容属...

hobtdto的博客 1万+

DTO设计模式

DTO简介: 数据传输对象(DTO)(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。 个人理解:实际运用中,用于在用户页面上显示的数据和从数据库中取得的数据常常具有较大区别,且数据往往存在于多个表中,在这种情况下,我们常常需要向服务端发送多个请求才能将用于在页面中展示的数据凑齐。而DTO就是把多个存在自己需求

a759248的博客 819

Mybatis-Plus代码生成器,Freemarker模板引擎自定义模板文件

1、介绍 快速生成 Entity、Mapper、Mapper XML、Service、ServiceImpl、Controller、DTO等各个模块的代码,极大的提升了开发效率。 我是把模板从jar包中拿出来,再根据自己项目的需求去改模板,本文除了jar包中提供的六个模板,并自定义了dto模板,如果你有别的需要可以仿照dto生成的方式去实现。 2、效果 因为大家生成模板的需求不同,所以我这边demo提供的jar包中的模板。比如在我的项目中entity类统一继承BaseEntity,我把所有的公共

何大大的秘密基地 2603

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 215

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 325

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 140
上一篇: vite.config.ts.ftl(Vite 项目配置模板参考示例)
下一篇: dto.java.ftl 和 vo.java.ftl 两个核心数据传输对象模板文件2
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值