hibernate提供的5种检索数据方式
一、五种检索数据方式
1、OID检索,即使用session.get或session.load通过类及指定id查询数据,如Customer c=(Customer)session.get("Customer.class",1);
2、导航检索,即A类中含有另一个B类对象,获得A类后便可导航得到B对象数据
3、HQL检索,即使用hql语言得到数据,如session.createQuery("from Customer");
4、QBC检索,即使用QBC(Query By Criteria)API查询数据,如session.createCriteria(Customer.class);
5、本地SQL检索,即使用数据库SQL语句查询,如session.createSQLQuery("select * from customer");
HQL检索举例:
1、常见查询,查询所有客户
Query query=session.createQuery("from Customer");List<Customer> customerList=query.list();
2、也可以普通SQL语句查询,但是要指明查询字段
Query query=session.createQuery("select id,name from Customer");
query.list()返回的不是客户对象集合,而是List<Object[]>集合
3、查询id为1的客户,返回一个对象,可以使用query.uniqueResult();获取一个对象
Query query=session.createQuery("from Customer where id=1");Customer customer=(Customer)query.uniqueResult();
也可使用参数化方式传入查询条件值如hql语句为from Customer where id=? 则,传入参数query.setParameter(0,1);
如hql为from Customer where id=:id 则,传入参数query.setParameter("id",1);
4、多态查询可以返回检索类的子类数据,如果是PO类(含有hbm.xml映射文件的类)在from后面直接写类名,如果不是,则写类名全名(如java.lang.Object)
Query query=session.createQuery("from Customer");//检索出所有实体,如果有子类也会检索出
Query query=session.createQuery("from java.lang.Object");//检索出所有持久化对象
Query query=session.createQuery("from java.io.Serializable");//检索出所有实现Serializable接口的实例
query.list()就会把hibernate.cfg.xml中配置映射的所有相应类都取出来
本地SQL检索举例:(如果不用关联实体可以不做表和类映射)
1、普通SQL查询所有客户
SQLQuery sqlQuery=session.createSQLQuery("select * from customer");
List<Object[]> objsList=sqlQuery.list();
2、关联查询客户和订单
SQLQuery sqlQuery=session.createSQLQuery("select * from customer c left join orders o on c.id=o.cid");
List<Object[]> objsList=sqlQuery.list();
3、关联实体查询所有客户
SQLQuery sqlQuery=session.createSQLQuery("select * from customer");
List<Customer> customerList=sqlQuery.addEntity(Customer.class).list();
4、用表连接和关联实体方式查询客户张三所有订单
SQLQuery sqlQuery=session.createSQLQuery("select distinct o.* from customer c inner join orders o on c.id=o.cid where c.name=:name");
sqlQuery.setParameter("name","张三");
List<Order> orderList=sqlQuery.addEntity(Order.class).list();
补充:
1、投影查询
session.createQuery("select new Customer(id,name) from Customer").list();//需要有Customer(int id,String name)构造函数
session.createQuery("select new List(id,name) from Customer").list();//返回的是List集合套集合List<List<Object>>,如[[1,张三],[2,李四]]
session.createQuery("select new map(id,name) from Customer").list();
2、命名查询,在hbm.xml文件中配置HQL语句查询
如查询name为张三的客户
在hibernate-mapping节点下配置query,是在hibernate-mapping节点下,而不是class节点下
<query name="findCustomer">
<![CDATA[from Customer where name=?]]>
</query>
代码:Query query=session.getNamedQuery("findCustomer");query.setParameter(0,"张三");List list=query.list();
hibernate提供的5种检索数据方式的更多相关文章
- Java基础知识强化之IO流笔记35:InputStreamReader(Reader字符流的子类)2种read数据方式
1. InputStreamReader(Reader字符流的子类)2种read数据方式: InputStreamReader的read方法: int read():一次读取一个字符 int read ...
- Java基础知识强化之IO流笔记34:OutputStreamWriter(Writer字符流的子类)5种write数据方式
1. OutputStreamWriter (转换流) OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节. 同时OutputS ...
- JNDI提供了一种统一的方式,可以用在网络上查找和访问服务
JNDI提供了一种统一的方式,可以用在网络上查找和访问服务.通过指定一个资源名称,该名称对应于数据库或命名服务中的一个记录,同时返回数据库连接建立所必须的信息. JNDI主要有两部分组成:应用程序编程 ...
- android开发中的5种存储数据方式
数据存储在开发中是使用最频繁的,根据不同的情况选择不同的存储数据方式对于提高开发效率很有帮助.下面笔者在主要介绍Android平台中实现数据存储的5种方式. 1.使用SharedPreferences ...
- MySQL提供的几种检索行数据的优化方式
ICP(Index Condition Pushdown): 在MySQL5.6之前,存储引擎会通过遍历索引定位基表中 的行,然后返回给Server层,再去为这些数据进行WHERE后的条件过滤.MyS ...
- Dynamic CRM 2013学习笔记(十)客户端几种查询数据方式比较
我们经常要在客户端进行数据查询,下面分别比较常用的几种查询方式:XMLHttpRequest, SDK.JQuery, SDK.Rest. XMLHttpRequest是最基本的调用方式,JQuery ...
- HTML 5 Web 存储提供了几种存储数据的方法
localstorage存储对象分为两种: 1. sessionStorage: session即会话的意思,在这里的session是指用户浏览某个网站时,从进入网站到关闭网站这个时间段,sessio ...
- JavaScript 四种显示数据方式
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- NUI四种提交数据方式c
方式一: 1)前端页面 2)逻辑流参数设置 方式二: 1)前端页面 2)逻辑流参数设置 方式三: 1)前端页面 2)逻辑流参数设置 方式四: 1)前端页面 2)逻辑流参数设置
随机推荐
- 如何将NTFS格式的移动硬盘挂接到Mac OS上进行读写(Read/Write)操作
现在硬盘便宜,很多同学都有移动硬盘,如果你同时使用Windows与Mac OS的话,移动硬盘最好不要使用NTFS文件系统,否则在Mac OS上,你只能读你的移动硬盘,不能写. 但是实际上的情况是,移动 ...
- 找不到类型{0} 它在 ServiceHost 指令中提供为 Service 特性值
由于我把binding改成wsHttpBinding,在web.config里也改了命名空间 services的类名也改成了跟 web.config对应的命名空间后 在添加引用后,出现了错误: “找不 ...
- python数字图像处理(12):基本图形的绘制
图形包括线条.圆形.椭圆形.多边形等. 在skimage包中,绘制图形用的是draw模块,不要和绘制图像搞混了. 1.画线条 函数调用格式为: skimage.draw.line(r1,c1,r2,c ...
- Android权限列表permission说明
网络上不乏android权限列表,但是很少有将列表和使用方法放在一起的,所以特此总结一下 需要在AndroidManifest.xml中定义相应的权限(以获取internet访问权限为例),如下: & ...
- [CareerCup] 10.1 Client-facing Service 面向客户服务器
10.1 Imagine you are building some sort of service that will be called by up to 1000 client applicat ...
- 实验一报告 20135238&20135207
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1352 姓名:(按贡献大小排名)龚睿 王国伊 学号:(按贡献大小排 ...
- 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验
实验报告链接:http://www.cnblogs.com/lx20145332/p/6058790.html
- JS实现星级评价
说明: 本方法采用了Jquery库,暂时检测兼容IE8版本.本示例的2种颜色的星星都是放入了一张png图片当中,当然还有其他的一些实现思路.本示例展示的情况是当前页面只有一个星级评价的情况. 思路: ...
- 聊聊HTTPS和SSL_TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长 ...
- EntityFramework_MVC4中EF5 新手入门教程之四 ---4.在EF中创建更复杂的数据模型
在以前的教程你曾与一个简单的数据模型,由三个实体组成.在本教程中,您将添加更多的实体和关系,并通过指定格式. 验证和数据库映射规则,您将自定义数据模型.你会看到自定义的数据模型的两种方式: 通过添加属 ...