java web dao 層和dao 實現層有什么好處


接口是為了屏蔽不同數據庫的JDBC實現差異而出現的。

以常見的系統組織結構為例,管理系統里有一個部門department表用於存放部門信息,因為部門下面可能有子部門所以表中的字段要定義成類似樹形結構的方式(parentId呀什么的)。這時我們想在java中用sql去查詢指定部門下的數據,你就要考慮不同數據庫的SQL語句的問題了:Oracle sql提供了樹查詢的方法,你只需要發一句sql就能查詢出該部門下的所有子部門信息;但是mysql就不行,mysql就只能通過java遞歸一條一條查詢。那么假如我們的系統即要支持Oracle又要支持mysql,這時我們查詢部門怎么辦呢?這時就要考慮接口,看下面的代碼:

首先定義一個部門接口,該接口有一個findDept方法用於查詢部門下的所有子部門
Interface DepartmentDao{
//根據父部門ID查詢部門下的所有子部門
public List findDept(int deptId);
}
有了接口,我們就需要有實現類了,這時我們為了考慮兼容性就需要編寫兩套接口類,一個是用mysql語句實現的類,另一個是用Oracle實現的類:
class MySqlDepartmentDaoImpl implement DepartmentDao{
//根據父部門ID查詢部門下的所有子部門
public List findDept(int deptId){String sql="mysql的sql語句".....}
}
class OracleDepartmentDaoImpl implement DepartmentDao{
//根據父部門ID查詢部門下的所有子部門
public List findDept(int deptId){String sql="Oracle的sql語句".....}
}
一個Dao工廠,這個工廠返回部門Dao接口的實例
class DaoFactory{
public DepartmentDao getDepartmentDao(){
if(使用的是Mysql數據庫){
return new MySqlDepartmentDaoImpl ();
}else{
return new OracleDepartmentDaoImpl ();
}
}
}
上面的編碼DaoFactory是關鍵,通過這個這個工廠只返回給我們接口實例,這樣就屏蔽了不同數據庫的差異性(如果用戶使用的是mysql數據庫就會返回new MySqlDepartmentDaoImpl ()反之為new OracleDepartmentDaoImpl ())。我們在編碼中只需要通過DepartmentDao deptDao = DaoFactory.getDepartmentDao();deptDao.findDept就可以查詢我們需要的數據了。

所以面向接口編程是很重要的東西,建議你學習一下spring的IOC,代碼寫多了你就明白接口的重要性了

各位工程師累了嗎? 推薦一篇可以讓你技術能力達到出神入化的網站" 宅男門診"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM