首页 > 技术文章 > Hibernate【查询】

lwd0912 2016-07-25 22:45 原文

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();
	}
	
}

 

推荐阅读