在 Java 中,DAO(Data Access Object)接口通常用于把“业务逻辑”和“数据库访问”解耦。下面从设计思想 → 接口定义 → 实现方式 → 示例 → 常见框架逐步说明。
public interface UserDao {
User findById(Long id);
List<User> findAll();
void insert(User user);
void update(User user);
void delete(Long id);
}
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;
}
// 其他方法类似
}
✅ 优点:理解底层
❌ 缺点:代码冗长
@Mapper
public interface UserDao {
User findById(@Param("id") Long id);
List<User> findAll();
void insert(User user);
}
<select id="findById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
✅ 优点:简洁、主流
✅ 不需要写实现类
public interface UserDao extends JpaRepository<User, Long> {
}
✅ 自动实现:
findByIdsavedelete@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
✅ 接口与实现分离
✅ 不用 static
✅ 异常统一封装
✅ 优先使用 MyBatis / JPA
DAO 接口 = 定义数据访问方法;实现方式可以是 JDBC、MyBatis 或 JPA,现代项目推荐 MyBatis / JPA。
如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。