hibernate_05_hibernateHQL查询QBC查询和SQL查询
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类组成,它支持在运行时动态生成查询语句。
@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查询的更多相关文章
- Atitit oodbms的查询,面向对象的sql查询jpa jpql hql
Atitit oodbms的查询,面向对象的sql查询jpa jpql hql 1.1. 标准API历史1 1.2. JPA定义了独特的JPQL(Java Persistence Query Lang ...
- 视图查询的数据和sql查询的数据不一样
视图查询的数据和sql查询的数据不一样. 手动刷新视图 exec sp_refreshview 视图名称
- 发送json-简单的传参查询和简单的sql查询
简单的传参查询并转化为json using System; using System.Collections.Generic; using System.Linq; using System.Web; ...
- (25)ASP.NET Core EF查询(复杂查询运算符、原生SQL查询、异步查询)
1.复杂查询运算符 在生产场景中,我们经常用到LINQ运算符进行查询获取数据,现在我们就来了解下生产场景经常出现几种复杂查询运算符. 1.1联接(INNER JOIN) 借助LINQ Join运算符, ...
- 数据库查询性能 LinqDB vs Sql查询
使用LinqDB查询Sqlite数据库数据,不管是大数据还是少量的数据,感觉特别耗时,尤其是首次查询 一个含有2.7万条数据的数据表 首次查询: 查询2.7万条数据,耗时1s 查询指定的1条数据,也要 ...
- 关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName .
parentid是1就是id为1的公司的子公司 如图 查询出所有的信息后 由于我要呈现的是parentName 不是parentId所以想问下SQL语句怎么写 谢谢啦~~:) 解法: SELECT s ...
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...
- Hibernate SQL查询 addScalar()或addEntity()
本文完全引用自: http://www.cnblogs.com/chenyixue/p/5601285.html Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原 ...
- hibernate使用原生SQL查询返回结果集的处理
今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...
- hibernate sql查询
如果你跟我一样比较熟悉SQL,同时不想学习一门新的语言.那么在hibernate中使用Native SQL 查询也是一种不错的方式. 一方面,Native SQL在效率方面有天生的优势: 另一方面,S ...
随机推荐
- Windows server 2016 / Windows 10关于域管理员帐号权限不足的问题
今天在测试windows server 2016的域创建时,当安装结束之后,发现使用Administrator用户进行操作时,被提示了权限不足这个问题.于是我在百度上查找了一番之后,找到了解决方法. ...
- 利用ffmpeg进行视频软解播放
前段时间,公司的一个项目需要一个rtsp的播放库,原本打算直接用vlc播放的,但我觉得vlc太庞大了,很多功能没必要,还不如用ffmpeg+d3d简单的实现一个库,因此就有了今天讲的这个东西.一个解码 ...
- GitHub不能访问问题
在C:\Windows\System32\drivers\etc文件夹下HOSTS里面最后添加: 192.30.253.112 github.com 192.30.253.113 github.com ...
- jq-demo-2种吸顶效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- cin,cout优化
https://www.cnblogs.com/PrayG/p/5749832.html ios_base::sync_with_stdio(0); cin.tie(0); 涨知识了
- Android Studio Download
{ https://developer.android.google.cn/studio }
- PDO基础
//PDO:数据访问抽象层 $dsn = "mysql:dbname=mydb;host=localhost";//造PDO对象 $pdo = new PDO($dsn," ...
- NX二次开发-设置对象名称函数UF_OBJ_set_name
NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> UF_initialize( ...
- 2019 牛客多校第一场 C Euclidean Distance ?
题目链接:https://ac.nowcoder.com/acm/contest/881/C 题目大意 给定 m 和 n 个整数 ai,$-m \leq a_i \leq m$,求$\sum\limi ...
- Hadoop节点集群挂了,Hbase数据源损坏怎么办
今天集群节点一下子挂了5台,hbase的数据块也损坏. hadoop日志 .0.15:36642 dest: /ip:50010 2014-08-26 15:01:14,918 WARN org.ap ...