- 使用Hibernate框架輕松連接數(shù)據(jù)庫(藍(lán)橋杯軟件大賽培訓(xùn)教材-Java方向)
- 工業(yè)和信息化部人才交流中心藍(lán)橋杯軟件大賽專家委員會編著
- 531字
- 2018-12-27 17:47:36
1.8 DAO模式
Hibernate已經(jīng)提供了持久化層的基礎(chǔ)架構(gòu),用戶要做的就是利用這些基礎(chǔ)來實現(xiàn)具體的業(yè)務(wù)。為符合分層的概念,數(shù)據(jù)訪問細(xì)節(jié)不能和業(yè)務(wù)邏輯混雜在一起,應(yīng)該將數(shù)據(jù)操作的類放在一起,對它們進行某種相似結(jié)構(gòu)的抽象。接下來要介紹的就是一種典型的結(jié)構(gòu)。
DAO(Data Access Object,數(shù)據(jù)訪問對象)模式,是將所有對數(shù)據(jù)源的訪問進行抽象和封裝的一種設(shè)計模式。它所處的位置在業(yè)務(wù)層和數(shù)據(jù)源中間,起到屏蔽業(yè)務(wù)層了解數(shù)據(jù)底層設(shè)計細(xì)節(jié)的作用。DAO的設(shè)計應(yīng)該遵循下面3個原則:
(1)面向接口編程,以適應(yīng)數(shù)據(jù)底層的變動,向業(yè)務(wù)層公布的接口應(yīng)當(dāng)以DTO(數(shù)據(jù)傳輸對象)為參數(shù)和返回值。
(2)盡量將增刪改查原子化(粒度小一些),這樣業(yè)務(wù)層可以根據(jù)業(yè)務(wù)需求靈活地組合。(3)在包的劃分上需要規(guī)范,所有DAO類都放在dao包中,如圖1.9所示。

圖1.9 5iJob包結(jié)構(gòu)
1.8.1 DAO接口示例
下面的代碼是5iJob用到的ISeekerDao接口的代碼片段:
public interface ISeekerDao { /** * 保存Seeker實例 * @param seeker */ String save(Seeker seeker); }
1.8.2 DAO實現(xiàn)類示例
以下代碼是5iJob用到的SeekerDaoImpl類的代碼片段,可直接用于上機任務(wù)。
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完成了向數(shù)據(jù)庫新增一個Seeker的任務(wù)。在業(yè)務(wù)層,可以這樣來使用DAO:
public class SeekerServiceImpl implements ISeekerService { private ISeekerDao dao = new SeekerDaoImpl(); @Override public String register(Seeker seeker) { return dao.save(seeker); } }
- 少兒人工智能趣味入門:Scratch 3.0動畫與游戲編程
- GAE編程指南
- Mastering AWS Lambda
- C語言程序設(shè)計案例教程(第2版)
- C語言程序設(shè)計
- Scratch真好玩:教小孩學(xué)編程
- 名師講壇:Java微服務(wù)架構(gòu)實戰(zhàn)(SpringBoot+SpringCloud+Docker+RabbitMQ)
- JAVA程序設(shè)計實驗教程
- INSTANT Sinatra Starter
- HTML5秘籍(第2版)
- 深入理解BootLoader
- 零基礎(chǔ)輕松學(xué)C++:青少年趣味編程(全彩版)
- jQuery從入門到精通(微課精編版)
- Mastering JavaScript
- 交互設(shè)計師成長手冊:從零開始學(xué)交互