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

来源:互联网 发布:php正规替换 编辑:程序博客网 时间:2024/05/22 11:38
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集合}}