1.List()与Iterator()区别
//list()方法每次查询发起1条查询语句,不会使用一级缓存 Session session = HibernateSessionFactory.getSession(); String hql = "FROM com.prj.bean.Employeeinfo"; Query query = session.createQuery(hql); List<Employeeinfo> employeeList = query.list(); //Iterator()方法第一次查询发起N+1条查询语句,在第二次以及之后的查询中,会使用一级缓存
2.?占位符的处理
Session session = HibernateSessionFactory.getSession(); String hql = "FROM com.prj.bean.Employeeinfo as emp where emp.job like ?"; Query query = session.createQuery(hql); //按照【位置】处理?号参数 query.setString(0, "%保安%"); List<Employeeinfo> employeeList = query.list();
Session session = HibernateSessionFactory.getSession(); String hql = "FROM com.prj.bean.Employeeinfo as emp where emp.salary between :paramMin and :paramMax"; Query query = session.createQuery(hql); //按照【名称】处理?号参数 query.setDouble("paramMin", 3000); query.setDouble("paramMax", 6000); List<Employeeinfo> employeeList = query.list();
3.高级查询,首先创建一个查询条件工具类:
package com.prj.bean; import java.sql.Timestamp; public class EmployeeCondition { private String employeeName; private double salaryMin; private double salaryMax; private Timestamp birthday1; private Timestamp birthday2; public String getEmployeeName() { return employeeName; } public void setEmployeeName(String employeeName) { this.employeeName = employeeName; } public double getSalaryMin() { return salaryMin; } public void setSalaryMin(double salaryMin) { this.salaryMin = salaryMin; } public double getSalaryMax() { return salaryMax; } public void setSalaryMax(double salaryMax) { this.salaryMax = salaryMax; } public Timestamp getBirthday1() { return birthday1; } public void setBirthday1(Timestamp birthday1) { this.birthday1 = birthday1; } public Timestamp getBirthday2() { return birthday2; } public void setBirthday2(Timestamp birthday2) { this.birthday2 = birthday2; } }
然后在在Dao里面编写查询方法:
package com.prj.dao.util; import java.util.HashMap; import java.util.List; import java.util.Map; import org.hibernate.Query; import org.hibernate.Session; import com.prj.bean.EmployeeCondition; import com.prj.bean.Employeeinfo; public class EmployeeDao { public List<Employeeinfo> queryEmployeeList1(EmployeeCondition condition){ String hql = "FROM Employeeinfo WHERE 1=1"; Map<String,Object> params = new HashMap<String,Object>(); if(condition.getEmployeeName() != null && !"".equals(condition.getEmployeeName())){ hql += " and employeeName = :paramEmpName"; params.put("paramEmpName", condition.getEmployeeName()); } if(condition.getSalaryMin() != 0 && condition.getSalaryMax() != 0){ hql += " and salary between :paramMin and :paramMax"; params.put("paramMin", condition.getSalaryMin()); params.put("paramMax", condition.getSalaryMax()); } if(condition.getBirthday1() != null && condition.getBirthday2() != null){ hql += " and birthday between :paramBrithday1 and :paramBrithday2"; params.put("paramBrithday1", condition.getBirthday1()); params.put("paramBrithday2", condition.getBirthday2()); } Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery(hql); //将保存有参数名称和参数值的map传入 query.setProperties(params); return query.list(); } public List<Employeeinfo> queryEmployeeList2(EmployeeCondition condition){ String hql = "FROM Employeeinfo WHERE 1=1"; if(condition.getEmployeeName() != null && !"".equals(condition.getEmployeeName())){ hql += " and employeeName = :employeeName"; } if(condition.getSalaryMin() != 0 && condition.getSalaryMax() != 0){ hql += " and salary between :salaryMin and :salaryMax"; } if(condition.getBirthday1() != null && condition.getBirthday2() != null){ hql += " and birthday between :birthday1 and :birthday2"; } Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery(hql); //将保存有参数名称与属性名称一致的条件对象传入 query.setProperties(condition); return query.list(); } }