我有一个Web界面(jsp),两个表(mysql),我正在处理Java。
第一个表包含员工详细信息,第二个表包含项目详细信息。
这两个表都由empId
和prjId
交叉引用。
在网络上,我想提供一个界面,用户可以根据emp_name(empTable)
,prj_name(prjTable)
,technology(empTable)
或这些字段的组合搜索任何员工。< / p>
首先,我想到使用连接但不能正常工作。 后来我想到创建一个额外的表包含完整的细节,然后应用搜索查询,但它在我尝试组合搜索时创建问题。 最后我将尝试编写复杂的搜索查询和嵌套查询,但这非常复杂,这就是为什么在编写quires之前我认为最好在此处询问是否有更好的方法。
提前致谢!!!
答案 0 :(得分: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
和Project
。另请注意,EmployeeService
与员工活动有关 - 因此,您也可以要求其为员工获取项目。它可以将此查询委托给ProjectDAO
来执行。
重点是,您保持界面清晰的查询细节,并隐藏下面数据的区别。服务提供访问。 DAO
提供数据访问权限。数据本身位于模型oblects - Employee
和Project
中。您可以根据需要选择在Employee
课程内外保留Project
Employee
个数据。有权衡。
另请注意,DAO
已经被对象关系框架的概念所取代 - 其中底层数据库结构映射到真实对象,框架管理集成。请参阅java世界中的 JPA (Java持久性框架)和 Hibernate (尽管我为Apple的旧EOF框架提供了什么!)。
在原始JDBC和JPA(或Hibernate)之间进行选择是一个权衡问题。简单性可能适用于JDBC。在任何一种情况下,如果你正在学习 - 从JDBC方法开始,这样你就可以知道底层发生了什么,然后使用JPA重新实现你的服务。
这应该可以为您提供一些方法来指导您完成所需的操作。后续问题可能是让您的JSP不直接使用您的bean(您的服务)。您可以改为使用 ReST服务。