hibernate教程--检索方式(hql,sql,QBC)
1.1Hibernate的检索方式
1.1.1Hibernate的检索方式:
检索方式:查询的方式:
导航对象图检索方式: 根据已经加载的对象导航到其他对象
* Customer customer = (Customer)session.get(Customer.class,1);
* customer.getOrders();// 获得到客户的订单
OID 检索方式: 按照对象的 OID 来检索对象
* get()/load();方法进行检索.
HQL 检索方式: 使用面向对象的 HQL 查询语言
* Query query = session.createQuery(“HQL”);
QBC 检索方式: 使用 QBC(Query By Criteria) API 来检索对象. 这种 API 封装了基于字符串形式的查询语句, 提供了更加面向对象的查询接口.
* Criteria criteria = session.createCriteria(Customer.class);
本地 SQL 检索方式: 使用本地数据库的 SQL 查询语句
* SQLQuery query = session.createSQLQuery(“SQL”);
1.1.2HQL:
HQL:Hibernate Query Language:
* 特点:
* 面向对象的查询:
* 支持方法链编程:
* 使用:
1.查询所有记录:
List<Customer> list = session.createQuery("from Customer").list();for (Customer customer : list) {System.out.println(customer);}
2.查询使用别名:
// 使用别名// 别名as可以省略/* List<Customer> list =session.createQuery("from Customer c").list();System.out.println(list);*/// 使用别名:带参数/*List<Customer> list = session.createQuery("from Customer as c where c.cname = ?").setString(0, "小沈").list();System.out.println(list);*/// 不支持 select * from Customer写法.可以写成 select 别名 from Customer as 别名;List<Customer> list = session.createQuery("select c from Customer c").list();System.out.println(list);
3.排序:
List<Customer> list = session.createQuery("from Customer c order by c.id desc").list();for (Customer customer : list) {System.out.println(customer);}
4.分页查询:
Query query = session.createQuery("from Order");query.setFirstResult(20);query.setMaxResults(10);List<Order> list = query.list();for (Order order : list) {System.out.println(order);}
5.单个对象查询:
Customer customer = (Customer) session.createQuery("from Customer where cname = ?").setString(0, "小明").uniqueResult();System.out.println(customer);
6.参数绑定:
// 1.使用?号方式绑定/*Query query = session.createQuery("from Customer where cname = ?");query.setString(0, "小沈");List<Customer> list = query.list();System.out.println(list);*//*Query query = session.createQuery("from Customer where cname = ? and cid =?");query.setString(0, "小沈");query.setInteger(1,3);List<Customer> list = query.list();System.out.println(list);*/// 2.使用名称的方式绑定Query query = session.createQuery("from Customer where cname=:name and cid=:id");query.setString("name", "小沈");query.setInteger("id", 3);List<Customer> list = query.list();System.out.println(list);// 3.绑定实体List<Order> list = session.createQuery("from Order o where o.customer = ?").setEntity(0, customer).list();for (Order order : list) {System.out.println(order);}
7.投影操作:
// 查询客户的名称:/** List<Object> list = session.createQuery(* "select c.cname from Customer c").list(); System.out.println(list);*//** List<Object[]> list = session.createQuery(* "select c.cid,c.cname from Customer c").list(); for (Object[] objects* : list) { System.out.println(Arrays.toString(objects)); }*/List<Customer> list = session.createQuery("select new Customer(cname) from Customer").list();System.out.println(list);
8.模糊查询:
Query query = session.createQuery("from Customer where cname like ?");query.setParameter(0, "小%");List<Customer> list = query.list();System.out.println(list);
SQL多表查询:
* 连接:
* 交叉连接:
* select * from A,B;
* 内连接:查询的是两个表的交集!
* select * from A inner join B on A.字段 = B.字段;
* 隐式内连接:
* select * from A,B where A.字段 = B.字段;
* 外连接:
* 左外连接:
* select * from A left outer join B on A.字段 = B.字段;
* 右外连接:
* select * from A right outer join B on A.字段 = B.字段;
HQL多表的查询:
* 连接:
* 交叉连接:
* 内连接:
* 隐式内连接:
* 迫切内连接:
* 左外连接:
* 迫切左外连接:
* 右外连接:
* HQL的内连接和迫切内连接区别:
* 内连接查询 :将数据封装一个List<Object[]>中.
* 迫切内连接 :将数据封装一个List<Customer>中.但是迫切内连接,得到会有重复记录 ,需要使用distinct排重.
1.1.3QBC:
1.查询所有记录:
List<Customer> list = session.createCriteria(Customer.class).list();for (Customer customer : list) {System.out.println(customer);}
2.排序:
List<Customer> list = session.createCriteria(Customer.class).addOrder(org.hibernate.criterion.Order.desc("id")).list();for (Customer customer : list) {System.out.println(customer);}
3.分页:
Criteria criteria = session.createCriteria(Order.class);criteria.setFirstResult(10);criteria.setMaxResults(10);List<Order> list = criteria.list();for (Order order : list) {System.out.println(order);}
4.获取单个对象:
Customer customer = (Customer) session.createCriteria(Customer.class).add(Restrictions.eq("cname", "小明")).uniqueResult();System.out.println(customer);
5.带参数的查询:
/** List<Customer> list = session.createCriteria(Customer.class)* .add(Restrictions.eq("cname", "小明")).list();* System.out.println(list);*/List<Customer> list = session.createCriteria(Customer.class).add(Restrictions.eq("cname", "小明")).add(Restrictions.eq("cid", 2)).list();System.out.println(list);
6.模糊查询:
Criteria criteria = session.createCriteria(Customer.class);criteria.add(Restrictions.like("cname", "大%"));List<Customer> list = criteria.list();System.out.println(list);
1.1.4SQL:
1.SQL语句查询所有记录:
List<Object[]> list = session.createSQLQuery("select * from customer").list();for (Object[] objects : list) {System.out.println(Arrays.toString(objects));}List<Customer> list = session.createSQLQuery("select * from customer").addEntity(Customer.class).list();for (Customer customer : list) {System.out.println(customer);}
hibernate教程--检索方式(hql,sql,QBC)相关推荐
- hibernate教程--检索方式详解(hql,sql,QBC)
1.1 Hibernate的检索方式 1.1.1 Hibernate的检索方式: 检索方式:查询的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 * Customer custome ...
- HIbernate的检索方式
导航对象图检索方式 根据已经加载的对象,导航到其他对象 OID检索方式 按照对象的OID来检索对象 依赖Session接口 主要是load()/get()的用法 HQL检索方式 Hibernate Q ...
- JAVAWEB开发之Hibernate详解(三)——Hibernate的检索方式、抓取策略以及利用二级缓存进行优化、解决数据库事务并发问题
Hibernate的检索方式 Hibernate提供了以下几种检索对象的方式: 导航对象图检索方式:根据已经加载的对象导航到其他对象. OID检索方式:按照对象的OID来检索对象. HQL检索方式: ...
- Hibernate之检索方式(HQL/QBC/本地SQL)
一.概述 Hibernate提供了以下几种检索对象的方式 导航对象图:根据已经加载的对象导航到其它对象 OID:按照对象的OID来检索对象 HQL:使用面向对象的HQL查询语句 QBC:使用QBC(Q ...
- Hibernate之检索方式
时间:2017-1-22 16:09 --检索方式 Hibernate中提供了以下几种检索对象的方式: * 导航对象图检索方式 根据已经加载额对象导航到其他对象. ...
- 14、Hibernate的HQL与QBC检索
Hibernate检索对象的方式 - HQL检索方式 - QBC检索方式 1.Hibernate提供的检索对象的方式 - 导航图对象检索方式 根据已经加载的对象,导航到其他对象.例如,对于已经加载的C ...
- (转) Hibernate检索方式概述
http://blog.csdn.net/yerenyuan_pku/article/details/70554816 Hibernate检索方式概述 我们在对数据库的操作中,最常用的是select, ...
- Hibernate入门6.Hibernate检索方式
Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...
- #hibernate中的检索方式
hibernate中的检索方式 HQL(*) hibernate query language 代码块 package cn.feicui.hql; import java.util.List; im ...
最新文章
- List-----Array
- table tr省略后鼠标移入显示相应信息_中考来了,人机对话、信息技术考试要求看过来...
- 【ICCV2019】点云相关论文解析
- python字典有什么用_Python中的字典介绍
- ubantu20下python安装和卸载
- CSS3自定义浏览器滚动条样式
- python能做什么-大家都在学的 Python,可以用来干什么?
- 2020研究生数学建模获奖名单_赞!浙商大研究生在全国研究生数学建模竞赛中喜获41个奖项...
- python中oserror_[python] 解决OSError:
- 2010 年全国大学生数学建模竞赛甘肃赛区 获奖情况
- noip滚泥巴记2016
- UG二次开发GRIP刻字
- box-sizing: border-box;box-sizing:content-box;讲解
- Android自定义控件(一) 可滑动的进度条
- U811.1接口EAI系列之二--生成销售出库单调用U8的EAI通用处理方法--PowerBuilder语言...
- 基于PaddleOCR银行卡识别实现(二)
- 实现一个简单的栅格系统
- 情感分析实战(中文)-共现语义篇
- HTTP长链接与短连接?
- UBUNTU游戏集合
热门文章
- 蓝牙4.0技术分析1-广播者角色
- AB1601定时器timer0,timer1简介
- 画直线_在鸡的面前画直线,鸡为什么会晕呢,西瓜视频带你揭秘
- CRF++:一个 CRF 工具包
- 1vmware中的centos7配置静态变量
- 跨链(5)“蚂蚁区块链”之预言机
- 区块链BaaS云服务(14)华大BGI区块链“安全多方计算“
- IDA pro 使用笔记
- Windows服务器版本简介
- Django + Uwsgi + Nginx 的生产环境部署