hibernate学习之四——Query和Criteria接口
2017-06-09 15:24
411 查看
Query 和 Criteria 接口是 Hibernate 的查询接口,用于向数据库查询对象以及控制执行查询的过程。
Query 实例包装了一个 HQL(Hibernate Query Language)查询语句,HQL 查询语句与 SQL 查询语句有些相似,但
HQL 查询语句是面向对象的,它引用类名及类的属性名,而不是表名及表的字段名。
Critieria 接口完全封装了基于字符串形式的查询语句,比 Query 接口更加面向对象,Criteria 接口擅长于执行动态查询
相关方法说明
短语 含义
Restrictions.eq 等于=
Restrictions.allEq 方法的参数为一个 Map 类型对象,包含多个名/值
对对应关系, 相当于多个 Expression.eq 的叠加
Restrictions.gt 大于>
Restrictions.ge 大于等于>=
Restrictions.lt 小于<
Restrictions.le 小于等于<=
Restrictions.between 对应 sql 的 between 子句
Restrictions.like 对应 sql 的 like 子句
Restrictions.in 对应 sql 的 in 子句
Restrictions.and and 关系
Restrictions.or or 关系
Restrictions.sqlRestriction Sql 限定查询
Query 实例包装了一个 HQL(Hibernate Query Language)查询语句,HQL 查询语句与 SQL 查询语句有些相似,但
HQL 查询语句是面向对象的,它引用类名及类的属性名,而不是表名及表的字段名。
Critieria 接口完全封装了基于字符串形式的查询语句,比 Query 接口更加面向对象,Criteria 接口擅长于执行动态查询
package com.test; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.Expression; import org.hibernate.criterion.Restrictions; import org.junit.Test; import com.bean.User; import com.util.HibernateUtil; public class QueryAndCniteria { private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); //1.1,简单绑定参数查询,不使用表名而使用类名,bean //按参数位置绑定: 在 HQL 查询语句中用“?”来定义参数位置 @Test public void query1(){ //1,获取session对象 Session session = sessionFactory.openSession(); //2,hql Query query = session.createQuery("from User where name=? and age=? "); //3,为?赋值 query.setString(0,"dada"); query.setInteger(1,11); List<User> list = query.list(); for(User user:list){ System.out.println(user.toString()); } session.close(); } //1.2,简单绑定参数查询,不使用表名而使用类名,bean //按参数名字绑定: 在 HQL 查询语句中定义命名参数, 命名参数以“:”开头 @Test public void query2(){ Session session = sessionFactory.openSession(); Query query = session.createQuery("from User where name=:name and age=:age"); //第一个参数代表名字,第二个代表值 query.setString("name", "dada"); query.setInteger("age", 20); List<User> list = query.list(); for(User user : list){ System.out.println(user.toString()); } session.close(); } //2,投影查询 @Test public void query3(){ Session session = sessionFactory.openSession(); //注意这里投影查询哪些属性,那么bean类要有对应的构造方法 /* public User(String uid, String name) { super(); this.uid = uid; this.name = name; }*/ Query query = session.createQuery("select new com.bean.User(uid,name) from User"); List<User> list = query.list(); for(User user : list){ System.out.println(user.toString()); } session.close(); } //3,分页查询 @Test public void query4(){ Session session = sessionFactory.openSession(); Query query = session.createQuery("from User"); //设置分页查询的起始页面 query.setFirstResult(0); //设置分页查询的显示页数 query.setMaxResults(3); List<User> list = query.list(); for(User user : list){ System.out.println(user.toString()); } session.close(); } //4,QBC(Query By Criteria) /* QBC 查询就是通过使用 Hibernate 提供的 Query By Criteria API 来查询对象,这 种 API 封装了 SQL 语句的动态拼装,对查询提供了更加面向对象的功能接口。 QBC 提供的查询方式由:Criteria 接口,Criterion 接口和 Expression 类组成,支 持在运行时动态生成查询语句 */ //4.1,Criteria简单查询 @Test public void query5(){ //1,获取session对象 Session session = sessionFactory.openSession(); //2,通过session对象创建Criteria对象 Criteria crit = session.createCriteria(User.class); //3,添加查询条件 crit.add(Restrictions.eq("name","xiaohong")); crit.add(Restrictions.eq("age",0)); List<User> list = crit.list(); for(User user:list){ System.out.println(user.toString()); } } //4.2,Criteria - 存面向对象的数据库查询方式 //模糊查询 @Test public void query6(){ Session session = sessionFactory.openSession(); Criteria crit = session.createCriteria(User.class); //添加条件 crit.add(Restrictions.like("name", "%da%")); List<User> list = crit.list(); for(User user : list){ System.out.println(user.toString()); } session.close(); } }
相关方法说明
短语 含义
Restrictions.eq 等于=
Restrictions.allEq 方法的参数为一个 Map 类型对象,包含多个名/值
对对应关系, 相当于多个 Expression.eq 的叠加
Restrictions.gt 大于>
Restrictions.ge 大于等于>=
Restrictions.lt 小于<
Restrictions.le 小于等于<=
Restrictions.between 对应 sql 的 between 子句
Restrictions.like 对应 sql 的 like 子句
Restrictions.in 对应 sql 的 in 子句
Restrictions.and and 关系
Restrictions.or or 关系
Restrictions.sqlRestriction Sql 限定查询
相关文章推荐
- Hibernate学习笔记--Criteria Query
- Hibernate学习-09:核心API:Configuration、SessionFactory、Session、Transaction、Query、Criteria
- Hibernate的Query接口和Criteria接口的区别
- Hibernate视频学习笔记(2)持久对象的生命周期及Query接口初步
- Hibernate的 SessionFactory,Configuration,Query ,Criteria接口简介,及Query的查询方法
- Hibernate框架第二天(一级缓存、Query和Criteria查询接口)
- 【学习笔记】hibernate相关(1)Criteria接口
- hibernate学习笔记之(持久对象的生命周期及Query接口初步)
- Hibernate的学习之路十八(Criteria的查询简单)
- Hibernate的学习之路十八(Criteria的查询简单)
- Hibernate的Query接口和查询操作
- Hibernate之Query接口的uniqueResult()方法
- Hibernate里面的完全面向对象的查询(Criteria 接口)
- Hibernate之Query接口的uniqueResult()方法
- hibernate的Criteria Query 用法
- SSH学习之Hibernate的核心接口
- hibernate案例入门一query transaction criteria sessionfactory和session区别 get和load的区别 opensession 和 getcurre
- Hibernate之Query接口的uniqueResult()方法
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
- Hibernate HQL与Native_SQL_查询_Query接口_iterate方法