hibernate hql查询查询

当前访客身份:游客 [
低调做人,高调做事
:这个是IOS适用的 还是安卓适用的啊
:java.net.ConnectException: Connection refused...
:引用来自“蓝浩”的评论 胡说,GBK完全是开发者自...
:胡说,GBK完全是开发者自己的陋习,我写php就一直...
:引用来自“maxue”的评论 不懂,md5应该是唯一的...
:不懂,md5应该是唯一的
:这个就是似乎说的函数式的方式吧。讲究多使用不可...
:引用来自“许雷神”的评论大福利呀,谢谢 好东西...
:大福利呀,谢谢
:引用来自“嗜血程序员”的评论 谢谢兄弟,里面有...
今日访问:12
昨日访问:110
本周访问:459
本月访问:1468
所有访问:40924
关于hibernate中查询缓存的学习
发表于2年前( 18:40)&&
阅读(374)&|&评论()
0人收藏此文章,
&&&&&& 以前项目中很少去管缓存问题,但为了提高效率又不得不去考虑。对这方面不是太熟悉,所以今天下午特意的去学了一下hibernate中查询缓存的实现。
&&&&&& 实现如下:
&&&&&&& 一,在hibernate.cfg.xml配置文件中配置hibernate.cache.use_query_cache属性
&&&&&&&&&& &property name=&hibernate.cache.provider_class&&org.hibernate.cache.HashtableCacheProvider&/property&
&&&&&&&&&& &property name=&hibernate.cache.use_query_cache&&true&/property&&
&&&&&&& 二,在Dao类使用的方法中设置
&&&&&&&&public List&Object[]& getInfo(){ && &&& &&&&&String hql=& from Table&; && &&& &&&&&List&Object[]& list = this.getHibernateTemplate().find(hql); && &&& &&&&&this.getHibernateTemplate().setCacheQueries(true);//设为查询缓存 && &&& &&&&&this.getHibernateTemplate().setQueryCacheRegion(&c1&);//设置查询缓存区域,清除查询缓存时用 && &&& &&&&&if(list!= null){ && &&& &&&&&&& &if(list.size()&0) && &&&&&&& &} && &&& &&&&& && &&&&&}
&&&&&&& 三,在编辑方法中清除查询缓存
&&& &&& public void update(Object obj){ &&&&&&&&&& this.getHibernateTemplate().update(obj); &&&&&&&&&& this.getHibernateTemplate().getSessionFactory().evictQueries(&c1&);//在编辑对象时清除查询缓存,如果不清除的话,调用getInfo()方法就不会更新还是原来的数据。c1就是上面设置时设置的查询缓存区域。 &&&&&&& }
&&&&今天暂时也就学了这么多,可能表达不够清晰,但我在本地测试是没问题的,也就是说,如果设置了查询缓存,调用时,只在第一次调用生成一条sql语句(hibernate.cfg.xml配置文件中配置了show_sql为true),然后继续调用的话,就不会生成sql语句了,也就是说没有去查询数据库了,然后,编辑时,将查询缓存清除,再调用时又会重新去数据库中查询,也就又生成一条sql语句。只要用对地方,应该是能提高查询效率的,使用场景适合查询多,编辑少处。&&
&&& spring中配置hibernate的查询缓存问题,有些人可能没用hibernate中的hibernate.cfg.xml文件。直接在spring中配置,今天就遇到了这个问题。配置如下:
&&&&&bean id=&sessionFactory& class=&org.springframework.orm.hibernate3.LocalSessionFactoryBean&& && &&& &&&& &property name=&dataSource&&&ref local=&dataSource& /&&/property& && &&& &&&& &property name=&hibernateProperties&& && &&& &&& &&& &&props& && &&& &&& &&& &&& &&prop key=&hibernate.cache.provider_class&&org.hibernate.cache.HashtableCacheProvider&/prop& && &&& &&& &&& &&& &&prop key=&hibernate.cache.use_query_cache&&true&/prop& && &&& &&& &&& &&/props& && &&& &&& &&/property&
&&&&&&& .......
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读随笔- 118&
评论- 850&
&&&&&&&&&&&
&&&&&&&&&&&这些天过的好乱,也许是因为考完试了,心里有些松懈吧。也许是最近发生的事对我有些触动
吧。感觉自己都已经不懂自己了。面对一些人的教导,我很感激。因为很多话都对我有非常大的帮助和
启发,也让我除了做技术,玩编程外,明白了很多道理,也许这就是一个人成熟的过程吧。我真的很希
望我能够忘掉以前的不懂事,忘掉以前的轻狂,踏踏实实的做技术。
&&&&&&&&&&&自己的&#8220;真理&#8221;有时也会错,自己的想法有时也很&#8220;天真&#8221;。我真的很想静一静。晚饭后看了
一个在百度实习的师兄写的一篇,觉得写的很棒,明白了高手的一个定义,或者说是一种境界,一种
高深的东西。
&&&&&&&&&&&我很想从现在做起,使自己能够真正享受编程带来的快乐,没有虚荣,没有竞争,没有杂念。
只有快乐,只有充实,只有无悔。当然我说到做到,那篇日志讲的是一个从点到面,从面到点的哲理。
我觉得有必要写一个hibernate的总结性随笔,从点到面,讲讲hibernate查询的6种方法。分别是HQL查询
,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询。
&&&&&&&&&&&如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要实现的一般功能,但是
从一个点,让我们掌握6中方法,则提供了更多选择。每一种方法都有其适用的情况与前提。
HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:
static&void&query(String&name){
&&Session&s=null;
&&&s=HibernateUtil.getSession();
&&&//from后面是对象,不是表名
&&&String&hql="from&Admin&as&admin&where&admin.aname=:name";//使用命名参数,推荐使用,易读。
&&&Query&query=s.createQuery(hql);
&&&query.setString("name",&name);
&&&List&Admin&&list=query.list();
&&&for(Admin&admin:list){
&&&&System.out.println(admin.getAname());
&&}finally{
&&&if(s!=null)
&&&s.close();
适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。
对象化查询Criteria方法:
static&void&cri(String&name,String&password){
&&Session&s=null;
&&&s=HibernateUtil.getSession();
&&&Criteria&c=s.createCriteria(Admin.class);
&&&c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
&&&c.add(Restrictions.eq("apassword",&password));
&&&List&Admin&&list=c.list();
&&&for(Admin&admin:list){
&&&&System.out.println(admin.getAname());
&&}finally{
&&&if(s!=null)
&&&s.close();
适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。
动态分离查询DetachedCriteria
static&List&dc(DetachedCriteria&dc)&{
&&Session&s&=&HibernateUtil.getSession();
&&Criteria&c&=&dc.getExecutableCriteria(s);
&&List&rs&=&c.list();
&&s.close();
DetachedCriteria&dc&=&DetachedCriteria.forClass(User.class);
&&int&id&=&<span style="color: #;
&&if&(id&!=&<span style="color: #)
&&&dc.add(Restrictions.eq("id",&id));
&&Date&age&=&new&Date();
&&if&(age&!=&null)
&&&dc.add(Restrictions.le("birthday",&age));
&&List&users&=&dc(dc);
&&System.out.println("离线查询返回结果:"&+&users);
适用情况:面向对象操作,分离业务与底层,不需要字段属性摄入到Dao实现层。& 缺点:适用面较HQL有限。
static&List&example(User&user)&{
&&Session&s&=&HibernateUtil.getSession();
&&List&User&&users&=&s.createCriteria(User.class).add(
&&&&Example.create(user)).list();
&&//&List&User&
&&//&users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
&&//&.createCriteria("child").add((Example.create(user))).list();
适用情况:面向对象操作。&& 缺点:适用面较HQL有限,不推荐。
static&List&sql()&{
&&Session&s&=&HibernateUtil.getSession();
&&Query&q&=&s.createSQLQuery("select&*&from&user").addEntity(User.class);
&&List&User&&rs&=&q.list();
&&s.close();
适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法&& 缺点:破坏跨平台,不易维护,不面向对象。
static&List&namedQuery(int&id)&{
&&Session&s&=&HibernateUtil.getSession();
&&Query&q&=&s.getNamedQuery("getUserById");
&&q.setInteger("id",&id);
&&return&q.list();
&?xml&version="1.0"&encoding="utf-8"?&
&!DOCTYPE&hibernate-mapping&PUBLIC&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&
&&&&&class&name="com.sy.vo.User"&table="user"&catalog="news"&
&&&&&/class&
&&&&&!--&命名查询:定义查询条件&--&
&&&&&query&name="getUserById"&
&&&&&&![CDATA[from&User&where&id=:id]]&
&&&&&/query&
&&&&&!--&命名查询中使用sql,不推荐使用,影响跨数据库
&&&&&sql-query&name="getUserById2"&
&&&&&&![CDATA[select&*&from&User&where&]]&
&&&&&/sql-query&&--&
&/hibernate-mapping&
适用情况:万能方法,有点像ibatis轻量级框架的操作,方便维护。& 缺点:不面向对象。基于hql和sql,有一定缺陷。
**************精品软件推荐:NetBeans6.5 java和PHP开发人员的利器*****************
程序员杂志上robbin推荐了这个IDE,于是昨天下载了一个,个人感觉很好用。以下是我觉得比较好的地方:
NetBeans6.5(最新版)是一个免费的IDE工具,很利于推广。
基于JDK5和6,基于tomcat6,mysql5。
支持插件,有完美汉化的开发环境,利于新手使用。
目前支持J2SE,J2EE(JSF,EJB,Hibernate,Spring,JPA),J2ME,
PHP,Ruby,C/C++,Groovy,JavaFX,js......的开发。
C/C++需要自己添加配置,默认不支持编译。Ruby默认有内置解析器。
别的支持有待尝试。
具备自动提示,但是感知速度较慢,不够强。
xml配置文件操作智能化,方便开发。
内存占用少160MB左右,软件大小不到250MB。
下载地址:
阅读(...) 评论()3569人阅读
数据库查询排序 常用
package com.fgh.
import java.util.HashM
import java.util.M
public class Team {
private Map students = new HashMap();
public String getId() {
public void setId(String id) {
public String getName() {
public void setName(String name) {
this.name =
public Map getStudents() {
public void setStudents(Map students) {
this.students =
hibernate.cfg.xml
&?xml version='1.0' encoding='UTF-8'?&
&!DOCTYPE hibernate-configuration PUBLIC
&-//Hibernate/Hibernate Configuration DTD 3.0//EN&
&http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd&&
&!-- Generated by MyEclipse Hibernate Tools.
&hibernate-configuration&
&session-factory&
&property name=&connection.url&&
jdbc:mysql://localhost:3306/hibernate
&/property&
&property name=&connection.username&&root&/property&
&property name=&connection.password&&root&/property&
&property name=&connection.driver_class&&
com.mysql.jdbc.Driver
&/property&
&property name=&dialect&&
org.hibernate.dialect.MySQLDialect
&/property&
&property name=&show_sql&&true&/property&
&mapping resource=&Team.hbm.xml& /&
&/session-factory&
&/hibernate-configuration&
Team.hbm.xml
&?xml version=&1.0&?&
&!DOCTYPE hibernate-mapping PUBLIC
&-//Hibernate/Hibernate Mapping DTD 3.0//EN&
&http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&&
&hibernate-mapping&
&class name=&com.fgh.hibernate.Team& table=&team_map&&
&id name=&id& column=&id& type=&string&&
&generator class=&uuid&&&/generator&
&property name=&name& column=&name& type=&string&&&/property&
&!-- order-by 指按数据库排序 属性值是数据库中的字段名 不是属性名 默认是按升序排序--&
&map name=&students& table=&student_map& order-by=&name desc&&
&key column=&team_id&&&/key&
&index column=&name& type=&java.lang.String&&&/index&&!-- 指定的是map中的key --&
&element column=&value& type=&java.lang.String&&&/element&&!-- 指定的是map中的value --&
&/hibernate-mapping&
建表类:CreateTable.java
package com.fgh.
import org.hibernate.cfg.C
import org.hibernate.tool.hbm2ddl.SchemaE
public class CreateTable {
public static void main(String[] args) {
SchemaExport export = new SchemaExport(new Configuration().configure());
export.create(true, true);
InsertTest.java
package com.fgh.
import java.util.C
import java.util.I
import java.util.M
import org.hibernate.S
import org.hibernate.SessionF
import org.hibernate.T
import org.hibernate.cfg.C
public class InsertTest {
private static SessionFactory sessionF
sessionFactory = new Configuration().configure()
.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
public static void main(String[] args) {
Session session = sessionFactory.openSession();
Transaction tx =
// 保存操作
// Team team = new Team();
// team.setName(&team1&);
// HashMap map = (HashMap) team.getStudents();
// map.put(&aa&, &zhangsan&);
// map.put(&bb&, &lisi&);
// map.put(&ccc&, &wangwu&);
tx = session.beginTransaction();
// 查询操作 这里使用uniqueResult()方法返回一个唯一的对象
// 而不是返回list 方便 Team 和 name 都是指类里面的属性
Team team = (Team) session.createQuery(
&from Team t where t.name = 'team1'&).uniqueResult();
Map map = team.getStudents();
Collection collection = map.values();
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
tx.commit();
} catch (Exception e) {
e.printStackTrace();
if (null != tx) {
tx.rollback();
} finally {
session.close();
后台打印sql:
Hibernate: select team0_.id as id0_, team0_.name as name0_ from team_map team0_ where team0_.name='team1'
Hibernate: select students0_.team_id as team1_0_, students0_.value as value0_, students0_.name as name0_ from student_map students0_ where students0_.team_id=? order by students0_.name desc
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:62392次
积分:1009
积分:1009
排名:千里之外
原创:34篇
转载:19篇
评论:16条
(1)(2)(2)(1)(1)(1)(1)(2)(2)(7)(3)(14)(4)(4)(4)(1)(3)hibernate分页查询得到totalSize大家是如何实现的
[问题点数:100分,结帖人ufofind]
hibernate分页查询得到totalSize大家是如何实现的
[问题点数:100分,结帖人ufofind]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年10月 总版技术专家分月排行榜第三
2014年3月 Java大版内专家分月排行榜第一2014年1月 Java大版内专家分月排行榜第一2013年12月 Java大版内专家分月排行榜第一2013年11月 Java大版内专家分月排行榜第一2013年10月 Java大版内专家分月排行榜第一
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。hibernate 具体表信息查询_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
hibernate 具体表信息查询
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢

我要回帖

更多关于 hibernate 的文章

 

随机推荐