温馨提示×

温馨提示×

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

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

Java DAO 数据访问对象怎么用

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

在 Java 中,DAO(Data Access Object,数据访问对象) 是一种设计模式,用来把业务逻辑和数据访问逻辑分离,让代码更清晰、更易维护。

下面我从 概念 → 结构 → 示例 → 常见用法 一步步说明。


一、DAO 是干什么的?

DAO 的作用:

  • 封装对数据库的访问(CRUD)
  • 业务层不直接操作数据库
  • 方便后期更换数据库或 ORM 框架

一句话:

DAO 负责“怎么存、怎么取”,Service 负责“做什么”


二、DAO 的典型结构

一般一个 DAO 包含 4 个部分:

Entity(实体类)
DAO 接口
DAO 实现类
Service(业务层)

三、示例:用户管理(User)

1️⃣ 实体类(Entity)

public class User {
    private int id;
    private String name;
    private int age;

    // getter / setter
}

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

public interface UserDao {
    void addUser(User user);
    User getUserById(int id);
    List<User> getAllUsers();
    void deleteUser(int id);
}

✅ 好处:业务层只依赖接口,不关心实现


3️⃣ DAO 实现类(JDBC 示例)

public class UserDaoImpl implements UserDao {

    private Connection connection;

    public UserDaoImpl(Connection connection) {
        this.connection = connection;
    }

    @Override
    public void addUser(User user) {
        String sql = "INSERT INTO user(name, age) VALUES (?, ?)";
        try (PreparedStatement ps = connection.prepareStatement(sql)) {
            ps.setString(1, user.getName());
            ps.setInt(2, user.getAge());
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public User getUserById(int id) {
        String sql = "SELECT * FROM user WHERE id = ?";
        try (PreparedStatement ps = connection.prepareStatement(sql)) {
            ps.setInt(1, id);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                return new User(id, rs.getString("name"), rs.getInt("age"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    // 其他方法省略
}

4️⃣ Service 层(业务层)

public class UserService {

    private UserDao userDao;

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    public void registerUser(User user) {
        // 业务逻辑
        if (user.getAge() < 18) {
            throw new RuntimeException("年龄太小");
        }
        userDao.addUser(user);
    }
}

✅ Service 不关心 JDBC、SQL


四、DAO + MyBatis(更常见)

DAO 接口(Mapper)

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

XML / 注解 SQL

@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(int id);

✅ MyBatis 自动实现 DAO
✅ 不需要写实现类


五、DAO 常见使用场景

场景 是否用 DAO
JDBC ✅ 推荐
MyBatis ✅ 必须
JPA / Hibernate ✅ Repository 本质也是 DAO
简单小项目 可选

六、DAO 的优点

✅ 解耦
✅ 易维护
✅ 易测试
✅ 易扩展(换数据库)


七、常见错误

❌ Service 里直接写 SQL
❌ DAO 里写业务逻辑
❌ 一个 DAO 操作多张表(职责不清)


八、一句话总结

DAO = 数据库操作的“中间人”,让业务代码更干净


如果你愿意,我可以:

  • ✅ 用 Spring Boot + MyBatis 写一个完整示例
  • ✅ 对比 DAO vs Repository
  • ✅ 给你一个 DAO 模板代码

你现在是 学 Java 基础、做课设,还是实际项目?

向AI问一下细节

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

AI
助
手