HQL和Criteria

HQLCriteria

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支持多态

时间: 2024-10-14 07:21:20

HQL和Criteria的相关文章

【JAVAEE学习笔记】hibernate04:查询种类、HQL、Criteria、查询优化和练习为客户列表增加查询条件

一.查询种类 1.oid查询-get 2.对象属性导航查询 3.HQL 4.Criteria 5.原生SQL 二.查询-HQL语法 //学习HQL语法 public class Demo { //基本语法 @Test public void fun1(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //--------------------------

Hibernate系列(四):Hibernate两种查询方式:HQL和Criteria

Hibernate主要是提供与数据库之间交互的一个框架,想要用面向对象的语言操作关系型数据库,有如下两种操作方式: HQL语句:面向对象的查询语言,对象名区分大小写.而且不同于SQL的是这里查询的是对象,而不是表,并且支持多态.hql主要通过Query操作 Criteria类:是一种面向对象的查询,主要查询条件. 一.HQL语句: 比如我们要根据name属性查询一条记录(对象): static void query(String name){ Session s = null; try{ s =

grails的criteria和hql查询

grails在查询方面也保留了hibernate的hql和criteria查询功能,hql自然不必多说基本不会有什么变化,grails的criteria查询在hibernate上面做了微调使用起来更加方便了,这次就这两个特点分享下我这几天的所学 1.grails的criteria查询 先来个简单的,通过criteria来构造一个in条件查询 def useCriteria2(){ def c=CityInfo.createCriteria() def result=c.list{ 'in'("i

Hibernate HQL,Criteria和SQL

Hibernate HQL和Criteria HQL:HQL(Hibernate Query Language)是hibernate专门用于查询数据的语句,有别于SQL,HQL 更接近于面向对象的思维方式. 1 /** 2 * ---------HQL查询根据name进行模糊查询-------- 3 4 */ 5 public class TestHibernate6 { 6 public static void main(String[] args) { 7 SessionFactory se

Criteria查询及注解

HQL和Criteria支持的比较运算 HQL运算符 Criteria运算方法 说明 = SimpleExpression Restrictions.eq(String propertyName,Object value) 等于 <> SimpleExpression Restrictions.ne(String propertyName,Object value) 不等于 > SimpleExpression Restrictions.gt(String propertyName,Ob

2018.11.13 Hibernate 中数据库查询中的Criteria查询实例

Criteria是面向对象的无语句查询 Demo.java package com.legend.b_criteria; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Order; import org.hibernate.criterion.Pr

hibernate基础(1)

hibernate基础1.hibernate介绍与动手入门体验  问题:模型不匹配(java对象模型与数据库关系模型不匹配)  解决: 1.使用JDBC手工转换        2.使用ORM(Object Relation Mapping对象关系映射)框架,有Hibernate,TopLink,OJB  下载地址http://www.hibernate.org  3.2.5版本  安装配置:    配置文件:hibernate.cfg.xml,hibernate.properties 这两个文件

[NHibernate]延迟加载

目录 写在前面 文档与系列文章 延迟加载 一个例子 总结 写在前面 上篇文章介绍了多对多关系的关联查询的sql,HQL,Criteria查询的三种方式.本篇文章将介绍nhibernate中的延迟加载方式,延迟加载按个人理解也可以叫做按需要加载(Loading-on-demand). 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R

hibernate之性能优化

hibernate是建立在JDBC基础上的框架,但他有很多JDBC所无法比拟的性能优化技术.下面介绍几种优化策略. 1.使用dynamic-insert与dynamic-update 在class标签中使用该属性,可以设置hibernate动态的生成SQL语句,而不是在hibernate启动时就生成预设的SQL语句. 当其设置为true时,hibernate会根据实际需求设置新增或更新的字段,而不是所有的字段. <class name="com.hibernate.book" t