java 設(shè)計(jì)模式(DAO)的實(shí)例詳解
java 設(shè)計(jì)模式(DAO)的實(shí)例詳解
應(yīng)用場(chǎng)景:在Java程序中,經(jīng)常需要把數(shù)據(jù)持久化,也需要獲取持久化的數(shù)據(jù),但是在進(jìn)行數(shù)據(jù)持久化的過(guò)程中面臨諸多問(wèn)題(如:數(shù)據(jù)源不同、存儲(chǔ)類(lèi)型不同、供應(yīng)商不同、訪問(wèn)方式不同等等),請(qǐng)問(wèn)如何能以統(tǒng)一的接口進(jìn)行數(shù)據(jù)持久化的操作?
其實(shí)這個(gè)我沒(méi)學(xué)號(hào)(≧ ﹏ ≦)。我的理解就是一個(gè)產(chǎn)品面向的用戶不是單一的,所以我們要兼容許多情況如前面提到的數(shù)據(jù)源不同、存儲(chǔ)類(lèi)型不同、供應(yīng)商不同、訪問(wèn)方式不同等等。
★ 解決方案
DAO的理解:
1、DAO其實(shí)是利用組合工廠模式來(lái)解決問(wèn)題的,并沒(méi)有帶來(lái)新的功能,所以學(xué)的其實(shí)就是個(gè)思路。
2、DAO理論上是沒(méi)有層數(shù)限制的
3、DAO的各層理論上是沒(méi)有先后的。
項(xiàng)目種文件樣子:
一些代碼實(shí)現(xiàn)
接口
public interface DepDAO { public void create(String userId,String name); }
工廠方法(多個(gè)選擇實(shí)現(xiàn))
public class F1Factory { private F1Factory(){ } public static DepDAO getDepDAO(){ //根據(jù)用戶在配置文件中指定的類(lèi)型來(lái)選擇具體的某個(gè)實(shí)現(xiàn)類(lèi) //type:類(lèi)似我們學(xué)號(hào)指定的信息: 14+ 06+ 601+ 01 // 本例如: 1(type1機(jī)器類(lèi)型)+ 2(type2存儲(chǔ)類(lèi)型)+ 2(type3供應(yīng)商) + 1(type4訪問(wèn)方式) int type1=1;//第1層工廠的選擇類(lèi)型,按理應(yīng)該從用戶的配置信息中獲取,這里直接模擬了 if(type1==1){ return F2AFactory.getDepDAO(); }else if(type1==2){ return F2BFactory.getDepDAO(); } return null; } }
public class F2AFactory { private F2AFactory(){ } public static DepDAO getDepDAO(){ int type2=2;//第2層工廠的選擇類(lèi)型,按理應(yīng)該從用戶的配置信息中獲取,這里直接模擬了 if(type2==1){ // return F3A_ODB_Factory.getDepDAO(); }else if(type2==2){ return F3_A_RDB_Factory.getDepDAO(); }else if(type2==3){ //return F3_A_XML_Factory.getDepDAO(); }else if(type2==4){ //return F3_A_FileFactory.getDepDAO(); } return null; } }
還有幾個(gè)工廠方法類(lèi)似就不貼出來(lái)了
實(shí)現(xiàn)類(lèi)
public class DepEJB_Impl implements DepDAO{ @Override public void create(String userId, String name) { System.out.println("利用JPA_Impl向數(shù)據(jù)庫(kù)寫(xiě)入:"+userId+","+name); } }
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- 詳解Javaee Dao層的抽取
- Java之dao模式詳解及代碼示例
- Java利用自定義注解、反射實(shí)現(xiàn)簡(jiǎn)單BaseDao實(shí)例
- Java 中利用泛型和反射機(jī)制抽象DAO的實(shí)例
- Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問(wèn)對(duì)象DAO模式的方法
- Java的Spring框架中DAO數(shù)據(jù)訪問(wèn)對(duì)象的使用示例
- 通過(guò)代理類(lèi)實(shí)現(xiàn)java連接數(shù)據(jù)庫(kù)(使用dao層操作數(shù)據(jù))實(shí)例分享
- Java接口DAO模式代碼原理及應(yīng)用詳解
相關(guān)文章
springboot動(dòng)態(tài)加載Echarts柱狀圖
這篇文章主要為大家詳細(xì)介紹了springboot動(dòng)態(tài)加載Echarts柱狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12java編程中拷貝數(shù)組的方式及相關(guān)問(wèn)題分析
這篇文章主要介紹了java編程中拷貝數(shù)組的方式及相關(guān)問(wèn)題分析,分享了Java中數(shù)組復(fù)制的四種方式,其次對(duì)二維數(shù)組的簡(jiǎn)單使用有一段代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11在SpringBoot 中從application.yml中獲取自定義常量方式
這篇文章主要介紹了在SpringBoot 中從application.yml中獲取自定義常量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04IDEA如何自動(dòng)生成serialVersionUID的設(shè)置
這篇文章主要介紹了IDEA如何自動(dòng)生成 serialVersionUID 的設(shè)置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java substring方法實(shí)現(xiàn)原理解析
這篇文章主要介紹了Java substring方法實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05深入理解springMVC中的Model和Session屬性
這篇文章主要介紹了深入理解springMVC中的Model和Session屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12使用Java7的Files工具類(lèi)和Path接口來(lái)訪問(wèn)文件的方法
下面小編就為大家分享一篇使用Java7的Files工具類(lèi)和Path接口來(lái)訪問(wèn)文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11