DAO = Data Access Object
DAO模式將數(shù)據(jù)控制層和業(yè)務(wù)邏輯層分離。
DAO模式的實(shí)踐,大抵可以分成三個(gè)部分:
1)數(shù)據(jù)實(shí)現(xiàn)(DAO)
2)Model
3)Service
這里的數(shù)據(jù)實(shí)現(xiàn),可以直接通過(guò)JDBC的方式,或者Hibernate之類(lèi),數(shù)據(jù)控制與業(yè)務(wù)邏輯層的分離,道理也在這里。
Model可以理解為普通的POJO。
而Service則是就復(fù)雜情況而言的,包含了多個(gè)DAO的組合,加入了事務(wù)等處理。

看具體代碼:
DAO部分:
1-1. com.cleversoft.lab.dao.CollegeDAO.java:
package com.cleversoft.lab.dao;

import java.util.List;
import java.util.Map;

public interface CollegeDAO {
    
public List getAllColleges();

    
public Map getCollegesMap();
}
1-2. com.cleversoft.lab.dao.CollegeDAOImp.java:
package com.cleversoft.lab.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.cleversoft.lab.model.College;

public class CollegeDAOImp implements CollegeDAO {
    
private static ArrayList<College> colleges;

    
private static HashMap<Integer, College> collegesMap;

    
static {
        colleges 
= new ArrayList<College>();
        colleges.add(
new College(1"常熟理工學(xué)院""說(shuō)明1"));
        colleges.add(
new College(2"蘇州大學(xué)""說(shuō)明2"));
        colleges.add(
new College(3"北京大學(xué)""說(shuō)明3"));

        collegesMap 
= new HashMap<Integer, College>();
        Iterator i 
= colleges.iterator();
        
while (i.hasNext()) {
            College college 
= (College) i.next();
            collegesMap.put(college.getCollegeID(), college);
        }

    }


    
public List getAllColleges() {
        
return colleges;
    }


    
public Map getCollegesMap() {
        
return collegesMap;
    }


}
2-1. com.cleversoft.lab.dao.DepartmentDAO.java:
package com.cleversoft.lab.dao;

import java.util.List;

import com.cleversoft.lab.model.Department;

public interface DepartmentDAO {
    
public List getAllDepartments();

    
public Department getDepartment(Integer id);

    
public void update(Department dep);

    
public void insert(Department dep);

    
public void delete(Integer id);
}
2-2. com.cleversoft.lab.dao.DepartmentDAOImp.java:
package com.cleversoft.lab.dao;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.cleversoft.lab.model.College;
import com.cleversoft.lab.model.Department;

public class DepartmentDAOImp implements DepartmentDAO {
    
private static ArrayList<Department> departments;

    @SuppressWarnings(
"unused")
    
private static Map collegesMap;

    
static {
        departments 
= new ArrayList<Department>();
        departments.add(
new Department(1"計(jì)算機(jī)系""說(shuō)明1"new College(1,
                
"常熟理工學(xué)院""說(shuō)明1")));
        departments.add(
new Department(2"計(jì)算機(jī)系""說(shuō)明2"new College(2"蘇州大學(xué)",
                
"說(shuō)明2")));
        departments.add(
new Department(3"計(jì)算機(jī)系""說(shuō)明3"new College(3"北京大學(xué)",
                
"說(shuō)明3")));

        CollegeDAO collegeDAO 
= new CollegeDAOImp();
        collegesMap 
= collegeDAO.getCollegesMap();
    }


    
public void delete(Integer id) {
        
for (int i = 0; i < departments.size(); i++{
            Department department 
= (Department) departments.get(i);
            
if (department.getDepartmentID().equals(id)) {
                departments.remove(i);
                
break;
            }

        }

    }


    
public List getAllDepartments() {
        
return departments;
    }


    
public Department getDepartment(Integer id) {
        Department dep 
= null;
        Iterator i 
= departments.iterator();
        
while (i.hasNext()) {
            dep 
= (Department) i.next();
            
if (dep.getDepartmentID().equals(id)) {
                
break;
            }

        }

        
return dep;
    }


    
public void insert(Department dep) {
        
int lastId = 0;
        Iterator i 
= departments.iterator();
        
while (i.hasNext()) {
            Department department 
= (Department) i.next();
            
if (department.getDepartmentID() > lastId) {
                lastId 
= department.getDepartmentID();
            }

        }

        dep.setCollege((College) collegesMap.get(dep.getCollege()
                .getCollegeID()));
        dep.setDepartmentID(lastId 
+ 1);
        departments.add(dep);
    }


    
public void update(Department dep) {
        Integer id 
= dep.getDepartmentID();
        
for (int i = 0; i < departments.size(); i++{
            Department department 
= (Department) departments.get(i);
            
if (department.getDepartmentID().equals(id)) {
                dep.setCollege((College) collegesMap.get(dep.getCollege()
                        .getCollegeID()));
                departments.set(i, dep);
                
break;
            }

        }

    }


}

Model部分:
1. com.cleversoft.lab.model.College.java:
package com.cleversoft.lab.model;

import java.io.Serializable;

@SuppressWarnings(
"serial")
public class College implements Serializable {
    Integer collegeID;

    String collegeName;

    String collegeDesc;

    
public College() {
    }


    
public College(Integer collegeID, String collegeName, String collegeDesc) {
        
this.collegeID = collegeID;
        
this.collegeName = collegeName;
        
this.collegeDesc = collegeDesc;
    }


    
public String getCollegeDesc() {
        
return collegeDesc;
    }


    
public void setCollegeDesc(String collegeDesc) {
        
this.collegeDesc = collegeDesc;
    }


    
public Integer getCollegeID() {
        
return collegeID;
    }


    
public void setCollegeID(Integer collegeID) {
        
this.collegeID = collegeID;
    }


    
public String getCollegeName() {
        
return collegeName;
    }


    
public void setCollegeName(String collegeName) {
        
this.collegeName = collegeName;
    }

}
2. com.cleversoft.lab.model.Department.java:
package com.cleversoft.lab.model;

import java.io.Serializable;

@SuppressWarnings(
"serial")
public class Department implements Serializable {
    Integer departmentID;

    String departmentName;

    String departmentDesc;

    College college;

    
public Department() {
    }


    
public Department(Integer departmentID, String departmentName,
            String departmentDesc, College college) 
{
        
this.departmentID = departmentID;
        
this.departmentName = departmentName;
        
this.departmentDesc = departmentDesc;
        
this.college = college;
    }


    
public College getCollege() {
        
return college;
    }


    
public void setCollege(College college) {
        
this.college = college;
    }


    
public String getDepartmentDesc() {
        
return departmentDesc;
    }


    
public void setDepartmentDesc(String departmentDesc) {
        
this.departmentDesc = departmentDesc;
    }


    
public Integer getDepartmentID() {
        
return departmentID;
    }


    
public void setDepartmentID(Integer departmentID) {
        
this.departmentID = departmentID;
    }


    
public String getDepartmentName() {
        
return departmentName;
    }


    
public void setDepartmentName(String departmentName) {
        
this.departmentName = departmentName;
    }


}

Service:
1-1: com.cleversoft.lab.service.CollegeService.java:
package com.cleversoft.lab.service;

import java.util.List;
import java.util.Map;

public interface CollegeService {
    
public List getAllColleges();
    
    
public Map getCollegesMap();
}
1-2: com.cleversoft.lab.service.CollegeDAOService.java:
package com.cleversoft.lab.service;

import java.util.List;
import java.util.Map;

import com.cleversoft.lab.dao.CollegeDAO;
import com.cleversoft.lab.dao.CollegeDAOImp;

public class CollegeDAOService implements CollegeService {
    CollegeDAO dao;

    
public CollegeDAOService() {
        
this.dao = new CollegeDAOImp();
    }


    
public List getAllColleges() {
        
return dao.getAllColleges();
    }


    
public Map getCollegesMap() {
        
return dao.getCollegesMap();
    }

}
2-1: com.cleversoft.lab.service.DepartmentService.java:
package com.cleversoft.lab.service;

import java.util.List;

import com.cleversoft.lab.model.Department;

public interface DepartmentService {
    
public List getAllDepartments();

    
public Department getDepartment(Integer id);

    
public void update(Department dep);

    
public void insert(Department dep);

    
public void delete(Integer id);
}
2-2: com.cleversoft.lab.service.DepartmentDAOService.java:
package com.cleversoft.lab.service;

import java.util.List;

import com.cleversoft.lab.dao.DepartmentDAO;
import com.cleversoft.lab.dao.DepartmentDAOImp;
import com.cleversoft.lab.model.Department;

public class DepartmentDAOService implements DepartmentService {
    DepartmentDAO dao;

    
public DepartmentDAOService() {
        
this.dao = new DepartmentDAOImp();
    }


    
public void delete(Integer id) {
        dao.delete(id);
    }


    
public List getAllDepartments() {
        
return dao.getAllDepartments();
    }


    
public Department getDepartment(Integer id) {
        
return dao.getDepartment(id);
    }


    
public void insert(Department dep) {
        dao.insert(dep);
    }


    
public void update(Department dep) {
        dao.update(dep);
    }


}

通過(guò)實(shí)現(xiàn)來(lái)看,DAO模式,思路清晰,但是實(shí)現(xiàn)起來(lái),還是比較麻煩的。
而ORM又幫助我們簡(jiǎn)化了什么,下回再續(xù)!

歡迎大家訪(fǎng)問(wèn)我的個(gè)人網(wǎng)站 萌萌的IT人