使用HQL语句
hibernate支持的三种查询语句:HQL查询,Criteria查询即原生SQL(Native)查询
查询
两种方式执行插叙语句并获得查询语句: list(), iterate()方法
区别:
list()方法返回的是一条SQL查询语句,查询所有符合条件的记录, iterate 方法
首先查询所有符合条件的主键值,然后在需要某以对象的其他属性值时,才能生成主键查询的SQL语句,所有当查询出主键的内容是,会生成1+N条HQL语句
绑定参数
1.按参数位置绑定(?占位符)
Query query=session.cretaeQuery(“from Emp where job =? and salary>?”);
query.setstring(0,job);
query.setstring(1,salary);
2.按参数绑定
Query query=session.cretaeQuery(“from Emp where job = :empJob and salary >:empSalary”);
query.setstring("empJob",emoJob);
query.setDouble("empSalary",empSalary);
3.按对象绑定
public List<Emp> findEmp(Emp emp) {
String hql = "from Emp where job=:job and sal>:sal";
Query query = currentSession().createQuery(hql);
query.setProperties(emp);
return query.list();
}
4.动态查询
tx = empDao.currentSession().beginTransaction();
StringBuilder hql = new StringBuilder("from Emp as emp where 1=1");
if (emp.getJob() != null && emp.getJob().length() > 0) {
hql.append(" and emp.job=:job");
}
if (emp.getSal() != 0) {
hql.append(" and emp.sal>:sal");
}
if (null != emp.getHireDateStart()) {
hql.append(" and emp.hireDate>:hireDateStart");
}
if (null != emp.getHireDateEnd()) {
hql.append(" and emp.hireDate<:hireDateEnd");
}
emps = empDao.findByEmp(hql.toString(), emp);
5.使用uniqueResult()方法获取唯一值
public Long count(double sal) {
String hql = "select count(id) from Emp where sal>=:sal";
return (Long) currentSession().createQuery(hql).setDouble("sal", sal)
.uniqueResult();
}
注意:当查询结果不唯一,则不发生报错
分页
setFirstResult() 设置需要返回的第一条记录的位置
setMaxResults() 最大记录条数
public List<User> selectFenYe(int pageNo, int pageSize) {
String hql = "select new User(name,telephone) from User";
return currentSession().createQuery(hql)
.setFirstResult((pageNo - 1) * pageSize)
.setMaxResults(pageSize).list();
}
投影
(1).返回一个结果集
public List<String> select() {
String hql = "select deptnaem from User";
return currentSession().createQuery(hql).list();
}
(2)返回不止一个结果列
public List<Object[]> select() {
String hql = "select deptno,deptname from User";
return currentSession().createQuery(hql).list();
}
(3)通过构造方法封装对象
public List<Dept> select() {
String hql = "select new User(name,telephone) from User";
return currentSession().createQuery(hql).list();
}