在 Java 企业级开发中,DAO(Data Access Object,数据访问对象) 是一种设计模式,核心目的是把“业务逻辑”和“数据访问细节”分离开来。
下面从概念、作用、结构、示例和实践几个层面帮你理解。
DAO 是一层专门用于访问数据的对象
它只负责:
不负责:
一句话理解:
DAO 就是“业务代码和数据库之间的中间人”。
没有 DAO 时常见的问题:
// 业务代码里直接写 SQL
Connection conn = ...
Statement stmt = ...
ResultSet rs = stmt.executeQuery("select * from user");
问题:
✅ DAO 带来的好处:
Controller / Service
↓
DAO 接口
↓
DAO 实现类(JDBC / MyBatis / JPA)
↓
数据库
public class User {
private int id;
private String name;
// getter / setter
}
public interface UserDao {
User findById(int id);
void save(User user);
void delete(int id);
}
public class UserDaoImpl implements UserDao {
public User findById(int id) {
// JDBC / MyBatis 操作数据库
}
}
public class UserService {
private UserDao userDao = new UserDaoImpl();
public User getUser(int id) {
return userDao.findById(id);
}
}
| 对比点 | 普通 JDBC | DAO 模式 |
|---|---|---|
| 代码位置 | 分散 | 集中 |
| 可维护性 | 差 | 好 |
| 可测试性 | 低 | 高 |
| 耦合度 | 高 | 低 |
@Mapper
public interface UserDao {
User selectById(int id);
}
public interface UserRepository extends JpaRepository<User, Integer> {
}
本质仍是 DAO 思想的体现
DAO 就是把“怎么存取数据”封装起来,让业务代码只关心“做什么”,不关心“怎么存”。
如果你愿意,我可以:
你更想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。