Hibernate的查询

来源:互联网 发布:windows api 关闭窗口 编辑:程序博客网 时间:2024/06/15 16:30

[TOC]
Hibernate的查询
1 hibernate的查询方式
2 HQL语句使用
3 QBC的语句使用
4 原生语句SQL语句使用
5 命名查询与参数绑定

           **hibernate的查询方式** 

一 hibernate的查询方式有:
HQL,Criteria,Query,原生SQL语句。
二 HQL语句的使用
1 HQL语句的使用过程:
获取Hibernate的Session对象;
调用session.createQuery(String hql)方法获取Query对象;
调用Query对象的相关方法执行hql语句;
Hibernate对hql语句进行解析,生成对应的SQL语句;
执行SQL语句,对执行结果进行解析并返回。

public class TestQuery extends BeaTest {
/**查询全部信息
*
*/
@Test
public void testQuery(){
Query query=session.createQuery(“from Employee”);
List list =query.list();
for(Employee emp:list){
System.out.println(emp);
}
}
三 Query接口常用的方法:
List list(); 执行HQL语句,以集合形式返回执行结果;列表查询
Object.uniqueResult 单一查询;
Object.setParmeter (); 参数邦定;
分页查询通用的方法:
query.setFristResult:查询记录起始结果索引。
query.setMaxResult:查询结果最大记录数。
/**
* 通用得分页方法
*/
@Test
public void testPagination(){
String hql=”from Employee “;
List list= session.createQuery(hql).setFirstResult(5).setMaxResults(5).list();
for(Employee err :list){
System.err.println(err);
}

    }  

四 HQL语句语法:
select[all|distinct] (不能带*号) 属性名(….) from 实体类名
1 where 条件表达式;
2 group by 分组 大多用于查询每个部门的什么什么信息;
3 order by asc 升序默认 desc 降序;
4 having 条件表达式;
5 between and 在什么跟什么之间的信息
6 like 模糊查询
7 in 在什么中的信息
distinct:消除重复结果,以行为单位;
all:默认,打印全部信息。

    /**     * where子查询 in, between and,like     */    @Test    public void testQuery5(){        String hql="from Employee where e_salary>2000";        hql="from Employee where e_jop='程序员'";        hql="from Employee where e_salary in(800,2000,2010)";        hql="from Employee where e_salary between 800 and 20000";        hql="from Employee where e_name like '%花%'";        Query query=session.createQuery(hql);        List<Employee> list=query.list();        for(Employee eq:list){            System.err.println(eq);        }    }

聚合函数:
/**
* 聚合函数
*/
@Test
public void testFunction(){
String hql=”select count(e_no),avg(e_salary),max(e_salary),min(e_salary) from Employee”;
Object[] obj=(Object[]) session.createQuery(hql).uniqueResult();
for(Object err :obj){
System.err.println(err);
}
}
group by 属性
/**
* group by 属性
*/
@Test
public void testGroup(){
String hql=”select avg(e_salary) from Employee group by dept”;
List list= session.createQuery(hql).list();
for(Double err :list){
System.err.println(err);
}
}
判断having:
/**
*判断 having表达式
*/
@Test
public void testHaving(){ String hql=”select avg(e_salary) from Employee group by dept having avg(e_salary)>3000 order by avg(e_salary) desc “;
List list= session.createQuery(hql).list();
for(Double err :list){
System.err.println(err);
}
}
参数绑定:
/**
* 参数绑定
*/
@Test
public void testParmenter(){
String hql=”from Employee where e_salary>? “;
List list= session.createQuery(hql).setParameter(0, 2000).list();
for(Employee err :list){
System.err.println(err);
}

    }     /**     * 命名参数     */    @Test    public void testNameParmenter(){        String hql="from Employee where e_salary>:sar ";        List<Employee> list= session.createQuery(hql).setParameter("sar", 3000).list();        for(Employee err :list){            System.err.println(err);        }    } 

五 连接查询
隐式连接查询 没用join关键字 内连接where子句中,关联当前对象关联的对象的非主键属性;
/**
* 隐式内连接
*/
@Test
public void testInnterinto(){
String hql=”from Employee e where e.dept.d_name=’SALES’ “;
List list= session.createQuery(hql).list();
for(Employee emp :list){
System.err.println(emp);

            }}

显示内连接 :fetch 消除多余的查询 放在join后
/**
* 显示内连接
*/
@Test
public void testJion(){
String hql=”from Employee e join e.dept “;
List

原创粉丝点击