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集合
}
}
hibernate动态hql查询,分页查询,调用方法即可查询
最新推荐文章于 2021-03-03 14:40:52 发布