温馨提示×

温馨提示×

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

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

Java DAO 数据访问对象是什么

发布时间:2026-07-24 19:05:34 来源:亿速云 阅读:102 作者:小樊 栏目:编程语言

DAO(Data Access Object,数据访问对象) 是 Java 中一种用于封装对数据库访问逻辑的设计模式,目的是把“业务代码”和“数据库操作代码”分离开来,让程序更清晰、更易维护。


一、DAO 是做什么的?

DAO 的核心作用是:

把对数据库的增删改查(CRUD)操作封装在独立的对象中,业务层只关心“调用方法”,不关心 SQL 怎么写。

没有 DAO 时(不推荐)

public class UserService {
    public void addUser() {
        // 直接写 JDBC
        Connection conn = ...
        PreparedStatement ps = conn.prepareStatement("INSERT INTO user...");
        ps.executeUpdate();
    }
}

问题:

  • 业务代码和数据库代码混在一起
  • 难维护、难测试
  • 换数据库要改很多地方

二、DAO 模式的结构

DAO 通常包含以下几个部分:

1️⃣ 实体类(Entity / Model)

对应数据库中的一张表

public class User {
    private int id;
    private String name;
    private int age;
    // getter / setter
}

2️⃣ DAO 接口(定义操作规范)

public interface UserDao {
    void add(User user);
    User getById(int id);
    List<User> getAll();
    void update(User user);
    void delete(int id);
}

3️⃣ DAO 实现类(真正操作数据库)

public class UserDaoImpl implements UserDao {

    @Override
    public void add(User user) {
        // JDBC / MyBatis / JPA 等
        String sql = "INSERT INTO user(name, age) VALUES(?, ?)";
        // 执行 SQL
    }
}

4️⃣ 业务层(Service)调用 DAO

public class UserService {
    private UserDao userDao = new UserDaoImpl();

    public void register(User user) {
        userDao.add(user);
    }
}

✅ 业务层不关心数据库细节


三、DAO 的优点

✅ 解耦
业务层和数据访问层分离

✅ 易维护
数据库结构变化,只需改 DAO 层

✅ 易测试
可以 mock DAO 进行单元测试

✅ 结构清晰
符合分层架构(Controller → Service → DAO)


四、DAO 在真实项目中的形式

1️⃣ 传统 JDBC DAO

  • 手写 SQL
  • 现在较少直接使用

2️⃣ MyBatis DAO

@Mapper
public interface UserDao {
    void insert(User user);
}

✅ 实际项目中非常常见

3️⃣ JPA / Hibernate DAO

public interface UserDao extends JpaRepository<User, Integer> {
}

✅ 几乎不用写 SQL


五、DAO vs Mapper

对比 DAO Mapper(MyBatis)
本质 设计模式 MyBatis 的接口
关系 Mapper 是 DAO 的一种实现 属于 DAO 层
使用 泛指 特指 MyBatis

六、一句话总结

DAO 是 Java 中用来“专门操作数据库的对象”,用来把数据库访问代码从业务代码中分离出来,提高程序的可维护性和扩展性。

如果你愿意,我可以:

  • ✅ 用 JDBC / MyBatis / JPA 分别写一个 DAO 示例
  • ✅ 帮你画一张 DAO 分层架构图
  • ✅ 结合实际项目讲 DAO 的最佳实践
向AI问一下细节

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

AI
助
手