- 浏览: 244268 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (281)
- hibernate (16)
- sql工具 (2)
- eclipse (15)
- tomcat (13)
- 项目部署 (4)
- java (62)
- spring (15)
- EL (1)
- javascript (8)
- 正则表达式 (1)
- jQuery (4)
- mysql (15)
- jstl (1)
- jsp (1)
- eclipse,eclipse插件 (1)
- svn (4)
- java,resin (1)
- jdbc (1)
- jdk (2)
- android (21)
- resin (3)
- php (3)
- 其他 (2)
- 数据库 (2)
- cas单点登录 (2)
- 邮箱激活 (1)
- jad (1)
- 支付 (1)
- struts (1)
- jpa (1)
- struts2 (4)
- json (3)
- oracle (2)
- velocity (1)
- sina微博登陆 (2)
- qq账户登录 (1)
- spring security (1)
- java图片处理 (1)
- http请求 (1)
- cas springsecurity (1)
- freemarker (1)
- cas (6)
- java oauth2 (2)
- oauth2.0 (6)
- springsecurity oauth2 (1)
- sms (1)
- springmvc (2)
- spring aop (1)
- luaeclipse (1)
- cocos2d (1)
- hibernate缓存 (1)
- ibatis (1)
- linux (7)
- 技术网站 (1)
- python (2)
- hadoop (1)
- war3 (0)
- elasticsearch (2)
- jboss (1)
- spring data jpa (2)
- java json (1)
- jsonp (1)
- webservice (4)
- java多线程 (1)
- java加密解密 (1)
- spring task (1)
- java session and cookie (1)
- java nio (1)
- 缓存 (1)
- java大数据 (1)
- cygwin (1)
- 设计模式 (1)
- mybatis (2)
- jquery插件 (2)
- jvm内存溢出 (1)
- drools (1)
- cookie and session (1)
- jvm内存设置 (1)
- nginx (1)
- 微信 (1)
- extjs (1)
- redis (7)
- memcached (1)
- js闭包 (1)
- js (0)
- mongodb (3)
- dubbo (2)
- jdk版本问题 (1)
- opnfire (1)
- git (1)
- jsp视频播放 (1)
- 国际化 (1)
- 后台管理 (1)
- yum (1)
- k (1)
- 算法 (0)
- jvm优化 (1)
- java检测 (1)
- maven操作 (0)
- ios打包 (1)
- 网络通信 (1)
- node.js (1)
- maven (4)
- 消息队列 (2)
- springcloud (6)
- mq (2)
- idea (3)
- log4j (1)
- docker (4)
- editplus (1)
- springboot (1)
- Kubernetes (1)
- jenkins (1)
- websocket (1)
- thirft (1)
- strom (1)
- postman (1)
- kafka (1)
- 线程池 (1)
- JVisualVM (1)
- java反射 (1)
- shell (1)
- java8 (2)
- i18 (1)
- jvm (0)
- nio (1)
- nodejs (1)
- idea java (1)
最新评论
-
pengfeifei26:
wbzhaohl 写道这个有解决方案没有时间长了,貌似有点忘了 ...
A redirect is required to get the users approval -
wbzhaohl:
这个有解决方案没有
A redirect is required to get the users approval -
somebody:
恩。好吧。这个只有在 还没发布的 2.0 版本才有。
oauth2.0设置自动授权
hibernate 查询
criteria 查询:http://blog.csdn.net/xingtianyiyun/article/details/7703429
http://www.cnblogs.com/JemBai/archive/2010/01/06/1640636.html
hibernate的get和load区别
分类: hibernate 2012-11-15 00:15 261人阅读 评论(0) 收藏 举报
1、延迟加载:load是true而get是false,意思就是 load采用的是延迟加载的方式 而get不是,也就是说get()采用立即加载方式,而load()采用延迟加载;,hibernate思想是 既然这个方法支持延迟加载 他就认为这个对象一定在数据库存在
2、load方法的加载过程:
例如:Student stu = session.load(Student.class,id);执行此条程序,hibernate的执行过程:
1.查询session缓存:先查一下session缓存,看看该id对应的对象是否存在
2.缓存中没有这个对象 就创建个代理
因为延迟加载需要代理来执行 所以就创建了个代理,ok 到此为止 这句话就执行完了,这个 并没有去数据库交互查询
当你使用这个对象 比如stu.getName()或get()方法时候,此时才会触发sql语句
这个时候 hibernate就去查询二级缓存和数据库,数据库没有这条数据 就抛出异常ObjectNotFoundException
3、get方法的加载过程:因为hibernate规定get方法不能使用延迟加载 所以和load还是不一样的,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。
例如:Student stu = session.get(Student.class,id);执行此条程序,hibernate的执行过程:
1、get方法首先查询session缓存 (session缓存就是hibernate的一级缓存 这个概念大家应该清楚吧 )
2、get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象。如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。
3、get方法如果在session缓存中找到了该id对应的对象,并且不是被延迟加载的代理对象,或者在session缓存中没有找到该对象,则查找二级缓存,再没有就查找数据库,返回的对象为实体对象,如果都没有找到,则返回null
(这个代理实际就是空的对象 并没有去数据库查询得到的 我们叫代理对象,如果 去数据库查询了 返回到了这个对象 我们叫实体对象 就是这个对象真实存在)
我在总结性一句话这2者区别
get方法首先查询session缓存,没有的话直接发送sql查询数据库,一定要获取到真实的数据,否则返回null,并不适用二级缓存;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,就抛异常
criteria 查询:http://blog.csdn.net/xingtianyiyun/article/details/7703429
http://www.cnblogs.com/JemBai/archive/2010/01/06/1640636.html
hibernate的get和load区别
分类: hibernate 2012-11-15 00:15 261人阅读 评论(0) 收藏 举报
1、延迟加载:load是true而get是false,意思就是 load采用的是延迟加载的方式 而get不是,也就是说get()采用立即加载方式,而load()采用延迟加载;,hibernate思想是 既然这个方法支持延迟加载 他就认为这个对象一定在数据库存在
2、load方法的加载过程:
例如:Student stu = session.load(Student.class,id);执行此条程序,hibernate的执行过程:
1.查询session缓存:先查一下session缓存,看看该id对应的对象是否存在
2.缓存中没有这个对象 就创建个代理
因为延迟加载需要代理来执行 所以就创建了个代理,ok 到此为止 这句话就执行完了,这个 并没有去数据库交互查询
当你使用这个对象 比如stu.getName()或get()方法时候,此时才会触发sql语句
这个时候 hibernate就去查询二级缓存和数据库,数据库没有这条数据 就抛出异常ObjectNotFoundException
3、get方法的加载过程:因为hibernate规定get方法不能使用延迟加载 所以和load还是不一样的,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。
例如:Student stu = session.get(Student.class,id);执行此条程序,hibernate的执行过程:
1、get方法首先查询session缓存 (session缓存就是hibernate的一级缓存 这个概念大家应该清楚吧 )
2、get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象。如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。
3、get方法如果在session缓存中找到了该id对应的对象,并且不是被延迟加载的代理对象,或者在session缓存中没有找到该对象,则查找二级缓存,再没有就查找数据库,返回的对象为实体对象,如果都没有找到,则返回null
(这个代理实际就是空的对象 并没有去数据库查询得到的 我们叫代理对象,如果 去数据库查询了 返回到了这个对象 我们叫实体对象 就是这个对象真实存在)
我在总结性一句话这2者区别
get方法首先查询session缓存,没有的话直接发送sql查询数据库,一定要获取到真实的数据,否则返回null,并不适用二级缓存;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,就抛异常
//hql直接使用 // String hql = "select a from UrsMember a , UrsMemberInfo b where a.memberId = b.memberId and a.username like '%"+username+ "%' order by a.memberId desc"; // String countHql = "select count(*) from UrsMember a, UrsMemberInfo b where a.memberId = b.memberId and a.username like '%"+username+"%'" ; // ps = findWithPagination(countHql, hql, ps); //hql占位符 String hql = "select a from UrsMember a , UrsMemberInfo b where a.memberId = b.memberId and a.username like ? order by a.memberId desc"; String countHql = "select count(*) from UrsMember a, UrsMemberInfo b where a.memberId = b.memberId and a.username like ?" ; ps=findWithPagination(countHql, hql, ps, new Object[]{"%"+username+"%"}); //sql // String sql = "select a.* from urs_member a , urs_member_info b where a.member_id = b.member_id and a.username like ? order by a.member_id desc"; // String countSql = "select count(*) from urs_member a , urs_member_info b where a.member_id = b.member_id and a.username like ?" ; // ps= findWithPagination_sql(countSql, sql, ps, new Object[]{"%"+username+"%"}); /** * 根据hql和数据总条数分页得到数据 * @param hql hql语句 * @param maxCount 数据总条数 * @param ps 包含起始数据行数和每页行数的PageSupport对象 * @param values 需要set给Query占位符的参数,数组顺序需和占位符顺序一致 * @return 包含数据(items)和总数据条数目的PageSupport对象 */ protected <T> PageSupport<T> findWithPagination(String hql,Integer maxCount,PageSupport<T> ps,Object[] values){ Session session = getSession(); if(maxCount==null || hql==null || hql.equals("")){ return null; } ps.setTotalCount(maxCount.intValue()); Query query = session.createQuery(hql); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } List items = query.setFirstResult(ps.getStartIndex()).setMaxResults( ps.getCountOnEachPage()).list(); ps.setItems(items); return ps; } /** * 根据sql和数据总条数分页得到数据 * @param sql sql语句 * @param maxCount 数据总条数 * @param ps 包含起始数据行数和每页行数的PageSupport对象 * @param values 需要set给Query占位符的参数,数组顺序需和占位符顺序一致 * @return 包含数据(items)和总数据条数目的PageSupport对象 */ protected <T> PageSupport<T> findWithPagination_sql(String sql,Integer maxCount,PageSupport<T> ps,Object[] values){ Session session = getSession(); if(maxCount==null || sql==null || sql.equals("")){ return null; } ps.setTotalCount(maxCount.intValue()); Query query = session.createSQLQuery(sql); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } List items = query.setFirstResult(ps.getStartIndex()).setMaxResults( ps.getCountOnEachPage()).list(); ps.setItems(items); return ps; } /** * 根据count()的聚合hql语句查询数据总条数 * @param hql count()聚合Hql,如“SELECT count(*) FROM User” * @param values 需要set给Query占位符的参数,数组顺序需和占位符顺序一致 * @return 数据总条数 */ protected Integer getCount(String hql,Object[] values){ try{ Session session = getSession(); Query query = session.createQuery(hql); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } if(query.iterate().hasNext()){ Long maxCount = ((Long) query.iterate().next()); if(maxCount==null){ return 0; }else{ return maxCount.intValue(); } }else{ return 0; } }catch(Exception e){ e.printStackTrace(); } return null; } /** * 根据count()的聚合sql语句查询数据总条数 * @param hql count()聚合Hql,如“SELECT count(*) FROM User” * @param values 需要set给Query占位符的参数,数组顺序需和占位符顺序一致 * @return 数据总条数 */ protected Integer getCount_sql(String sql,Object[] values){ try{ Session session = getSession(); SQLQuery query = session.createSQLQuery(sql); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } if(query.list().size()>0){ return Integer.parseInt(query.list().get(0).toString()); }else{ return 0; } }catch(Exception e){ e.printStackTrace(); } return null; }
发表评论
-
hibernate连多个库及session操作
2014-06-06 16:19 625http://www.blogjava.net/yzzh9/a ... -
Spring 使用注解方式进行事务管理
2014-01-18 15:33 669事物注解方式: @Transactional 当标于类前时, ... -
Transaction rolled back because it has been marked as rollback-only
2014-01-16 15:02 632http://narcissusoyf.iteye.com/b ... -
An internal error occurred during: "Fetching children of Database".
2014-01-14 17:50 1430An internal error occurred duri ... -
hibernate异常:failed to lazily initialize a collection of role
2013-12-18 11:21 719设置lazy即可 private Set<UrsMem ... -
a different object with the same identifier value was already associated with th
2013-08-01 17:05 7791、a different object with the s ... -
applicationContext.xml
2013-08-01 11:59 885<?xml version="1.0& ... -
hibernate问题
2013-07-31 22:10 1174Caused by: java.lang.NoClassDef ... -
hibernate jpa
2013-07-29 23:05 716http://zhou137520.iteye.com/blo ... -
ssh框架搭建
2013-07-29 21:33 833http://blog.csdn.net/aaaaaaaa07 ... -
org.hibernate.hql.ast.QuerySyntaxException
2013-07-26 11:40 806在使用hibernate tools工具时,报错,如图 解 ... -
hibernate tools插件安装
2013-07-26 10:56 1396eclipse helios(3.6)版 1.启动 ... -
hibernate使用
2013-07-25 16:36 770http://blog.csdn.net/lovesummer ... -
Caused by: java.sql.SQLException: An attempt by a client to checkout a Connectio
2013-06-20 14:40 969<bean id="dataSource&qu ... -
Value '0000-00-00' can not be represented as java.sql.Timestamp
2013-06-13 16:41 1090Value '0000-00-00' can not be r ...
相关推荐
### Struts+Hibernate查询所有记录 #### 一、概述 在Java Web开发中,Struts与Hibernate是非常流行的框架组合,用于构建复杂的企业级应用。本文将详细介绍如何利用Struts和Hibernate来实现对Oracle数据库中所有...
【hibernate查询详解】 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式来处理数据库,从而避免了传统的JDBC编码方式带来的复杂性。本篇文章将...
利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~
Hibernate 查询语言 HQL Hibernate 查询语言 HQL 是一种面向对象的查询语言,用于检索对象。它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地...
本实践项目“Hibernate查询映射试验”旨在通过一系列示例帮助开发者掌握Hibernate中的查询映射技术,包括HQL(Hibernate Query Language)和Criteria API。 首先,Hibernate的核心是对象关系映射(ORM),它允许...
在深入探讨Hibernate查询缓存之前,我们先了解一下Hibernate的基础概念。Hibernate是一个强大的Java持久化框架,它简化了数据库操作,提供了对象关系映射(ORM)功能。在Hibernate中,对象的状态分为瞬时态、持久态...
最后,`hibernate查询`这个压缩包可能包含了一些示例代码和配置文件,用于演示如何在Java项目中实现上述查询方式。通过分析这些文件,你可以更好地理解Hibernate查询的工作原理,并将其应用到自己的项目中。 总之,...
【标题】:“Hibernate查询缓存及实现.PPT” 【描述】:“Hibernate查询缓存及实现.PPT” 在本文中,我们将深入探讨Hibernate框架中的查询缓存机制及其实施步骤,这是一项旨在提高应用程序性能的重要功能。查询...
Hibernate查询语言HQL
【标题】:“Hibernate查询语句写在配置文件中” 【正文】: Hibernate 是一个流行的 Java 应用程序框架,主要用于简化数据库操作。它提供了一种对象关系映射(ORM)机制,将数据库操作转化为对 Java 对象的操作,...
在“hibernate查询、连接池、二级缓存”这个主题中,我们将深入探讨这三个关键概念。 首先,让我们来了解**Hibernate查询**。Hibernate 提供了丰富的查询方式,包括HQL(Hibernate Query Language)和Criteria API...
HQL Hibernate查询语言,HQL的学习和参考的文档,开发必备。
Hibernate提供了一种灵活的查询语言——HQL(Hibernate Query Language),以及 Criteria 查询和 Criteria API,它们都可以用来获取数据表中的特定字段。 二、Hibernate配置 在使用Hibernate进行查询前,首先需要...
hibernate查询-hql等教程,对于学习hibernate有很好的帮助。
Hibernate支持两种类型的查询:原生SQL查询和Hibernate查询语言(HQL)。原生SQL查询允许开发者直接执行SQL语句,而HQL则是面向对象的查询语言,类似于SQL但更接近于Java。 4. 封装SQL查询结果为对象: - `...
Hibernate查询首先介绍get()和load()方法的区别:get()方法和load()方法的区别主要在于对二级缓存的使用上。load()方法会使用二级缓存,而get()方法在一级缓存没有找到会直接查询数据库,不会去二级缓存中查找。 get...
"Huikegeneratecodetool"这个文件可能是一个代码生成工具,它能自动生成符合Hibernate查询规则的代码,从而提高开发效率,减少手动编写SQL的错误。 总的来说,理解Hibernate查询中单一字段与多字段的区别对于优化...