搜索不同表的多个字段

时间:2015-10-29 13:55:53

标签: java mysql search

我有一个Web界面(jsp),两个表(mysql),我正在处理Java。

第一个表包含员工详细信息,第二个表包含项目详细信息。 这两个表都由empIdprjId交叉引用。

在网络上,我想提供一个界面,用户可以根据emp_name(empTable)prj_name(prjTable)technology(empTable)或这些字段的组合搜索任何员工。< / p>

首先,我想到使用连接但不能正常工作。 后来我想到创建一个额外的表包含完整的细节,然后应用搜索查询,但它在我尝试组合搜索时创建问题。 最后我将尝试编写复杂的搜索查询和嵌套查询,但这非常复杂,这就是为什么在编写quires之前我认为最好在此处询问是否有更好的方法。

提前致谢!!!

1 个答案:

答案 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 {         ...     }

您可以看到上面的接口指示了一个类来封装您正在处理的数据 - EmployeeProject。另请注意,EmployeeService与员工活动有关 - 因此,您也可以要求其为员工获取项目。它可以将此查询委托给ProjectDAO来执行。

重点是,您保持界面清晰的查询细节,并隐藏下面数据的区别。服务提供访问。 DAO提供数据访问权限。数据本身位于模型oblects - EmployeeProject中。您可以根据需要选择在Employee课程内外保留Project Employee个数据。有权衡。

另请注意,DAO已经被对象关系框架的概念所取代 - 其中底层数据库结构映射到真实对象,框架管理集成。请参阅java世界中的 JPA (Java持久性框架)和 Hibernate (尽管我为Apple的旧EOF框架提供了什么!)。

在原始JDBC和JPA(或Hibernate)之间进行选择是一个权衡问题。简单性可能适用于JDBC。在任何一种情况下,如果你正在学习 - 从JDBC方法开始,这样你就可以知道底层发生了什么,然后使用JPA重新实现你的服务。

这应该可以为您提供一些方法来指导您完成所需的操作。后续问题可能是让您的JSP不直接使用您的bean(您的服务)。您可以改为使用 ReST服务