又是 DAO 层,又是 Service 层。每层还都加上一个 interface。我只是要实现一个拉取所有数据的操作。搞这么多层有什么用?
DAO 是什么?
Data Access Object 是一个 object 或者 interface 用于访问数据库或者其他持久化储存系统。
例如,我们有一个 Entity 来描述一个 Person
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
而 Person 的信息需要持久化到数据库中,这时我们就需要一个对应的 DAO object 或者 interface 来建立 Person Entity 与数据库的联系。
例如,这里先定义一个 DAO interface
interface PersonDAO {
List<Person> findAll();
List<Person> findById();
List<Person> findByName();
boolean insertPerson(Person person);
boolean updatePerson(Person person);
boolean deletePerson(Person person);
}
然后按照这个 interface 实现一个具体的 implementation,或者几个 implementations。例如,一个关联数据库,一个关联文本文件。
DAO 层一定要有个 interface?
如果你100%确定只需要关联特定数据库,例如 MySQL,那么这个 interface 就有些多余了,直接写实现就好。
Service 又是什么?
Service 主要用来写业务逻辑,例如,当业务逻辑比数据逻辑复杂的多的时候,就需要 Service 层来做分离
@Transactional
public class PeopleService {
private PeopleDAO pDAO;
private CityDAO cDAO;
public void createPerson(String name, String city)
throws PeopleServiceException {
Person p = new Person();
p.setName(name);
City c = cDAO.getCityByName(city);
if (c == null) throw new ServiceException(city + " doesn't exist!");
if (c.isFull()) throw new ServiceException(city + " is full!");
c.addPeople(p);
sess().save(p);
sess().save(c);
}
}
当然是否需要 interface 取决于跟 DAO 一样的问题。
DAO 与 Service 是 Spring 引入的概念?还是 Hibernate 引入的?
是 Spring 引入的。
Hibernate 用来作为某一 DAO interface 的实现。例如:
interface PersonDao {
}
class HibernatePersonDao implements PersonDao {
}
class LdapPersonDao implements PersonDao {
}
参考
- java web 中dao 层和service层都使用接口,是否是为使用接口而使用接口? - 知乎 小猪兄弟写的非常实在
- Data access object (DAO) in Java - Stack Overflow 完美诠释了 DAO
- java - Responsibilities and use of Service and DAO Layers - Stack Overflow
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式