mysql - 如何从 hibernate 表中选择多条记录

标签 mysql spring hibernate spring-mvc

我正在尝试从网页表单中获取多个值并使用 hibernate 查询从数据库中搜索值并检索结果并将其显示在新页面中。

enter image description here

我需要获取这些文本字段,即使任何字段为空,我也需要通过 Controller 在数据库中运行搜索查询并在新页面中返回结果集。我试图将结果存储在 ArrayList 的数组列表中,但它没有用。谁能帮帮我?

我正在尝试从 Controller 中的网页获取文本值:

String lastname = request.getParameter("lastname");
String firstname = request.getParameter("firstname");
String gender = request.getParameter("gender");
String speciality = request.getParameter("speciality");
String keyword = request.getParameter("keyword");

我有医生的表格,其中存储了所有这些文本字段。姓氏、名字、性别、专业。我有一个名为 doctor 的类,它链接到数据库。

@Entity 
@Table(name="DOCTOR_DETAILS")
public class Doctor {

  @Id
  @Column (nullable=false)
  private int npi;
  @Column (nullable=false)
  private String firstName;
  @Column (nullable=false)
  private String lastName;
  @Column (nullable=false)
  private String gender;
  @Column (nullable=false)
  private String speciality;
  public int getNpi() {
    return npi;
  }
  public void setNpi(int npi) {
    this.npi = npi;
  }
  public String getFirstName() {
    return firstName;
  }
  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }
  public String getLastName() {
    return lastName;
  }
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getGender() {
    return gender;
  }
  public void setGender(String gender) {
    this.gender = gender;
  }

  public String getSpeciality() {
    return speciality;
  }
  public void setSpeciality(String speciality) {
    this.speciality = speciality;
  } 

}

我需要运行一个选择查询来从表中检索记录。即使 4 个字段中的任何一个为空,查询也应该检索记录。

try {
  begin();
  ArrayList <String> cntList = new ArrayList<String>();
  Query q = getSession().createQuery("select * from   
  doctor where lastName = :lastName or firstName =:firstName or    
  gender=:gender or speciality = :speciality");
  q.setString("username", username);
  cntList = (ArrayList<String>) q.list();
  commit();
  return cntList;
}    

我尝试了以下使用 Hibernate 条件的方法,但出现错误。我哪里出错了吗?

我在我的 Controller 中写了下面的代码:

enter image description here

下面是连接到数据库的 DAO 类中的部分。

enter image description here

但我遇到以下错误:

enter image description here

你能帮帮我吗?

代码运行良好并返回了结果列表。我尝试按照教程点站点中提供的步骤进行操作,但出现转换错误。 “类型不匹配:无法从 int 转换为 doctor。

类型不匹配要求我更改 医生 doctor = iterator.next(); 到 int doctor = iterator.next();

这有点奇怪,因为我无法从 Doctor 类中检索值。

enter image description here

最佳答案

您应该使用带析取的 Hibernate 条件查询。它被设计用来处理这种情况。试试这个代码片段

    public List<Doctor> getSearchResult(String firstName, String lastName, String gender, String speciality, Session session) {
      Criteria cr = session.createCriteria(Doctor.class);
      Disjunction or = Restrictions.disjunction();

      if (firstName != null)
        or.add(Restrictions.ilike("firstName", firstName+"%"));
      if (lastName != null)
        or.add(Restrictions.ilike("lastName", "%"+lastName));
      if (gender != null)
        or.add(Restrictions.eq("gender", gender));
      if (speciality != null)
        or.add(Restrictions.ilike("speciality", "%"+speciality+"%"));

      cr.add(or);

      return (List<Doctor>) cr.list();
    }

您可以了解 Hibernate Criteria 查询 here .

关于mysql - 如何从 hibernate 表中选择多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29585634/

相关文章:

hibernate - AliasToBeanResultTransformer(MyDTO.class)无法实例化MyDTO

java - 如何使用 Spring、Hibernate 3.3 和 c3p0 配置 MySQL 连接属性?

spring - 如何在gradle spring boot devtools中预处理资源?

java - API 服务每隔一个请求工作一次

java - Hibernate:子集合的级联删除

java - Spring应用程序上下文无法在maven资源文件夹下找到属性文件

mysql - 两个很长的 IN 或 WHERE SQL 语句,90,000 行查询?

mysql - Left Join 以附加具有日期范围的相同表格

php - 获取sql查询的开始/结束时间

spring - MongoDb Spring 存储库的 @Query 命名参数