hibernate动态hql查询,分页查询,调用方法即可查询

package com.starry.dao;

import java.util.List;

import org.hibernate.Session;

import com.starry.entity.Emp;
import com.starry.query.QueryParameter;

public class EmpDao {

	/**
	 * 按条件查询
	 * 传进来一个自定义的对象  里面有(例如:定义最大值,最小值 ,名字等,可以放在sql中使用)
	 * */
	public List<Emp>  query(QueryParameter qp){
		
		Session session = HibernateSessionFactory.getSession();
		StringBuffer sb=new StringBuffer();
		//这个from里面的Emp不是数据库里面emp表,是你定义的实体类里面的Emp,注意大小写
		//写个where  语句 ,在下面if没有执行的情况下也不会报错
		sb.append("from Emp where 1=1 ");
		//判断你传进来的qp对象中的ename有参数没有,有的话就放到下面的sql语句中
		//传进来的qp.getEname 相当于放到语句中的   (:ename)的值
		if(qp.getEname()!=null){
			 sb.append("and ename like :ename ");
		}
		if(qp.getDeptno()!=null){
			sb.append("and deptno = :deptno ");
		}
		if(qp.getMinempno()!=null){
			sb.append("and empno >= :minempno ");
		}
		if(qp.getMaxempno()!=null){
			sb.append("and empno <= :maxempno ");
		}
		if(qp.getMinsal()!=null){
			sb.append("and sal >= :minsal ");
		}
		if(qp.getMaxsal()!=null){
			sb.append("and sal <= :maxsal ");
		}
	
		
		
		return  session.createQuery(sb.toString())
				.setProperties(qp)//将命名参数与一个对象的属性值绑定在一起!
				.list();
	}
	
	/**
	 * 根据某个条件查询单条数据
	 * 问了区分清楚  我写了一个B  一个C
	 * */	
	public List<Object[]> selOne(Byte c){
		Session session =HibernateSessionFactory.getSession();
		return  (List<Object[]>)session.createQuery("select ename,sal from Emp where deptno=:b")
				.setParameter("b", c)
				.list();
	}
	
	
	
	
	
	/**
	 * 查询总条数
	 * 返回值需要时long类型,要不在调用方法的时候会报错,类型不匹配
	 * */	
	public Long getcount(){
		Session session =HibernateSessionFactory.getSession();
		return (Long)session.createQuery("select count(e) from Emp e")
				.uniqueResult();//当确定返回的实例只有一个或者null时 用uniqueResult()方法
	}
	
	
	
	
	
	/**
	 * 分页查询
	 * 传进来一个页码和每页显示的条数
	 * */
	public List<Emp> selPage(int page,int maxResults){
		Session session = HibernateSessionFactory.getSession();
		
		int firstResult=(page-1)*maxResults;//每页显示的开始位置,相当于(页码-1)*每页条数
		return session.createQuery("from Emp")
				.setFirstResult(firstResult)//设置开始的位置
				.setMaxResults(maxResults)//设置每页显示多少条数据
				.list();//返回多个值使用list方法生成一个list集合
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值