温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java DAO 和 DTO 有何关系

发布时间:2026-10-26 03:55:47 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

在 Java 企业级开发中,DAO(Data Access Object) 和 DTO(Data Transfer Object) 是两个经常一起出现、但职责完全不同的概念。它们的关系可以简单理解为:DAO 负责“怎么存取数据”,DTO 负责“传什么数据”。

下面从定义、职责、关系和使用场景来说明。


一、什么是 DAO?

DAO(Data Access Object,数据访问对象)

  • 是一种设计模式
  • 用于隔离业务逻辑层和数据持久层
  • 负责与数据库交互(CRUD)

典型特点

  • 操作的是数据库表对应的实体(Entity / Model)
  • 不直接返回给前端复杂对象
  • 一般依赖于 JPA / MyBatis / JDBC

示例

@Repository
public class UserDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public User findById(Long id) {
        return jdbcTemplate.queryForObject(
            "select * from user where id = ?",
            new Object[]{id},
            new UserRowMapper()
        );
    }
}

二、什么是 DTO?

DTO(Data Transfer Object,数据传输对象)

  • 是一种用于数据传输的对象
  • 不包含业务逻辑
  • 通常用于层与层之间传递数据

典型特点

  • 只包含字段 + getter/setter
  • 可以是多个表的组合
  • 常用于:
    • Controller ↔ Service
    • 微服务之间
    • 前端 ↔ 后端

示例

public class UserDTO {
    private String username;
    private String email;
    // getter / setter
}

三、DAO 和 DTO 的关系

✅ 核心关系一句话

DAO 从数据库取数据(Entity),Service 层将其转换为 DTO 再对外传输

分层关系示意

Controller
   ↓ (DTO)
Service
   ↓ (Entity)
DAO
   ↓
Database

四、为什么不直接用 Entity 代替 DTO?

1️⃣ 安全问题

Entity 可能包含密码、敏感字段:

class User {
    String password; // ❌ 不能暴露
}

2️⃣ 结构问题

数据库表 ≠ 业务视图

UserDTO {
    username,
    roleName,  // 来自 role 表
    deptName   // 来自 department 表
}

3️⃣ 解耦

  • 改数据库结构,不影响接口
  • 改接口结构,不影响数据库

五、常见组合方式

✅ DAO → Entity → DTO

User user = userDao.findById(1L);
UserDTO dto = new UserDTO();
dto.setUsername(user.getUsername());

✅ 使用 MapStruct(推荐)

@Mapper
public interface UserMapper {
    UserDTO toDto(User user);
}

六、一句话总结

DAO 管“存取”,DTO 管“传输”;DAO 面向数据库,DTO 面向业务和接口。

如果你愿意,我也可以:

  • 用 MyBatis / JPA 举例
  • 讲 Entity / VO / BO / DTO 的区别
  • 给你一个 完整分层示例项目结构
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手