- 使用Hibernate框架轻松连接数据库(蓝桥杯软件大赛培训教材-Java方向)
- 工业和信息化部人才交流中心蓝桥杯软件大赛专家委员会编著
- 531字
- 2020-08-28 01:58:52
1.8 DAO模式
Hibernate已经提供了持久化层的基础架构,用户要做的就是利用这些基础来实现具体的业务。为符合分层的概念,数据访问细节不能和业务逻辑混杂在一起,应该将数据操作的类放在一起,对它们进行某种相似结构的抽象。接下来要介绍的就是一种典型的结构。
DAO(Data Access Object,数据访问对象)模式,是将所有对数据源的访问进行抽象和封装的一种设计模式。它所处的位置在业务层和数据源中间,起到屏蔽业务层了解数据底层设计细节的作用。DAO的设计应该遵循下面3个原则:
(1)面向接口编程,以适应数据底层的变动,向业务层公布的接口应当以DTO(数据传输对象)为参数和返回值。
(2)尽量将增删改查原子化(粒度小一些),这样业务层可以根据业务需求灵活地组合。(3)在包的划分上需要规范,所有DAO类都放在dao包中,如图1.9所示。
![](https://epubservercos.yuewen.com/D7C7FF/3590315304039201/epubprivate/OEBPS/Images/figure_0038_0001.jpg?sign=1739431433-X970YKm1sHe1y87kdRBQwSYPNffz3ZJq-0-122f7b8ae475753b0b553bf7d6b9b804)
图1.9 5iJob包结构
1.8.1 DAO接口示例
下面的代码是5iJob用到的ISeekerDao接口的代码片段:
public interface ISeekerDao { /** * 保存Seeker实例 * @param seeker */ String save(Seeker seeker); }
1.8.2 DAO实现类示例
以下代码是5iJob用到的SeekerDaoImpl类的代码片段,可直接用于上机任务。
public class SeekerDaoImpl implements ISeekerDao { @Override public String save(Seeker seeker) { Session session = HibernateUtil.getSessionFactory().openSession();//使用HibernateUtil Transaction tx = null; try { tx = session.beginTransaction(); String id = (String) session.save(seeker); tx.commit(); return id; } catch (Exception e) { tx.rollback(); throw new RuntimeException(e); } finally { session.close(); } } }
可以看到,SeekerDaoImpl使用了Hibernate API完成了向数据库新增一个Seeker的任务。在业务层,可以这样来使用DAO:
public class SeekerServiceImpl implements ISeekerService { private ISeekerDao dao = new SeekerDaoImpl(); @Override public String register(Seeker seeker) { return dao.save(seeker); } }