1.HQL简介:HQL是Hibernate Query Language(Hibernate 查询语言)的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。 HQL 查询被 Hibernate 翻译为传统的 SQL 查询从而对数据库进行操作。

HQL的基本语法:

public class HQLTest {

    @Test
/**
* HQL无条件查询
*/
public void select() {
  
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); List<Customer> list = session.createQuery(" from Customer").list(); list.forEach(System.out::println); tx.commit();
} @Test
/**
* HQL别名查询
*/
public void select2() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); List<Customer> list = session.createQuery("select c from Customer c").list(); list.forEach(System.out::println); tx.commit();
} @Test
/**
* HQL排序查询
*/
public void sort() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); List<LinkMan> list = session.createQuery(" from LinkMan order by lkm_id desc").list(); list.forEach(System.out::println); tx.commit(); } @Test
/**
* HQL 多条件查询
*/
public void conditionSelect() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
//按位置绑定
/*Query query = session.createQuery(" from LinkMan where lkm_id=? and lkm_phone=?");
query.setParameter(0,20L);
query.setParameter(1,"2");
List<LinkMan> list = query.list();*/ //按名称绑定
Query query = session.createQuery(" from LinkMan where lkm_id= :a and lkm_phone= :b");
query.setParameter("a", 20L);
query.setParameter("b", "2");
List<LinkMan> list = query.list(); list.forEach(System.out::println); tx.commit(); } @Test
/**
* HQL投影查询 查询部分字段
*/
public void select3() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); //查询一个字段
//List<Object> list = session.createQuery(" select l.lkm_id from LinkMan l").list(); //查询多个字段
//List<Object[]> list = session.createQuery(" select l.lkm_id,l.lkm_name from LinkMan l").list(); //查询多个属性,分装到对象中去 需要有参构造方法
List<LinkMan> list = session.createQuery(" select new LinkMan(lkm_id,lkm_name) from LinkMan").list(); list.forEach(System.out::println); tx.commit(); } @Test
/**
* HQL分页查询
*/
public void limiter() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Query query = session.createQuery(" from LinkMan ");
query.setFirstResult(0);
query.setMaxResults(10);
List<LinkMan> list = query.list(); list.forEach(System.out::println); tx.commit();
} @Test
/**
* HQL分组统计查询
*/
public void count() { //聚合函数的使用:count(),max(),avg(),,sum();
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); //统计查询
//Object uniqueResult = session.createQuery(" select count(*) from LinkMan ").uniqueResult(); //分组统计查询
List list = session.createQuery(" select lkm_name,count(*) from LinkMan group by lkm_phone having count(*)>=2").list(); list.forEach(System.out::println); tx.commit();
}
}                            

HQL的多表查询

@Test
/**
* HQL的多表查询
*/
public void select4() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); //HQL:内连接 得到的是一个List<Obcect[]>
//List list = session.createQuery("from Customer c join c.linkMans").list(); //HQL:迫切内连接 得到的是一个List<Customer> 就是吧得到的两个表的数据分装到一个对象中去
List<Customer> list = session.createQuery("from Customer c join fetch c.linkMans").list(); list.forEach(System.out::println); tx.commit(); }

2.QBC简介:QBC(Query By Criteria) API提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Expresson类组成,它支持在运行时动态生成查询语句。

  1>调用Session的createCriteria()方法创建一个Criteria对象。
  2>设定查询条件。Restrictions类提供了一系列用于设定查询条件的静态方法,
  这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。
  Criteria的add()方法用于加入查询条件。
  3>调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在
  List集合中存放了符合查询条件的持久化对象。
QBC的基本语法:
 @Test
/**
* QBC查询所有
*/
public void selectAll() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(LinkMan.class);
List list = criteria.list(); list.forEach(System.out::println);
tx.commit(); } @Test
/**
* QBC多条件查询
* = eq
* > gt
* >= ge
* < lt
* <= le
* <> ne
* like
* in
* and
* or
*/
public void select2() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(LinkMan.class);
criteria.add(Restrictions.eq("lkm_phone","1"));
criteria.add(Restrictions.like("lkm_name","%1"));
List list = criteria.list(); list.forEach(System.out::println);
tx.commit(); } @Test
/**
* 离线条件查询
*/
public void detachedSelect() { //在service层将多条件查询分装好 直接传入dao层进行查询 //service层
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(LinkMan.class);
detachedCriteria.add(Restrictions.like("lkm_name","%1")); //dao层
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = detachedCriteria.getExecutableCriteria(session);
List list = criteria.list(); list.forEach(System.out::println); } @Test
/**
* QBC分页查询
*/
public void pagingSelect() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(LinkMan.class);
criteria.setFirstResult(0);
criteria.setMaxResults(10);
List list = criteria.list(); list.forEach(System.out::println);
tx.commit(); } @Test
/**
* QBC排序
*/
public void sort() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(LinkMan.class);
List list = criteria.addOrder(Order.desc("lkm_id")).list(); list.forEach(System.out::println);
tx.commit(); }

3.HQL查询

@Test
public void select() { Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
//addEntity()将查询到的数据分装到一个实体中去
List<Object> list = session.createSQLQuery("select * from cst_customer").addEntity(Customer.class).list(); list.forEach(System.out::println);
tx.commit(); }                                       

hibernate_05_hibernateHQL查询QBC查询和SQL查询的更多相关文章

  1. Atitit oodbms的查询,面向对象的sql查询jpa jpql hql

    Atitit oodbms的查询,面向对象的sql查询jpa jpql hql 1.1. 标准API历史1 1.2. JPA定义了独特的JPQL(Java Persistence Query Lang ...

  2. 视图查询的数据和sql查询的数据不一样

    视图查询的数据和sql查询的数据不一样. 手动刷新视图 exec sp_refreshview  视图名称

  3. 发送json-简单的传参查询和简单的sql查询

    简单的传参查询并转化为json using System; using System.Collections.Generic; using System.Linq; using System.Web; ...

  4. (25)ASP.NET Core EF查询(复杂查询运算符、原生SQL查询、异步查询)

    1.复杂查询运算符 在生产场景中,我们经常用到LINQ运算符进行查询获取数据,现在我们就来了解下生产场景经常出现几种复杂查询运算符. 1.1联接(INNER JOIN) 借助LINQ Join运算符, ...

  5. 数据库查询性能 LinqDB vs Sql查询

    使用LinqDB查询Sqlite数据库数据,不管是大数据还是少量的数据,感觉特别耗时,尤其是首次查询 一个含有2.7万条数据的数据表 首次查询: 查询2.7万条数据,耗时1s 查询指定的1条数据,也要 ...

  6. 关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName .

    parentid是1就是id为1的公司的子公司 如图 查询出所有的信息后 由于我要呈现的是parentName 不是parentId所以想问下SQL语句怎么写 谢谢啦~~:) 解法: SELECT s ...

  7. Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

    Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...

  8. Hibernate SQL查询 addScalar()或addEntity()

    本文完全引用自: http://www.cnblogs.com/chenyixue/p/5601285.html Hibernate除了支持HQL查询外,还支持原生SQL查询.          对原 ...

  9. hibernate使用原生SQL查询返回结果集的处理

    今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...

  10. hibernate sql查询

    如果你跟我一样比较熟悉SQL,同时不想学习一门新的语言.那么在hibernate中使用Native SQL 查询也是一种不错的方式. 一方面,Native SQL在效率方面有天生的优势: 另一方面,S ...

随机推荐

  1. Windows server 2016 / Windows 10关于域管理员帐号权限不足的问题

    今天在测试windows server 2016的域创建时,当安装结束之后,发现使用Administrator用户进行操作时,被提示了权限不足这个问题.于是我在百度上查找了一番之后,找到了解决方法. ...

  2. 利用ffmpeg进行视频软解播放

    前段时间,公司的一个项目需要一个rtsp的播放库,原本打算直接用vlc播放的,但我觉得vlc太庞大了,很多功能没必要,还不如用ffmpeg+d3d简单的实现一个库,因此就有了今天讲的这个东西.一个解码 ...

  3. GitHub不能访问问题

    在C:\Windows\System32\drivers\etc文件夹下HOSTS里面最后添加: 192.30.253.112 github.com 192.30.253.113 github.com ...

  4. jq-demo-2种吸顶效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. cin,cout优化

    https://www.cnblogs.com/PrayG/p/5749832.html ios_base::sync_with_stdio(0);    cin.tie(0); 涨知识了

  6. Android Studio Download

    { https://developer.android.google.cn/studio }

  7. PDO基础

    //PDO:数据访问抽象层 $dsn = "mysql:dbname=mydb;host=localhost";//造PDO对象 $pdo = new PDO($dsn," ...

  8. NX二次开发-设置对象名称函数UF_OBJ_set_name

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> UF_initialize( ...

  9. 2019 牛客多校第一场 C Euclidean Distance ?

    题目链接:https://ac.nowcoder.com/acm/contest/881/C 题目大意 给定 m 和 n 个整数 ai,$-m \leq a_i \leq m$,求$\sum\limi ...

  10. Hadoop节点集群挂了,Hbase数据源损坏怎么办

    今天集群节点一下子挂了5台,hbase的数据块也损坏. hadoop日志 .0.15:36642 dest: /ip:50010 2014-08-26 15:01:14,918 WARN org.ap ...