Hibernate查询的六种方式
Hibernate查询的六种方式 分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询。
如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要实现的一般功能,但是想多学知识就看一下这六种方法,他们提供了更多选择。当然每一种方法都有其适用的情况与前提。
1、HQL查询
HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:
- static void query(String name){
- Session s=null;
- try{
- s=HibernateUtil.getSession();
- //from后面是对象,不是表名
- String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。
- Query query=s.createQuery(hql);
- query.setString("name", name);
- List<Admin> list=query.list();
- for(Admin admin:list){
- System.out.println(admin.getAname());
- }
- }finally{
- if(s!=null)
- s.close();
- }
- }

适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。
2、对象化查询Criteria方法:
- static void cri(String name,String password){
- Session s=null;
- try{
- s=HibernateUtil.getSession();
- Criteria c=s.createCriteria(Admin.class);
- c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
- c.add(Restrictions.eq("apassword", password));
- List<Admin> list=c.list();
- for(Admin admin:list){
- System.out.println(admin.getAname());
- }
- }finally{
- if(s!=null)
- s.close();
- }
- }

适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。
3、动态分离查询DetachedCriteria
- static List dc(DetachedCriteria dc) {
- Session s = HibernateUtil.getSession();
- Criteria c = dc.getExecutableCriteria(s);
- List rs = c.list();
- s.close();
- return rs;
- }

- DetachedCriteria dc = DetachedCriteria.forClass(User.class);
- int id = 1;
- if (id != 0)
- dc.add(Restrictions.eq("id", id));
- Date age = new Date();
- if (age != null)
- dc.add(Restrictions.le("birthday", age));
- List users = dc(dc);
- System.out.println("离线查询返回结果:" + users);

适用情况:面向对象操作,分离业务与底层,不需要字段属性摄入到Dao实现层。 缺点:适用面较HQL有限。
4、例子查询
- static List example(User user) {
- Session s = HibernateUtil.getSession();
- List<User> users = s.createCriteria(User.class).add(
- Example.create(user)).list();
- // List<User>
- // users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
- // .createCriteria("child").add((Example.create(user))).list();
- return users;
- }

适用情况:面向对象操作。 缺点:适用面较HQL有限,不推荐。
5、sql查询
- static List sql() {
- Session s = HibernateUtil.getSession();
- Query q = s.createSQLQuery("select * from user").addEntity(User.class);
- List<User> rs = q.list();
- s.close();
- return rs;
- }

适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法 缺点:破坏跨平台,不易维护,不面向对象。
6、命名查询
- static List namedQuery(int id) {
- Session s = HibernateUtil.getSession();
- Query q = s.getNamedQuery("getUserById");
- q.setInteger("id", id);
- return q.list();
- }

- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.sy.vo.User" table="user" catalog="news">
- </class>
- <!-- 命名查询:定义查询条件 -->
- <query name="getUserById">
- <![CDATA[from User where id=:id]]>
- </query>
- <!-- 命名查询中使用sql,不推荐使用,影响跨数据库
- <sql-query name="getUserById2">
- <![CDATA[select * from User where ]]>
- </sql-query> -->
- </hibernate-mapping>
Hibernate查询的六种方式的更多相关文章
- 六种方式实现hibernate查询
最近在学习Hibernate的基本内容,刚好在项目中有用到,基本上都是用到哪就学哪. 今天看看六种方式实现hibernate查询......... 分别是HQL查询,对象化查询Criteria方法,动 ...
- 六种方式实现hibernate查询,及IDE推荐
这些天过的好乱,也许是因为考完试了,心里有些松懈吧.也许是最近发生的事对我有些触动吧.感觉自己都已经不懂自己了.面对一些人的教导,我很感激.因为很多话都对我有非常大的帮助和启发,也让我除了做技术, ...
- hibernate查询方式
hibernate查询方式:1.本地SQL查询 2.HQL查询 3.QBC查询 HQL查询:是面向对象的查询语言,是使用最广的一种查询方法 QBC查询:Query by Criteria是一套接口来实 ...
- (十)Hibernate 查询方式
所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 查询方式简介 1,导航对象图查询方式: 2 ...
- 二。Hibernate 查询 HQL、SQL方式
hibernate的查询1.HQL方式:所有查询都是根据java对象名来完成,对象名替换表名2.SQL方式:保留原来的sql查询风格3.可以通过设置第一条和最大条数来实现各种数据库的分页查询4.通过B ...
- Hibernate查询方式(补)
-----------------siwuxie095 Hibernate 查询方式 1.对象导航查询 根据已经加载的对 ...
- Redis查询&JDBC查询&Hibernate查询方式的效率比较...
比较三种查询方式查询效率对比...我是用的JavaWeb的方式通过通过JSP页面查询的填写查询的参数...给予反馈.... 整个demo的下载地址:http://files.cnblogs.com/f ...
- Hibernate学习10——Hibernate 查询方式
本章主要是以查询Student的例子: Student.java: package com.cy.model; public class Student { private int id; priva ...
- Hibernate 查询方式、JPA查询方式
hibernate 查询方式: OID 查询 对象导航查询 HQL 方式查询 QBC方式查询 原生SQL方式查询 JPA 查询方式: OID 查询 对象导航查询 JPQL 方式查询 CriteriaB ...
随机推荐
- shell习题第5题:批量更改文件后缀名
[题目要求] 找到123/目录下所有后缀名为.txt的文件 1. 批量修改.txt为.txt.bak 2. 把所有.bak文件打包压缩为123.tar.gz 3. 批量还原文件的名字,即把增加的.ba ...
- Git很简单--图解攻略
Git Git 是目前世界上最先进的分布式版本控制系统(没有之一) 作用 源代码管理 为什么要进行源代码管理? 方便多人协同开发 方便版本控制 Git管理源代码特点 1.Git是分布式管理.服务器和客 ...
- Python中级 —— 07标准库
标准库学习 1. The Python Standard Library[https://docs.python.org/3.5/library/] ( 3.5.5 Documentation ) 1 ...
- Python中级 —— 05访问数据库
** 写在前面 ------------------> ** 廖雪峰 菜鸟 数据库类别 首先选择一个关系数据库.目前广泛使用的关系数据库也就这么几种: 付费的商用数据库: Oracle:典型的高 ...
- vs code 修改文件的缩进
百度这个问题的都是强迫症患者. 前人代码是2个空格缩进,我习惯3个, step1:打开 文件 —> 首选项 —> 设置,进入用户设置 step2:设置缩进量,(加两句代码) step3 ...
- [译]C语言实现一个简易的Hash table(1)
说明 Hash table翻译过来就是Hash表,是一种提供了类似于关联数组的数据结构,可以通过key执行搜索.插入和删除操作.Hash表由一些列桶(buckets)组成,而每一个bucket都是由k ...
- IAR升级之后,编译stm32官方工程报错的解决办法
IAR升级之后,打开stm32官方例程,编译时提示如下错误: Error[Pe147]: declaration is incompatible with "__nounwind __int ...
- python教程(零)·前言
本教程是作者根据自己学习python的经验写下的,一来是想将经验分享给对python同样感兴趣的小白(大神请忽略),二来是想借此加深本人对python的理解,温故而知新. 学习基础 本教程面向的读者, ...
- PICT工具一键生成正交试验用例
PICT工具一键生成正交试验用例 作用: 1.解决手动设计大量测试用例.或覆盖不全面问题,提高测试效率 2.读取excel,将生成的参数组合自动带入脚本,进行接口自动化测试 一.PICT简介 PICT ...
- 加法变乘法——第六届蓝桥杯C语言B组(省赛)第六题
原创 加法变乘法 我们都知道:1+2+3+ ... + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如:1+2+3+...+10*11+12+...+27*28+ ...