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. touch - 修改文件的时间戳记.

    总览 touch [-acm][-r ref_file(参照文件)|-t time(时间值)] file(文件名)... 被废弃的版本: touch [-acm][ugly_time] file(文件 ...

  2. C#链接Mysql

    先在网上找到Mysql.Data.dll组件, 文件下载地址为http://dev.mysql.com/downloads/connector/net/6.6.html#downloads ,下载平台 ...

  3. CentOS7.6编译安装openssl-1.1.1c

    卸载旧版本OpenSSL # which openssl/usr/bin/openssl# mv openssl openssl.oldrm -rf /etc/ssl #删除配置文件 CentOS7. ...

  4. LNMP部署

    部署企业LNMP架构 源码包:nginx-* ; mysql-* ; php-* ; boost-* ; zend-loader-php5.6-linux-* ;yum软件: pcre-devel z ...

  5. robotframework+python3+selenium之下拉框的选择---第五集

    由于我没有找到option形式的,所以借鉴其他大神的博客内容,如下: 1.F12后看见下拉框的源码是<option xxx> 2.如果F12后看到的下拉源码是这样的: <div xx ...

  6. map 结构体

    map<node,int> 需要运算符重载< 请注意,不同的node,请务必让它们可以区分出来(node a,b a<b or b<a) 如 node { int a,i ...

  7. MaxCompute 表(Table)设计规范

    表的限制项 表(Table)设计规范 表设计主要目标 表设计的影响 表设计步骤 表数据存储规范 按数据分层规范数据生命周期 按数据的变更和历史规范数据的保存 数据导入通道与表设计 分区设计与逻辑存储的 ...

  8. bzoj1026题解

    [解题思路] 数位DP.f[i][j]表示以j结尾的i位数中windy数的个数,转移方程f[i][j]=Σf[i-1][k](|j-k|>1). 基于f数组,我们可以统计出1~n内的windy数 ...

  9. ionic-Javascript:ionic 上拉菜单(ActionSheet)

    ylbtech-ionic-Javascript:ionic 上拉菜单(ActionSheet) 1.返回顶部 1. ionic 上拉菜单(ActionSheet) 上拉菜单(ActionSheet) ...

  10. CTF里的LSB