温馨提示×

温馨提示×

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

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

怎样实现java DAO接口

发布时间:2026-09-14 21:07:02 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

在 Java 中,DAO(Data Access Object)接口通常用于把“业务逻辑”和“数据库访问”解耦。下面从设计思想 → 接口定义 → 实现方式 → 示例 → 常见框架逐步说明。


一、DAO 的基本思想

  • DAO 接口:定义“做什么”(增删改查等方法)
  • DAO 实现类:定义“怎么做”(JDBC / MyBatis / JPA 等)
  • Service 层:只依赖 DAO 接口,不关心实现

二、定义 DAO 接口(通用写法)

public interface UserDao {
    User findById(Long id);
    List<User> findAll();
    void insert(User user);
    void update(User user);
    void delete(Long id);
}

三、DAO 接口的实现方式

方式 1:原生 JDBC 实现(最基础)

public class UserDaoImpl implements UserDao {

    private DataSource dataSource;

    public UserDaoImpl(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public User findById(Long id) {
        try (Connection conn = dataSource.getConnection();
             PreparedStatement ps = conn.prepareStatement(
                     "SELECT id,name FROM user WHERE id=?")) {
            ps.setLong(1, id);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                User user = new User();
                user.setId(rs.getLong("id"));
                user.setName(rs.getString("name"));
                return user;
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return null;
    }

    // 其他方法类似
}

✅ 优点:理解底层
❌ 缺点:代码冗长


方式 2:MyBatis 实现(推荐)

1️⃣ 只写接口(不需要实现类)

@Mapper
public interface UserDao {
    User findById(@Param("id") Long id);
    List<User> findAll();
    void insert(User user);
}

2️⃣ 写 XML 或注解 SQL

<select id="findById" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

✅ 优点:简洁、主流
✅ 不需要写实现类


方式 3:Spring Data JPA(最省事)

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

✅ 自动实现:

  • findById
  • save
  • delete
  • 自定义方法名查询

四、Service 层如何使用 DAO

@Service
public class UserService {

    private final UserDao userDao;

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

    public User getUser(Long id) {
        return userDao.findById(id);
    }
}

五、DAO 设计最佳实践

✅ 一个实体一个 DAO
✅ 接口与实现分离
✅ 不用 static
✅ 异常统一封装
✅ 优先使用 MyBatis / JPA


六、总结一句话

DAO 接口 = 定义数据访问方法;实现方式可以是 JDBC、MyBatis 或 JPA,现代项目推荐 MyBatis / JPA。

如果你愿意,我可以:

  • 给你一个 完整 Spring Boot + MyBatis 示例
  • 或 DAO vs Repository 区别
  • 或 怎么设计通用 DAO

你想看哪一个?

向AI问一下细节

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

AI
助
手