2015-10-29 60 views
0

我有一個web界面(jsp),兩個表(mysql),我正在處理Java。在不同表格的多個字段上搜索

第一個表由員工詳細信息組成,第二個表包含項目詳細信息。 這兩個表格均由empIdprjId進行交叉引用。

在網絡上,我想給出一個界面,用戶可以從emp_name(empTable)prj_name(prjTable)technology(empTable)或這些字段的組合的基礎上搜索任何員工的界面。

首先,我想到了與連接但不工作。 後來我想創建一個額外的表格組成完整的細節,然後對其應用搜索查詢,但是當我試圖結合搜索時它創建問題。 最後,我會嘗試編寫複雜的搜索查詢和嵌套查詢,但這確實很複雜,這就是爲什麼在寫出這些問題之前,我認爲最好在這裏問一下,如果有更好的方法。

在此先感謝!

+0

你使用了什麼樣的後端? Spring MVC?如果是這樣,請使用hibernate –

+0

連接有什麼問題?它只有2桌。 –

回答

0

取決於您希望客戶使用「服務」的方式。

舉例來說,你可以提供一個EmployeeService接口:

public interface EmployeeService { 
    public Employee getEmployee(int empId); 
    public Employee getEmployee(String name); 
    public List<Project> getProjects(int empId); 
} 

或許也是一個ProjectService

這些類的
public interface ProjectService { 
    public List<Project> getProjects(); 
    public List<Project> getProjects(int projectId); 
} 

可以實現任何你想要的工作。如果這是一個簡單的模型,那麼您可以考慮放入一個處理查詢模型(表格)部分的抽象。在此之前,數據訪問對象模式(DAO):

public class EmployeeServiceImpl implements EmployeeService { 
    private EmployeeDAO employeeDao = ...; 

    public Employee getEmployee(int empId) { 
     return employeeDao.getEmployee(empId); 
    } 
    ... 
} 

和支持EmployeeDAO

public class EmployeeDAOImpl implements EmployeeDAO { 
    public Employee getEmployee(int empId) { //try/catch omitted 
     Statement stmt = conn.prepareStatement(...); 
     ... 
     ResultSet rs = stmt.execute(); 
     return buildEmployee(rs); 
    } 

    //etc... 
} 

而且ProjectDAO: 公共類ProjectDAOImpl實現ProjectDAO { ... }

你可以看到上面的接口指出了一個類來封裝你正在處理的數據 - Employee s和Project s。另請注意,EmployeeService屬於員工活動 - 因此,您還可以要求它爲員工獲得項目。它可以將此查詢委託給ProjectDAO執行。

重點是,你保持你的界面乾淨的查詢細節,並隱藏下面的數據的區別。服務提供訪問權限。 DAO提供數據訪問。數據本身收藏在模型中 - EmployeeProject。如您所願,您可以選擇在Employee類的內部或外部保存Employee s Project數據。有折衷。

還要注意的是,DAO已被對象關係框架的概念所取代 - 其中底層數據庫結構映射到實際對象以及由框架管理的集成。請參閱JPA(Java持久框架)和Hibernate在java世界(儘管我給蘋果的舊EOF框架!)。

雖然在原始JDBC和JPA(或Hibernate)之間進行選擇是一個權衡問題。簡單性可能適用於JDBC。在任何一種情況下,如果您正在學習 - 首先使用JDBC方法,以便了解底層的情況,然後使用JPA重新定義您的服務。

這應該有希望給你一些方法來指導你做後續操作。後續的一點可能是讓你的JSP不能直接使用你的bean(你的服務)。您可以改爲ReST服務