在 Java 企业级开发中,DAO(Data Access Object) 和 DTO(Data Transfer Object) 是两个经常一起出现、但职责完全不同的概念。它们的关系可以简单理解为:DAO 负责“怎么存取数据”,DTO 负责“传什么数据”。
下面从定义、职责、关系和使用场景来说明。
DAO(Data Access Object,数据访问对象)
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(Data Transfer Object,数据传输对象)
public class UserDTO {
private String username;
private String email;
// getter / setter
}
DAO 从数据库取数据(Entity),Service 层将其转换为 DTO 再对外传输
Controller
↓ (DTO)
Service
↓ (Entity)
DAO
↓
Database
Entity 可能包含密码、敏感字段:
class User {
String password; // ❌ 不能暴露
}
数据库表 ≠ 业务视图
UserDTO {
username,
roleName, // 来自 role 表
deptName // 来自 department 表
}
User user = userDao.findById(1L);
UserDTO dto = new UserDTO();
dto.setUsername(user.getUsername());
@Mapper
public interface UserMapper {
UserDTO toDto(User user);
}
DAO 管“存取”,DTO 管“传输”;DAO 面向数据库,DTO 面向业务和接口。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。