- 浏览: 1505181 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
http://student.csdn.net/space.php?uid=117956&do=blog&id=25789
1: QBE (Query By Example)
Criteria cri = session.createCriteria(Student.class);
cri.add(Example.create(s)); //s是一个 Student 对象
list cri.list();
实质:创建一个模版,比如我有一个表serial 有一个 giftortoy 字段,我设置 serial.setgifttoy(\"2\"),
则这个表中的所有的giftortoy 为 2 的数据都会出来
QBC查询方式
QBC(Query By Criteria)查询方式是 Hibernate 提供的 “ 更加面向对象 ” 的一种检索方式。 QBC 在条件查询上比 HQL 查询更为灵活,而且支持运行时动态生成查询语句。
在Hibernate 应用中使用 QBC 查询通常经过 3 个步骤
(1)使用 Session 实例的 createCriteria() 方法创建 Criteria 对象
(2)使用工具类 Restrictions 的相关方法为 Criteria 对象设置查询对象
(3)使用 Criteria 对象的 list() 方法执行查询,返回查询结果
Restrictions类的常用方法
Restrictions.eq(String propertyName,Object value)
等于
Restrictions.allEq(Map propertyNameValues)
使用Map key/value 进行多个等于的比对
Restrictions.gt(String propertyName, Object value)
大于 > (gt----->greater than)
Restrictions.ge(String propertyName, Object value)
大于等于 >= (ge----->greater equal)
Restrictions.It(String propertyName, Object value)
小于< (It---->less than)
Restrictions.Le(String propertyName, Object value)
小于等于<= (le---->less equal)
Restrictions.between(String propertyName, Object lo, Object hi)
对应SQL 语句的 Between 子句
Restrictions.like(String propertyName, Object value)
对应SQL 语句的 LIKE 子句
Restrictions.in(String propertyName, Collection value)
对应SQL 语句的 in 子句
Restrictions.and(Criterion lhs, Criterion rhs)
And关系
Restrictions.or(Criterion lhs, Criterion rhs)
Or关系
Restrictions.sqlRestriction(String sql,Object[] values,Type[] types)
SQL限定查询
工具类Order 提供设置排序方式
Order.asc(String propertyName)
升序排序
Order.desc(String propertyName)
降序排序
工具类Projections 提供对查询结果进行统计与分组操作
Porjections.avg(String propertyName)
求某属性的平均值
Projections.count(String propertyName)
统计某属性的数量
Projections.countDistinct(String propertyName)
统计某属性的不同值的数量
Projections.groupProperty(String propertyName)
指定一组属性值
Projections.max(String propertyName)
某属性的最大值
Projections.min(String propertyName)
某属性的最小值
Projections.projectionList()
创建一个新的projectionList 对象
Projections.rowCount()
查询结果集中记录的条数
Projections.sum(String propertyName)
返回某属性值的合计
QBE查询
QBE查询就是检索与指定样本对象具有相同属性值的对象。因此 QBE 查询的关键就是样本对象的创建,样本对象中的所有非空属性均将作为查询条件。 QBE 查询的功能子集,虽然 QBE 没有 QBC 功能大,但是有些场合 QBE 使用起来更为方便。
工具类Example 为 Criteria 对象指定样本对象作为查询条件
Java代码
1 Session session = HibernateSessionFactory.getSessionFactory().openSession();
2 Transaction ts = session.beginTransaction();
3 Customer c = new Customer();
4 c.setCname("Hibernate");
5 Criteria criteria = session.createCriteria(Customer. class );
6 Criteria.add(Example.create(c));
7 Iterator it = criteria.list().iterator();
8 ts.commit();
9 HibernateSessionFactory.closeSession();
QBC分页查询
Criteria为我们提供了两个有用的方法: setFirstResult(int firstResult) 和 setMaxResults(int maxResults).
setFirstResult(int firstResult)方法用于指定从哪一个对象开始检索(序号从 0 开始),默认为第一个对象(序号为 0 ); setMaxResults(int maxResults) 方法用于指定一次最多检索出的对象数目,默认为所有对象。
Java代码
1 Session session = HibernateSessionFactory.getSessionFactory().openSession();
2 Transaction ts = null ;
3 Criteria criteria = session.createCriteria(Order. class );
4 int pageSize = 15;
5 int pageNo = 1;
6 criteria.setFirstResult((pageNo-1)*pageSize);
7 criteria.setMaxResults(pageSize);
8 Iterator it = criteria.list().iterator();
9 ts.commit();
10 HibernateSessionFactory.closeSession();
QBC复合查询
复合查询就是在原有的查询基础上再进行查询。例如在顾客对定单的一对多关系中,在查询出所有的顾客对象后,希望在查询定单中money 大于 1000 的定单对象
DetachedCriteria criteria= DetachedCriteria . forClass (Model. class );
criteria.add(Restrictions. eq ( "userid" , userid));
criteria.add(Restrictions. eq ( "state" , false ));
criteria.add(Restrictions. not ( Expression . eq ( "freeze" , false ) ));
criteria.addOrder( Order. desc ( "createtime" ) );
return modelDAO .findByCriteria(criteria);
Java代码
1 Session session = HibernateSessionFactory.getSessionFactory().openSession();
2 Transaction ts = session.beginTransaction();
3 Criteria cuscriteria = session.createCriteria(Customer. class );
4 Criteria ordCriteria = cusCriteria.createCriteria("orders");
5 ordCriteria.add(Restrictions.gt("money", new Double(1000)));
6 Iterator it = cusCriteria.list().iterator();
7 ts.commit();
8 HibernateSessionFactory.closeSession();
QBC离线查询
离线查询又叫DetachedCriteria 查询,它可以在 Session 之外进行构造,只有在需要执行查询时才与 Session 绑定。
2: QBC (Query By Criteria) 主要有 Criteria,Criterion,Oder,Restrictions 类组成
session = this.getSession();
Criteria cri = session.createCriteria(JdItemSerialnumber.class);
Criterion cron = Restrictions.like(\"customer\",name);
cri.add(cron);
list = cri.list();
==============================
比较运算符
HQL运算符 QBC 运算符 含义
= Restrictions.eq() 等于
<> Restrictions.not(Exprission.eq()) 不等于
> Restrictions.gt() 大于
>= Restrictions.ge() 大于等于
< Restrictions.lt() 小于 [Page]
<= Restrictions.le() 小于等于
is null Restrictions.isnull() 等于空值
is not null Restrictions.isNotNull() 非空值
like Restrictions.like() 字符串模式匹配
and Restrictions.and() 逻辑与
and Restrictions.conjunction() 逻辑与
or Restrictions.or() 逻辑或
or Restrictions.disjunction() 逻辑或
not Restrictions.not() 逻辑非
in(列表 ) Restrictions.in() 等于列表中的某一个值 [Page]
ont in(列表 ) Restrictions.not(Restrictions.in()) 不等于列表中任意一个值
between x and y Restrictions.between() 闭区间 xy 中的任意值
not between x and y Restrictions.not(Restrictions..between()) 小于值 X 或者大于值 y
3: HQL
String hql = \"select s.name ,avg(s.age) from Student s group by s.name\";
Query query = session.createQuery(hql);
list = query.list();
....
4: 本地 SQL 查询
session = sessionFactory.openSession();
tran = session.beginTransaction();
SQLQuery sq = session.createSQLQuery(sql);
sq.addEntity(Student.class);
list = sq.list();
tran.commit();
5: QID
Session的 get() 和 load() 方法提供了根据对象 ID 来检索对象的方式。该方式被用于事先知道了要检索对象 ID 的情况。
Hibernate: HQL/QBC 查询语言比较的用法
Hib的检索方式 1 、导航对象图检索方式。通过已经加载的对象,调用 .iterator() 方法可以得到 order 对象如果是首次执行此方法, Hib 会从数据库加载关联的 order 对象,否则就从缓存中得到。 2 、 OID 检索方式。通过 session 的 get , load 方法知道了 OID 的情况下可以使用 3 、 HQL 检索方
Hib的检索方式
1、导航对象图检索方式。通过已经加载的对象,调用 .iterator() 方法可以得到 order 对象如果是首次执行此方法, Hib 会从数据库加载关联的 order 对象,否则就从缓存中得到。
2、 OID 检索方式。通过 session 的 get , load 方法知道了 OID 的情况下可以使用
3、 HQL 检索方式。使用面向对象的 HQL 查询语句 session 的 find 方法利用 HQL 来查询
4、 QBC 检索方式。利用 QBCAPI 来检索它是封装了基于字符串的查询语句
5、本地的 SQL 检索方式。使用本地数据库的 SQL 查询语句 Hib 会负责把检索到的 JDBC 结果集映射为持久化对象图。
五种检索方式的使用场合和特点:
HQL : 是面向对象的查询语言,同 SQL 有些相似是 Hib 中最常用的方式。
查询设定各种查询条件。
支持投影查询,检索出对象的部分属性。
支持分页查询,允许使用having 和 group by
提供内制的聚集函数,sum() , min() , max()
能调用用户的自定义SQL
支持子查询,嵌入式查询
支持动态绑定参数
建议使用Query 接口替换 session 的 find 方法。
Query Q = session.createQuery("from customer as c where c.name = :customerName" +"and c.age = :customerAge");
query.setString("customerName" , "tom");
query.setInteger("customerAge" , "21");
list result = query.list();
QBC : QBCAPI提供了另一种方式,主要是 Criteria 接口、 Criterion 接口和 Expression 类
Criteria criteria = session.createCriteria(customer.class);
Criterion criterion1 =Expression.like("name","t%");
Criterion criterion2 =Expression.eq("age",new Integer(21));
Critera = criteria.add(criterion1) ;
Critera = criteria.add(criterion2) ;
list result = criteria.list();
或是: list result = session.createCriteria(Customer.class).add(Expression.eq("this.name","tom")).list();
SQL : 采用 HQL 和 QBC 检索时, Hib 生成 SQL 语句适用所有数据库。
Query query =session.createSQLQuery("select {c.*} from customers c where c.name like : customername " + "and c.age =:customerage","c",customer.calss);
query.setString("customername","tom");
query.setInteger("customerage","21");
list result = query.list();
/////////////多态查询
HQL : session.createQuery("from employee");
QBC : session.createCriteria(employee.class);
HQL : session.createQuery("from hourlyEmployee");
QBC : session.createCriteria(hourlyEmployee.class);
下面的HQL 查询语句将检索出所有的持久化对象:
from java.lang.Object ;
from java.io.serializable ;
////////////查询的排序
1、查询结果按照客户姓名升序排列:
HQL :
Query query = session.createQuery
("from customer c order by c.name");
QBC :
Criteria criteria = session.createCriteria(customer.class);
criteria.addOrder(order.asc("name"));
HQL :
Query query = session.createQuery("from customer c orderby c.name asc , c.age desc");
QBC :
Criteria criteria =session.createCriteria(customer.class);
criteria.addOrder(order.asc ("name"));
criteria.addOrder(order.desc("age"));
import net.sf.hibernate.pression.Order
import mypack.Order
...........
Criteria criteria = session.createCritria (mypack.Order.class);
criteria.addOrder(net.sf.hibernate.Order.asc("name"));
///////////HQL语句的参数绑定 Query 接口
提供了绑定各种Hib 映射类型的方法。
setBinary()
setString()
setBoolean()
setByte()
setCalendar()
setCharacter()
setDate()
setDouble()
setText()
setTime()
setTimestamp()
setEntity()
//把参数与一个持久化类的事例绑定
lsit result = session.createQuery
("from order o where o.customer = :customer").setEntity("customer" , customer).list ;
setParameter()
//绑定任意类型的参数
setProperties()
//把命名参数与一个对象的属性值绑定
Query query = session.createQuery
("from customer c where c.name =:name " + "and c.age =:age" );
Query.setProperties(customer);
- public AlBasic queryAlBasicByEtpsIdAndAnnlYear(String entityName, String etpsId, String annlYear) {
- if (etpsId == null || "".equals(etpsId) || annlYear == null || "".equals(annlYear))
- return null;
- DetachedCriteria dc = DetachedCriteria.forEntityName(entityName);
- dc.add(Restrictions.eq("etpsId", etpsId));
- dc.add(Restrictions.eq("annlYear", annlYear));
- List result = findByCriteria(dc);
- if (result == null || result.size() == 0) {
- return null;
- }
- return (AlBasic) result.get(0);
- }
发表评论
-
自定义用户类(UserType)的使用
2011-08-04 10:46 1868学习hibernate有段时间了,最近复习这门技术时看到了自定 ... -
技巧:利于ThreadLocal模式管理Session
2011-08-02 10:31 1268在利用Hibernate开发DAO模块时,我们和Session ... -
Hibernate中的回调与拦截机制
2011-07-27 17:31 1462在某些情况下,我们需要对实体的CURD操作进行捕获并执行一些操 ... -
HibernateTemplate中HibernateCallback的事务
2011-07-04 14:41 1449目的:使用HibernateTemplate执行execute ... -
Hibernate的复杂用法HibernateCallback
2011-07-04 14:40 1342HibernateTemplate还提供一种更加灵活的方式来操 ... -
Hibernate session FlushMode有五种属性
2011-07-04 13:59 17331、NEVER:已经废弃了,被MANUAL取代了2 MANUA ... -
数据库持久层——浅谈hibernate中的Session
2011-07-01 22:49 1670大多数情况下,Session 管理的目标聚焦于通过合理的设 ... -
详解Hibernate Session
2011-07-01 22:42 1498这里介绍Hibernate Session,Ses ... -
HttpSession与Hibernate中Session的区别
2011-07-01 22:41 1296一、javax.servlet.http.HttpSess ... -
巧用SQLQuery中的addScalar
2011-06-02 17:16 5747当我们用HQL进行子查询的时候,如select * from ... -
hibernate中SQLQuery的addEntity();方法
2011-04-13 14:48 2895如果使用原生sql语句进行query查询时,hibernate ... -
Hibernate的clear(),flush(),evict()方法详解
2011-03-24 11:18 17741.Clear 方法 无论是Load 还是 G ... -
hibernate模糊查询-Restrictions.ilike & Expression.like
2011-03-11 10:32 16362Criteria criteria = session.c ... -
Hibernate分页查询小结
2011-03-10 11:14 1831通常使用的Hibernate通常是三种:hql查询,QBC查询 ... -
current_session_context_class
2011-03-07 15:31 1297此设置的作用如下: What does sessionFac ... -
Hibernate的拦截器和监听器
2010-12-14 15:06 1388核心提示:最近项目需要,用到了Hibernate的拦截器和 ... -
孙卫琴.精通Hibernate:Java对象持久化技术详解_触发器使缓存与数据库不一致
2010-12-14 08:46 1395p198 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_优化报表查询的性能
2010-12-13 17:51 1275p332 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_查询结果类型
2010-12-13 17:34 1307p329 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_投影查询
2010-12-13 17:31 1426p325
相关推荐
标题"Hibernate_QBC和Hibernate_QBE"提及了两个关于Hibernate的查询方式,即Query By Criteria(QBC)和Query By Example(QBE)。Hibernate是Java领域中一个广泛使用的对象关系映射(ORM)框架,它允许开发者以面向...
HQL提供了一种面向对象的查询方式,QBC和QBE则提供了更多灵活性,可以根据需求动态构建查询。同时,理解这些概念也有助于开发者更好地与其他Java ORM框架(如MyBatis)进行比较和选择。在学习和使用过程中,参考官方...
QBC(Query By Example)和QBE(Query By Example)是两种在ORM(Object-Relational Mapping)框架中,特别是Hibernate中使用的查询方法。这两种查询方式都是为了简化SQL语句的编写,使得开发者能更专注于业务逻辑,...
本文将深入解析五种主要的Hibernate查询方法:QBE(Query By Example)、QBC(Query By Criteria)、HQL(Hibernate Query Language)、本地SQL查询以及QID(Query by Identifier)。 1. QBE(Query By Example) ...
本文详细介绍了 Hibernate 的三种主要查询方式:HQL 查询、QBC 查询和 QBE 查询。每种查询方式都有其独特的优势,在实际开发过程中可以根据具体的业务需求选择最适合的方法。HQL 查询适用于较为复杂的查询场景;QBC ...
对于更复杂的查询,我们可以转向HQL(Hibernate Query Language)或QBC(Query By Criteria)方法,它们提供了更多的查询选项和灵活性,包括范围查询、逻辑运算以及更丰富的查询构造能力。在实际开发中,我们需要...
IEEE Std 802.1Qbc-2011是一项由电气和电子工程师协会(IEEE)计算机学会所支持的标准,具体由局域网/城域网标准委员会(LAN/MAN Standards Committee)赞助。这项标准是《IEEE 802.1Q-2011 媒体访问控制(MAC)桥接...
虽然HQL和QBC/QBE提供了丰富的查询功能,但在某些情况下,使用原生SQL可能更为合适,特别是在需要复杂查询逻辑的情况下。Hibernate支持直接执行原生SQL查询,并将结果映射到对象上。 ```java List[]> results = ...
本教程将深入探讨Hibernate中的查询机制,包括HQL(Hibernate Query Language)和QBC(Query by Criteria)。通过实例代码和详细解释,我们将了解如何高效地在数据库中检索数据。 ### Hibernate查询语言(HQL) ...
本文主要探讨Hibernate中的查询语言,包括面向对象的查询语言HQL,QueryBy Criteria (QBC),Query By Example (QBE),以及原生SQL的使用。 1. **大小写敏感性** HQL查询语句对Java类和属性名称的大小写敏感,而...
在Java的Hibernate框架中,Criteria API提供了一种用于动态构建查询的方法,它是Query By Criteria(QBC)查询方式的一部分。这种方式允许开发者避开编写HQL(Hibernate Query Language)语句,而是通过API调用来...
Criteria 查询机制主要包括 QBE(Query By Example)、QBC(Query By Criteria)和 HQL(Hibernate Query Language)三种方式。 QBE(Query By Example) QBE 是一种基于示例的查询机制,它可以根据一个示例对象来...
7. **查询语言**: Hibernate支持多种查询语言,包括原生SQL、HQL(Hibernate Query Language)、EJB QL、QBC(Query By Example)和QBE(Query By Example)。HQL更接近面向对象的查询,而EJB QL是Java EE的一部分,...
通过`setFirstResult()`和`setMaxResults()`方法,Criteria API可以实现分页查询,类似于SQL中的`LIMIT`和`OFFSET`。 综上所述,Hibernate的Criteria API提供了一种灵活、类型安全的方式来构造查询,它可以适应...
5. `hibernate_2600_QBC`:Criteria查询的例子,展示了如何使用Criteria API来构建动态查询。 四、应用场景 1. 大型企业级应用:在大型系统中,由于数据库操作频繁,使用Hibernate可以提高开发效率,减少出错概率。...
QBE是通过提供一个对象实例作为模板来执行查询的方法。例如,在给定的代码片段中: ```java Student s = new Student(); s.setGiftOrToy("2"); Criteria cri = session.createCriteria(Student.class); cri.add...
2. **QBC(Query By Criteria)**:基于对象的查询,通过Criteria API构建查询条件。 3. **QBE(Query By Example)**:根据示例对象进行查询。 4. **原生SQL查询**:通过`Session.createSQLQuery()`创建,用于执行...
- **QBC(Query by Criteria)**:基于标准API的查询方式,提供了一组灵活的查询构建方法。 - **QBE(Query by Example)**:通过提供一个实例对象作为查询模板来进行查询。 #### Spring框架的核心概念 - **问题...