在 Java 企业级开发(尤其是 Spring / Spring Boot)中,DAO 和 Service 是典型的「数据访问层」与「业务逻辑层」的分工关系。下面从概念、职责、关系、示例四个角度说明。
DAO 层(持久层 / 数据访问层)
常见形式:
UserDao / UserRepository示例(MyBatis):
@Mapper
public interface UserDao {
User selectById(Long id);
void insert(User user);
}
Service 层(业务层)
示例:
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public User getUser(Long id) {
return userDao.selectById(id);
}
}
Controller
↓
Service
↓
DAO
↓
DB
| 层 | 关心什么 | 不关心什么 |
|---|---|---|
| DAO | SQL、表结构、ORM | 业务规则 |
| Service | 业务规则、事务 | SQL 怎么写 |
@Service
public class OrderService {
@Autowired OrderDao orderDao;
@Autowired UserDao userDao;
@Transactional
public void createOrder(...) {
userDao.update();
orderDao.insert();
}
}
@Transactional
public void transfer(...) { ... }
DAO 层一般不加事务注解。
❌ Controller 直接调用 DAO
❌ DAO 里写复杂业务逻辑
❌ Service 里写 SQL
❌ DAO 调用 Service(反向依赖)
DAO 管数据,Service 管业务;Service 调用 DAO,DAO 不碰业务。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。