- 浏览: 515752 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
jxq0816:
请问博主task:executortask:scheduler ...
Spring任务调度器之Task的使用 -
eithree:
thanks you so much! This proble ...
解决ECShop transport.js与jQuery冲突 -
周聪龙:
按照你的配置,点击登录按钮没反应呀,所有的Ip都改为自己的了呀 ...
自定义客户端登录CAS服务器-iframe实现 -
周聪龙:
denglihong 写道shangliuyan 写道我点击提 ...
自定义客户端登录CAS服务器-iframe实现 -
nihaonihao1987:
...
Spring任务调度器之Task的使用
生成Java类
使用hibernate tools(hbm2java)
自定义类型关联
实现UserType接口或者CompositeUserType接口
扩充集合中的关联
第五章比较复杂,中文版的89页。
Hibernate支持映射标注
请参考http://annotations.hibernate.org
在XML建立查询语句
在HBM文件加入查询语句,具体在</hibernate-mapping>那一行的前面。
然后建立query时调用getNamedQuery("com.oreilly.hh.tracksNoLongerThan")
条件查询
criteria.add
模糊查询Restrictions.like("title", "%A%")
不想写%的话可以使用Restrictions.like("title", "%A%", MatchMode.ANYWHERE)
如果想进行区分大小写的批评,应该是使用ilike,而不是like
如果你希望找出满足任意条件之一的对象,而非满足所有条件的对象,就得显式的使用Restrictions.disjunction()将这些条件分组。
投影
多个投影返回的是Array
带聚合的投影
示例查询
默认的行为是,值为null的属性将被忽略,对字符串值按照区分大小写的、逐字的方式进行比较。如果想在比较时忽略值为0的属性。,可以调用example的excludeZeros()方法;或者,如果希望对值为null的属性进行匹配,可以调用excludeNone()。而excludeProperty()方法则可以让你明确忽略指定名称的特定属性,不过这像是在手工构建条件查询。为了调整字符串处理。还可以使用ignoreCase()和enableLike()方法,从他们的名字可以知道各自的用途。
面向属性的criteria
以前
criteria.add(Restrictions.le("playTime", length));
而是用
criteria.add(Property,forName("playTime").le(length));
criteria.addOrder(Order.asc("name").ignoreCase());
而是用
criteria.addOrder(Property.forName("name").asc().ignoreCase());
投影
criteria.setProjection(Projections.max("playTime"));
等价的方法
criteria.setProjection(Property.forName("playTime").max());
浅谈HQL
比较代表性的例子
原生SQL查询
return是告诉hibernate,我们准备再查询中使用track别名来引用Track对象,这样就能够在查询语句中使用简写的{track.*}来引用TRACK数据表中所需要的所有字段以创建Track实力(注意,在查询语句中这样使用别名时,必须用大括号将别名括起来。这能让我们“脱离”原生SQL语句环境,用hibernate映射类和属性来描述查询内容)
注:此书看完后并不会精通hibernate...要想达到精通,还是看看《java persistence with hibernate》吧
PS:附件为《精通hibernate》中的源码。
使用hibernate tools(hbm2java)
自定义类型关联
实现UserType接口或者CompositeUserType接口
扩充集合中的关联
第五章比较复杂,中文版的89页。
Hibernate支持映射标注
请参考http://annotations.hibernate.org
在XML建立查询语句
在HBM文件加入查询语句,具体在</hibernate-mapping>那一行的前面。
<query name="com.oreilly.hh.tracksNoLongerThan"> <![CDATA[ from Track as track where track.playTime <= :length ]]> </query>
然后建立query时调用getNamedQuery("com.oreilly.hh.tracksNoLongerThan")
条件查询
criteria.add
模糊查询Restrictions.like("title", "%A%")
不想写%的话可以使用Restrictions.like("title", "%A%", MatchMode.ANYWHERE)
如果想进行区分大小写的批评,应该是使用ilike,而不是like
如果你希望找出满足任意条件之一的对象,而非满足所有条件的对象,就得显式的使用Restrictions.disjunction()将这些条件分组。
Criteria criteria = session.createCriteria(Track.class); Disjunction any = Restrictions.disjunction(); any.add(Restrictions.le("playtime", length)); any.add(Restrictions.le("title", "%A%"); criteria.add(any);
投影
criteria.setProjection(Projections.property("title")); return criteria.list();
多个投影返回的是Array
/** * Retrieve the titles and play times of any tracks that contain a * particular text string. * * @param text the text to be matched, ignoring case, anywhere in the title. * @param session the Hibernate session that can retrieve data. * @return the matching titles and times wrapped in object arrays. */ public static List titlesContainingTextWithPlayTimes(String text, Session session) { Criteria criteria = session.createCriteria(Track.class); criteria.add(Restrictions.like("title", text, MatchMode.ANYWHERE) .ignoreCase()); criteria.setProjection(Projections.projectionList(). add(Projections.property("title")). add(Projections.property("playTime"))); return criteria.list(); }
带聚合的投影
/** * Print statistics about various media types. * * @param session the Hibernate session that can retrieve data. */ public static void printMediaStatistics(Session session) { Criteria criteria = session.createCriteria(Track.class); criteria.setProjection(Projections.projectionList(). add(Projections.groupProperty("sourceMedia").as("media")). add(Projections.rowCount()). add(Projections.max("playTime"))); criteria.addOrder(Order.asc("media")); for (Object o : criteria.list()) { Object[] array = (Object[])o; System.out.println(array[0] + " track count: " + array[1] + "; max play time: " + array[2]); } }
示例查询
/** * Retrieve any tracks that were obtained from a particular source media * type. * * @param media the media type of interest. * @param session the Hibernate session that can retrieve data. * @return a list of {@link Track}s meeting the media restriction. */ public static List tracksFromMedia(SourceMedia media, Session session) { Track track = new Track(); track.setSourceMedia(media); Example example = Example.create(track); Criteria criteria = session.createCriteria(Track.class); criteria.add(example); criteria.addOrder(Order.asc("title")); return criteria.list(); }
默认的行为是,值为null的属性将被忽略,对字符串值按照区分大小写的、逐字的方式进行比较。如果想在比较时忽略值为0的属性。,可以调用example的excludeZeros()方法;或者,如果希望对值为null的属性进行匹配,可以调用excludeNone()。而excludeProperty()方法则可以让你明确忽略指定名称的特定属性,不过这像是在手工构建条件查询。为了调整字符串处理。还可以使用ignoreCase()和enableLike()方法,从他们的名字可以知道各自的用途。
面向属性的criteria
以前
criteria.add(Restrictions.le("playTime", length));
而是用
criteria.add(Property,forName("playTime").le(length));
criteria.addOrder(Order.asc("name").ignoreCase());
而是用
criteria.addOrder(Property.forName("name").asc().ignoreCase());
投影
criteria.setProjection(Projections.max("playTime"));
等价的方法
criteria.setProjection(Property.forName("playTime").max());
浅谈HQL
比较代表性的例子
<query name="com.oreilly.hh.tracksNoLongerThan"> <![CDATA[ select track.id, track.title from Track as track where track.playTime <= :length order by track.title desc ]]> </query> <query name="com.oreilly.hh.trackSummary"> <![CDATA[ select count(*), min(track.playTime), max(track.playTime) from Track as track where :artist in elements(track.artists) ]]> </query>
原生SQL查询
<sql-query name="com.oreilly.hh.tracksEndingAt"> <return alias="track" class="com.oreilly.hh.data.Track"/> <![CDATA[ select {track.*} from TRACK as {track} where SECOND({track}.PLAYTIME) = :seconds ]]> </sql-query>
return是告诉hibernate,我们准备再查询中使用track别名来引用Track对象,这样就能够在查询语句中使用简写的{track.*}来引用TRACK数据表中所需要的所有字段以创建Track实力(注意,在查询语句中这样使用别名时,必须用大括号将别名括起来。这能让我们“脱离”原生SQL语句环境,用hibernate映射类和属性来描述查询内容)
注:此书看完后并不会精通hibernate...要想达到精通,还是看看《java persistence with hibernate》吧
PS:附件为《精通hibernate》中的源码。
- Harnessing_Hibernate.zip (1 MB)
- 下载次数: 9
发表评论
-
自定义struts2的url标签的生成
2012-05-08 17:36 2867本文是针对struts2的struts-tags中的s:url ... -
使用VisualVM监测Tomcat JVM情况的配置(Windows+Linux)
2012-04-17 10:02 4417一,Windows环境 1.若以服务的方式启 ... -
【转】Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat
2012-02-10 18:06 2187jstack -- 如果java程序崩溃生成core文件 ... -
DynaBean的体会
2011-12-29 22:16 0在开发中,为了减少一些不必要的VO和formBean(尽管在s ... -
自己的修改hibernate-tools的模板和修复Comment乱码问题
2011-11-02 11:38 8058关于自定义 之前一直用hibernate-tools来 ... -
SpringSecurity备忘配置
2011-11-01 11:37 13141.定义登录后的首页action.do,该action决定了用 ... -
【转】使用 Eclipse Memory Analyzer 检测内存泄漏问题
2011-09-28 11:39 1324本文是关于在开发Talend RCP 过程中碰到 ... -
编写使用SpringSecurity的JUnit测试提醒
2011-08-15 15:40 3467近日在使用SpringSecurity的项目中发现一个小问题, ... -
【转】sun.misc.BASE64Encoder找不到的解决方法
2011-08-09 11:21 3401sun.misc.BASE64Encoder/BASE64De ... -
【转】如何在win7系统上安装Jdk版本1.6
2011-07-27 17:10 1663鉴于有些朋友对JDK的安装不太熟悉,特意转载此教程。原地址如下 ... -
我的eclipse插件推荐
2011-07-03 19:56 114601. ER图工具 ERMaster - http: ... -
使用Jakarta Common Digester解析XML的简单例子
2011-04-19 13:36 2392Jakarta Commons Digester官方网址 ht ... -
Struts2中的EL表达式兼容问题
2009-12-29 16:33 2328今天遇到一个郁闷的问题,页面某段文字显示的时候就显示一半,查看 ... -
获取上传文件的字符编码
2009-11-10 22:50 3551重点又回到了国人都很烦恼的字符编码问题,真羡慕老外们。不过作为 ... -
整合Acegi使用HTTPS安全通道(SSL)
2009-05-15 14:55 2676首先在你使用application s ... -
也谈Java汉字按照拼音排序
2009-04-10 00:11 5600最近项目上使用到汉字排序的问题,网上搜索了一下后普遍使用下面的 ... -
使用JUnit在struts+spring+hibernate框架环境下进行单元测试
2009-04-01 00:25 6916过往使用的方式从最原始的IDE的DEBUG工具断点查错到目前还 ... -
使用clone解决hibernate+spring集成中的延迟加载问题及分析(no session
2009-03-30 23:59 2296首先说明一下,hibernate的延迟加载特性(lazy)。所 ... -
关于获取表单数据
2009-03-28 01:25 4216今天有个同事做二 ...
相关推荐
总之,《深入浅出Hibernate》读书笔记涵盖了实体对象生命周期的转换、实体对象的识别机制以及Hibernate的多级缓存策略,这些都是理解并有效使用Hibernate的关键点。通过深入学习这些概念,开发者能够更好地掌握...
Hibernate学习笔记 Hibernate学习笔记 Hibernate学习笔记 Hibernate学习笔记
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...
精通hibernate 完整版 力荐学习hibernate的学习用书
hibernate读书笔记,里面有一些实例和解说,是自己整理的,非常适合开发时做参考
《精通Hibernate:Java对象持久化技术详解》是一本深度探讨Java对象持久化技术的专业书籍,主要聚焦于Hibernate框架的应用与实战。Hibernate作为Java领域中最流行的ORM(对象关系映射)框架,极大地简化了数据库操作...
《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...
精通Hibernate_孙卫琴.pdf
精通hibernate-孙卫琴,精通hibernate-孙卫琴,精通hibernate-孙卫琴,精通hibernate-孙卫琴
《精通Hibernate(孙卫琴)》是一本深入探讨Java对象持久化技术的专业书籍,主要针对的是Hibernate 2.1版本,这个版本在当时是广泛使用的,具有很高的实用性和稳定性。Hibernate作为一款强大的对象关系映射(ORM)框架...
《孙卫琴精通Hibernate Part2》是一份深入学习Hibernate框架的教程,主要涵盖了该框架的高级特性和实战应用。在本教程的第二部分,我们将会更深入地探讨Hibernate的各个重要方面,帮助开发者提升数据库操作的效率和...
《精通Hibernate:Java持久化对象技术详解[第二版]》是一部深入探讨Hibernate框架的专业书籍,旨在帮助Java开发者熟练掌握和运用这一强大的ORM(Object-Relational Mapping)工具。Hibernate是Java开发领域中广泛...
3. **精通Hibernate读书笔记.doc**: 这份笔记可能是一位资深开发者的学习心得,可能包含了实战案例、最佳实践以及常见问题的解决方案。笔记通常更加实用,能帮助读者在实际项目中快速解决问题,提高开发效率。 4....
《深入理解Hibernate源码:基于“精通Hibernate源代码jar包1”》 在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇文章将围绕“精通Hibernate源代码jar包1”进行...
《孙卫琴精通Hibernate Part1》是一份关于深入学习Hibernate框架的教程,涵盖了该框架的基础与进阶内容。本部分是整个系列的前三章节,旨在帮助开发者全面理解Hibernate的工作原理和核心特性,以便在实际开发中高效...
**标题:“Hibernate 读书笔记”** 在IT领域,Hibernate是一个非常重要的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。这篇读书笔记将深入探讨Hibernate的核心概念、工作原理以及如何在...
本文将深入探讨“精通Hibernate源码Chapter 3”的核心知识点,主要关注Java对象持久化技术和Hibernate的实现原理。 一、对象持久化 对象持久化是将内存中的对象状态保存到持久存储介质(如数据库)的过程,使得...
hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要