Hibernate查询技术

Hibernate查询方式简介

    除了可以通过Session接口提供get()和load()方法获取指定ID的实体对象外,Hibernate提供了丰富的查询方式供开发者灵活应用,常见的查询方式有HQL、Criteria Query查询和原生SQL语句查询方式。

HQL语法查询

HQL简介

    Hibernate官方提供的类似于SQL语言语法的面向对象数据查询方式,HQL功能强大,目前不仅仅支持查询语句,也支持更新和删除操作。

HQL使用过程

    1.获取Hibernate的Session对象
    2.调用session.createQuery(String hql)方法获取Query对象
    3.调用Query对象的相关方法执行hql语句
    4.Hibernate对hql语句进行解析,生成对应的SQL语句
    5.执行SQL语句,对执行结果进行解析并返回
@Test
    public void testHQL(){
        //编写hql语句
        String hql = "from Employee";
        //调用session.createQuery(String hql)方法获取Query对象
        Query query = session.createQuery(hql);
        //调用Query对象的相关方法执行hql语句
        List<Employee> list = query.list();
    }

Query接口

1. org.hibernate.Query
2. 通过session.createQuery(String hql)获取Query接口的实例
3. 与session.load()和session.get()相比,它提供了更为强大的查询功能如:Hibernate通用的分页实现、参数绑定、返回可滚动的结果集等
方法列表方法说明
List< E> list()执行HQL语句,以List集合形式返回执行结果
Object uniqueResult()执行HQL语句,返回单个执行结果
Iterator< E> iterator()执行HQL语句,返回结果迭代器对象
Query setFirstResult(int firstResult)设置查询结果的起始记录索引,用于分页
Query setMaxResults(int maxResults)设置查询结果的最大记录数,用于分页

HQL语法

1. from语句的使用

1. from为HQL关键字,HQL关键字不区分大小写
2. 注意的是Department不是表名,而是类名该HQL的作用类似于select * from dept;
/**
 * from语句的使用
 */
@Test
public void testHQL(){
    //编写hql语句
    String hql = "from Department";
    //调用session.createQuery(String hql)方法获取Query对象
    Query query = session.createQuery(hql);
    //调用Query对象的相关方法执行hql语句
    List<Department> list = query.list();
}

2. 查询指定的属性

select dname,dname from Department
其中查询出的每一行记录都是一个数组
/**
 * 查询指定属性的语句
 */
@Test
public void testQuery01(){
    String hql = "select deptno,dname from Department";
    Query query = session.createQuery(hql);
    //注意此时返回的不是Department对象,而是Object[]数组
    //在本例中每一个Object[]中有两个元素,分别是deptno以及对应的dname
    List<Object[]> list = query.list();
}
也可以将指定的记录封装为对象,需要在Department类中定义对应的有参构造方法,一定注意定义完构造方法后,一定也为该类提供无参构造方法。
/**
 * 查询指定属性的语句
 */
@Test
public void testQuery02(){
    String hql = "select new Department( deptno,dname) from Department";
    Query query = session.createQuery(hql);
    List<Department> list = query.list();
}

3. 聚合函数
4. 聚合函数
5. 筛选查询结果
6. delete语句
7. update语句

HQL高级查询

1. 连接查询

1.1 隐式连接查询

1.2显式连接查询

2. HQL分页查询语句
3. 立即抓取关联对象
4. 参数绑定
5. 命名参数
6. 命名查询


QBC语句查询

QBC查询

  1. Query by Criteria
  2. 以更加面向对象的方式进行数据库查询操作

    @Test
    public void testCriteria(){
        Criteria c = session.createCriteria(Employee.class);
        List<Employee> list = c.list();
        for(Employee emp : list){
            System.out.println(emp);
        }
    }

QBC查询条件

1. Criteria查询的查询条件由Criterion接口的某一个实现类实现,通过Criteria对象的add(Criterion c)方法添加查询条件。
2. Restrictions类提供创建各种查询条件(Criterion)对象的方法
@Test
    public void testCriterion(){
        Criteria c = session.createCriteria(Employee.class);
        c.add(Restrictions.between("sal",3000,5000));
        c.add(Restrictions.isNotNull("comm"));
        c.add(Restrictions.like("ename","张",MatchMode.ANYWHERE));
        c.addOrder(Order.asc("sal"));
        c.addOrder(Order.desc("hiredate"));
        c.setFirstResult(0).setMaxResults(10);
        List<Employee> list = c.list();
    }

样例查询

1. 未完待续
2. 阿斯蒂芬
这里写代码片

QBC立即获取关联对象

QBC统计

QBC分组统计


原生SQL查询


hibernate查询方法选择的建议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值