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 ...
随机推荐
- Storm框架设计
- session复制
环境描述:(三台服务器 系统:7.6)192.168.200.111 nginx192.168.200.112 tomcat192.168.200.113 tomcat环境配置:192.168.200 ...
- lambda和DynamoDB连接
在DynamoDB当作创建一个新表,然后在项目当中创建,把string value的值填写一下. 在IAM创建角色附加 AWSLambdaDynamoDBExecutionRole权限 在lambda ...
- 如何清除Windows共享登录的用户名密码
打开cmd 1.[查看已记录的登录信息] net use 2.[清除记录] 得关掉你所有打开的samba之后再 net use * /del
- Redis Desktop Manager可视化工具连接不上redis
1.在centos中启动redis之后,redis进程也是可查的,但是一连接可视化工具就报错: can't connect to redis-server 2.原因分析: ①首先redis是肯定已经开 ...
- html图片导入画布
首先定义一个画布 canvas id="myCanvas"></canvas> var canvas = document.getElementById('myC ...
- 常用Jquery前端操作
input只能输入正整数 onkeyup="this.value=this.value.replace(/\D/g,'')" if(!confirm("删除后无法恢复,确 ...
- zjoi 2008 树的统计——树链剖分
比较基础的一道树链剖分的题 大概还是得说说思路 树链剖分是将树剖成很多条链,比较常见的剖法是按儿子的size来剖分,剖分完后对于这课树的询问用线段树维护——比如求路径和的话——随着他们各自的链向上走, ...
- thinkphp 表单合法性检测
在处理表单提交的数据的时候,建议尽量采用Think\Model类提供的create方法首先进行数据创建,然后再写入数据库. 大理石平台厂家 create方法在创建数据的同时,可以进行更为安全的处理操作 ...
- delphi编程实现为Windows窗口标题栏添加新按钮
下面我们就讨论一下在delphi中如何给窗口的标题栏上添加新的按钮. 一.实现起来要定义以下过程: 1. 定义DrawCaptButton过程,这个过程的功能是在指定的位置画出按钮. 在过程中要使用w ...