HQL和Criteria(转)
HQL(Hibernate Query Language)
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:
Queryq = session.createQuery(hql);
l from Person
l from User user whereuser.name=:name
l from User user where user.name=:nameand user.birthday < :birthday
Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:
Criteriacrit = session.createCriteria(DomainClass.class);
简单属性条件如:criteria.add(Restrictions.eq(propertyName,value)),
criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
利用name的不同的查询
1、 HQL
Session s=null;
try{
s=HibernateUtil.getSession();
//from Useruser 给User起一个别名为user. name表示的是类中的属性名
//fromObject 查得是所有表格中的记录行,from User 查得是User所对应表中的所有记录行
String queryString="from User user where user.name=:n";//查询字符串,hibernate的查询语言hql。类名区分大小写
Query query=s.createQuery(queryString);//产生query对象,用来查询
// query.setString(0, name);//下标从0开始
query.setString("n", name);//用命名参数,就不需要索引下标的位置了
//实现分页查询
query.setFirstResult(0);//从第0行开始
query.setMaxResults(2);//每页最多显示2条记录
/*query.list();//列出所有满足条件的结果集
query.uniqueResult();//返回的是一行的结果集*/
//如果满足条件的不止一条记录
List<User> list=query.list();
for(User u:list){
System.out.println(u.getId()+":"+u.getName());
}
//如果明确知道就一行
/*Useruser=(User) query.uniqueResult();
System.out.println(user.getId()+":"+user.getName());*/
}finally{
if(s!=null){
s.close();
}
}
2、 Criteria
Session s=null;
try{
s=HibernateUtil.getSession();
Criteria c=s.createCriteria(User.class);//根据映射类型去查表
c.add(Restrictions.eq("name", name));//添加的是约束条件,user里面的name属性要等于参数name
// c.add(Restrictions.le("birthday", value));//生日要小于等于。。。。。。
//上面的两句话等价于Criteria c=s.createCriteria(User.class).c.add(Restrictions.eq("name",name));
List<User> list=c.list();
for(User user:list){
System.out.println(user.getId()+":"+user.getName()+":"+user.getBirthday());
}
}finally{
if(s!=null){
s.close();
}
}
sql查得是表,HQl查得是对象,hql支持多态
HQL和Criteria(转)的更多相关文章
- 【JAVAEE学习笔记】hibernate04:查询种类、HQL、Criteria、查询优化和练习为客户列表增加查询条件
一.查询种类 1.oid查询-get 2.对象属性导航查询 3.HQL 4.Criteria 5.原生SQL 二.查询-HQL语法 //学习HQL语法 public class Demo { //基本 ...
- JAVAEE学习——hibernate04:查询种类、HQL、Criteria、查询优化和练习为客户列表增加查询条件
一.查询种类 1.oid查询-get 2.对象属性导航查询 3.HQL 4.Criteria 5.原生SQL 二.查询-HQL语法 //学习HQL语法 public class Demo { //基本 ...
- hibernate HQL和Criteria
package com.test; import java.util.Date; import java.util.List; import org.hibernate.Query; import o ...
- HQL和Criteria
HQL: public boolean doCreate(Dept vo) throws Exception { return this.sessionFactory.getCurrentSessio ...
- 比较HQL、Criteria、Native-SQL这三者做查询的区别,以及应该如何进行选择?
HQL功能很强大,适合各种情况,但是动态条件查询构造起来很不方便: Criteria 最适合动态查询,但不太适合统计查询,QBE还不够强大.只适合简单的查询: Native-SQL可以实现特定的数据库 ...
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...
- grails的criteria和hql查询
grails在查询方面也保留了hibernate的hql和criteria查询功能.hql自然不必多说基本不会有什么变化,grails的criteria查询在hibernate上面做了微调使用起来更加 ...
- Hibernate框架Criteria查询
本文章适合一些初学者 一.使用Criteria查询数据 1.条件查询 1.1:使用Criteria查询的步骤 1.使用Sess ...
- 2018.11.13 Hibernate 中数据库查询中的Criteria查询实例
Criteria是面向对象的无语句查询 Demo.java package com.legend.b_criteria; import java.util.List; import org.hiber ...
随机推荐
- 手机QQ v4.2 有感
因为经常宅宿舍,很少出门,所以无论微信还是手机QQ都很少使用. 刚好最近见别人发来的表情我的2012自改版QQ总是无法解析,只能显示[吼叫].[啦啦]之类的字符,于是更新了v4.2的手机QQ把玩一番, ...
- 深度学习word2vec笔记之应用篇
好不容易学了一个深度学习的算法,大家是否比较爽了?但是回头想想,学这个是为了什么?吹牛皮吗?写论文吗?参加竞赛拿奖吗? 不管哪个原因,都显得有点校园思维了. 站在企业的层面,这样的方式显然是不符合要求 ...
- Effective Java提升Code Coverage代码涵盖率 - 就是爱Java
虽然我们已经有了测试程序,但是如何得知是否已完整测试了主程序?,透过Code Coverage代码涵盖率,我们可以快速地得知,目前系统中,有多少程序中被测试过,不考虑成本跟投资效益比,涵盖率越高,代表 ...
- 在C51中如何实现软复位?
可以定义一个指向复位向量(0x0000)的函数指针,然后在C程序中需要软复位的地方调用该函数: ((void (code *) (void)) 0x0000) (); 例如,以下程序不断地复位: vo ...
- php curl 中的gzip压缩性能测试
前因: 请求接口次数很多,每日两亿多次,主要是有些接口返回数据量很大高达110KB(为了减少请求次数,将多个接口合并成一个导致的).后端接口的nginx已经开启gzip,所以做个测试,看看是否在请求时 ...
- ssh添加公钥
ssh-keygen生成公钥存储在文件: ~/.ssh/id_rsa.pub 如果ssh-add -l命令后没有一串长的字符串, 把私钥密钥对的ID(fingerPrint)加入ssh的认证代理ssh ...
- 算法的稳定性(Stability of Sorting Algorithms)
如果具有同样关键字的纪录的在排序前和排序后相对位置保持不变.一些算法本身就是稳定的,如插入排序,归并排序,冒泡排序等,不稳定的算法有堆排序,快速排序等. 然而,一个本身不稳定的算法通过一点修正也能变成 ...
- 01_docker学习总结
01 docker学习总结 toolbox https://hub.docker.com/ https://docs.docker.com/engine/installation/mac/#from- ...
- Android Call requires API level 11 (current min is 8)的解决方案
[错误描述] 在用Eclipse开发过程中,为了兼容Android2.2和4.0以上版本,我在使用Notification类时做了2个版本的代码,代码根据系统版本不同执行相应模块,结果,等我输完代码, ...
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
各位程序猿: <剑指Offer>一书源自该书作者何海涛坚持更新与编写的博客(http://zhedahht.blog.163.com/),该博客收集整理了大量如微软.Goo ...