您的位置:首页 > 其它

Hibernate的学习之路三十(HQL的基本查询)、

2017-12-04 12:13 453 查看

前言

     这篇主要是接着上篇来说的。先贴出大致图。
     

技术分析之Hibernate框架的查询方式
1. 唯一标识OID的检索方式
* session.get(对象.class,OID)
2. 对象的导航的方式

3. HQL的检索方式
* Hibernate Query Language  -- Hibernate的查询语言

4. QBC的检索方式
* Query By Criteria -- 条件查询

5. SQL检索方式(了解)
* 本地的SQL检索


1.主要是用来主键查询,
2.对象导航查询,get对象里的对象。
3.数据全表查询。
4.条件查询
5.很少适用,自己封装sql。

这篇主要是写HQL查询。

分析

技术分析之HQL的查询方式概述
1. HQL的介绍
* HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似
* 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式

2. HQL与SQL的关系
* HQL 查询语句是面向对象的,Hibernate负责解析HQL查询语句, 然后根据对象-关系映射文件中的映射信息, 把 HQL 查询语句翻译成相应的 SQL 语句.
* HQL 查询语句中的主体是域模型中的类及类的属性
* SQL 查询语句是与关系数据库绑定在一起的. SQL查询语句中的主体是数据库表及表的字段


技术分析之HQL的查询演示
1. HQL基本的查询格式
* 支持方法链的编程,即直接调用list()方法
* 简单的代码如下
* session.createQuery("from Customer").list();

2. 使用别名的方式
* 可以使用别名的方式
* session.createQuery("from Customer c").list();
* session.createQuery("select c from Customer c").list();

3. 排序查询
* 排序查询和SQL语句中的排序的语法是一样的
* 升序
* session.createQuery("from Customer order by cust_id").list();

* 降序
* session.createQuery("from Customer order by cust_id desc").list();

4. 分页查询
* Hibernate框架提供了分页的方法,咱们可以调用方法来完成分页
* 两个方法如下
* setFirstResult(a)     -- 从哪条记录开始,如果查询是从第一条开启,值是0
* setMaxResults(b)      -- 每页查询的记录条数

* 演示代码如下
* List<LinkMan> list = session.createQuery("from LinkMan").setFirstResult(0).setMaxResults().list();

5. 带条件的查询
* setParameter("?号的位置,默认从0开始","参数的值"); 不用考虑参数的具体类型
* 按位置绑定参数的条件查询(指定下标值,默认从0开始)
* 按名称绑定参数的条件查询(HQL语句中的 ? 号换成 :名称 的方式)
* 例如代码如下
Query query = session.createQuery("from Linkman where lkm_name like ? order by lkm_id desc");
query.setFirstResult(0).setMaxResults(3);
query.setParameter(0, "%熊%");
List<Linkman> list = query.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}


代码

/**
* 按条件进行查询
*/
@Test
public void run6(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 查询联系人
Query query = session.createQuery("from Linkman l where l.lkm_id > ? and l.lkm_gender = ?");
// 传入
// query.setString(0, "男");
// 传入值
// query.setString("gender", "女");
// query.setLong(0, 2L);

// 通用的方法,就不用再判断具体的类型
query.setParameter(0, 3L);
query.setParameter(1, "女");

List<Linkman> list = query.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();
}

/**
* HQL分页查询的两个方法
* 	* setFirstResult(a)		-- 从哪条记录开始,如果查询是从第一条开启,值是0
* setMaxResults(b)		-- 每页查询的记录条数
*/
@Test
public void run5(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 查询联系人
Query query = session.createQuery("from Linkman l");

// 分页查询,调用方法,查询第一页的数据 1-3条
/*query.setFirstResult(0);
query.setMaxResults(3);*/

// 查询第二页的数据 query.setFirstResult(3);	(当前页-1)*pageSize=3
query.setFirstResult(3);
query.setMaxResults(3);

List<Linkman> list = query.list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();
}

/**
* 排序查询
* SQL:order by 字段 asc/desc;
* HQL:关键字是一样的,都是有order by 属性
*/
@Test
public void run4(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 查询联系人
List<Linkman> list = session.createQuery("from Linkman l order by l.lkm_id desc").list();
for (Linkman linkman : list) {
System.out.println(linkman);
}
tr.commit();
}

/**
* 是有别名的方式
* select * from cst_cutomer c
* select * from Customer 	语句错误的
*/
@Test
public void run3(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建HQL的查询的接口
List<Customer> list = session.createQuery("select c from Customer c").list();
for (Customer customer : list) {
System.out.println(customer);
}
tr.commit();
}

/**
* 支持方法链的编程风格
*/
@Test
public void run2(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建HQL的查询的接口
List<Customer> list = session.createQuery("from Customer").list();
for (Customer customer : list) {
System.out.println(customer);
}
tr.commit();
}

/**
* 基本的演示
*/
@Test
public void run1(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建HQL的查询的接口
Query query = session.createQuery("from Customer");
// 调用list()方法,查询
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}

tr.commit();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: