HQL-Query查询中的占位符处理到动态分页查询

//查询语句:采用别名(:ename)代替(?),set时不再使用位置参数下标,而是命名参数别名来赋值。

	public void queryDept(){
		session=HibernateUtil.getSession();
		sql="from Dept where deptName=:deptname";
		Query query=session.createQuery(sql);
		query.setString("deptname", "SALES");
		List dlist=query.list();
		for(Dept d:dlist){
			System.out.println(d.getDeptName());
			
		}
		HibernateUtil.closeSession();
		
	}

//采用setParameter()方法进一步简化占位符赋值

query.setParameter("deptname", "SALES");

//批量添加参数:采用条件类setProperties()方法进一步简化占位符赋值,可以实现动态组合查询。

1.	创建一个条件类,把命名参数别名作为类的私有属性;
2.	添加一个全体属性的构造函数;
3.	setPropertiest(obj);
public void queryDept() {
		session = HibernateUtil.getSession();
		sql = "from Dept where deptName=:deptName";
		String deptName = "SALES";
		DeptCondition dc = new DeptCondition(deptName);
		Query query = session.createQuery(sql);
		query.setProperties(dc);
		List dlist = query.list();
		for (Dept d : dlist) {
			System.out.println(d.getDeptNo());

		}
		HibernateUtil.closeSession();

	}

动态查询
//动态查询

public void qdept(){
		DeptCondition dc=new DeptCondition();
		dc.setDeptNo(new Byte("20"));
		session = HibernateUtil.getSession();
		StringBuffer sb = new StringBuffer("from Dept where 1=1");

//动态条件添加,一个查询语句完成大多数查询任务

		if(dc.getDeptNo()>0){
			sb.append("and deptNo>:deptNo");
		}
		sql=sb.toString();
		Query query=session.createQuery(sql);
		query.setProperties(dc);
		List dlist=query.list();
		for(Dept d:dlist){
			
			System.out.println(d.getDeptName());
		}
		
	}

//HQL中分页查询的实现

Query query=session.createQuery(sql);
		query.setProperties(dc);
		query.setFirstResult(0);
		query.setMaxResults(2);
		List dlist=query.list();
//统计记录数
	public void countDept(){
		session=HibernateUtil.getSession();
		sql="select count(*) from Dept";
		Query query=session.createQuery(sql);
		int num=((Long)query.uniqueResult()).intValue();
		System.out.println(num);
		session.close();
	}

//查询一列

	public void qOneDept(){
		session=HibernateUtil.getSession();
		sql="select deptNo from Dept";
		Query query=session.createQuery(sql);
		List objArr= query.list();
		for(Byte b:objArr){
			System.out.println(b);
		}
		HibernateUtil.closeSession();		
	}

//查询部分列—投影查询(List

	public void qSomeDept(){
		session=HibernateUtil.getSession();
		sql="select deptNo,deptName from Dept";
		Query query=session.createQuery(sql);
		List objArr= query.list();
		for(Object[] obj:objArr){
			System.out.println(obj[0]+","+obj[1]);
		}
		HibernateUtil.closeSession();		
	}
	//通过迭代器查询
	public void qDeptByIt(){
		
		session=HibernateUtil.getSession();
		sql="from Dept";
		Query query=session.createQuery(sql);
		 Iterator it=  query.iterate();
		while(it.hasNext()){
			Dept d=it.next();
			System.out.println(d.getDeptName());
		}
		HibernateUtil.closeSession();	
	}

 HQL(Hibernate Query Language)是面向对象的查询语句
 执行HQL语句可以采用两种方式:
 list()方法
 iterator()方法
 HQL语句中绑定参数的形式有两种:
 按参数位置绑定
 按参数名字绑定
 HQL支持投影查询、参数查询、分页查询等功能。

HQL-Query查询中的占位符处理到动态分页查询_第1张图片

你可能感兴趣的:(Hibernate)