DAO(Data Access Object,数据访问对象) 是 Java 中一种用于封装对数据库访问逻辑的设计模式,目的是把“业务代码”和“数据库操作代码”分离开来,让程序更清晰、更易维护。
DAO 的核心作用是:
把对数据库的增删改查(CRUD)操作封装在独立的对象中,业务层只关心“调用方法”,不关心 SQL 怎么写。
public class UserService {
public void addUser() {
// 直接写 JDBC
Connection conn = ...
PreparedStatement ps = conn.prepareStatement("INSERT INTO user...");
ps.executeUpdate();
}
}
问题:
DAO 通常包含以下几个部分:
对应数据库中的一张表
public class User {
private int id;
private String name;
private int age;
// getter / setter
}
public interface UserDao {
void add(User user);
User getById(int id);
List<User> getAll();
void update(User user);
void delete(int id);
}
public class UserDaoImpl implements UserDao {
@Override
public void add(User user) {
// JDBC / MyBatis / JPA 等
String sql = "INSERT INTO user(name, age) VALUES(?, ?)";
// 执行 SQL
}
}
public class UserService {
private UserDao userDao = new UserDaoImpl();
public void register(User user) {
userDao.add(user);
}
}
✅ 业务层不关心数据库细节
✅ 解耦
业务层和数据访问层分离
✅ 易维护
数据库结构变化,只需改 DAO 层
✅ 易测试
可以 mock DAO 进行单元测试
✅ 结构清晰
符合分层架构(Controller → Service → DAO)
@Mapper
public interface UserDao {
void insert(User user);
}
✅ 实际项目中非常常见
public interface UserDao extends JpaRepository<User, Integer> {
}
✅ 几乎不用写 SQL
| 对比 | DAO | Mapper(MyBatis) |
|---|---|---|
| 本质 | 设计模式 | MyBatis 的接口 |
| 关系 | Mapper 是 DAO 的一种实现 | 属于 DAO 层 |
| 使用 | 泛指 | 特指 MyBatis |
DAO 是 Java 中用来“专门操作数据库的对象”,用来把数据库访问代码从业务代码中分离出来,提高程序的可维护性和扩展性。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。