`
Kenny.Lee
  • 浏览: 515752 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

精通Hibernate读书笔记

    博客分类:
  • J2EE
阅读更多
生成Java类

    使用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》中的源码。
1
0
分享到:
评论

相关推荐

    《深入浅出Hibernate》读书笔记

    总之,《深入浅出Hibernate》读书笔记涵盖了实体对象生命周期的转换、实体对象的识别机制以及Hibernate的多级缓存策略,这些都是理解并有效使用Hibernate的关键点。通过深入学习这些概念,开发者能够更好地掌握...

    Hibernate学习笔记

    Hibernate学习笔记 Hibernate学习笔记 Hibernate学习笔记 Hibernate学习笔记

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    精通hibernate 完整版

    精通hibernate 完整版 力荐学习hibernate的学习用书

    Hibernate读书笔记

    hibernate读书笔记,里面有一些实例和解说,是自己整理的,非常适合开发时做参考

    精通Hibernate+源代码

    《精通Hibernate:Java对象持久化技术详解》是一本深度探讨Java对象持久化技术的专业书籍,主要聚焦于Hibernate框架的应用与实战。Hibernate作为Java领域中最流行的ORM(对象关系映射)框架,极大地简化了数据库操作...

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    精通Hibernate_孙卫琴.pdf

    精通Hibernate_孙卫琴.pdf

    精通hibernate-孙卫琴

    精通hibernate-孙卫琴,精通hibernate-孙卫琴,精通hibernate-孙卫琴,精通hibernate-孙卫琴

    精通Hibernate(孙卫琴)

    《精通Hibernate(孙卫琴)》是一本深入探讨Java对象持久化技术的专业书籍,主要针对的是Hibernate 2.1版本,这个版本在当时是广泛使用的,具有很高的实用性和稳定性。Hibernate作为一款强大的对象关系映射(ORM)框架...

    孙卫琴精通hibernate part2

    《孙卫琴精通Hibernate Part2》是一份深入学习Hibernate框架的教程,主要涵盖了该框架的高级特性和实战应用。在本教程的第二部分,我们将会更深入地探讨Hibernate的各个重要方面,帮助开发者提升数据库操作的效率和...

    精通Hibernate:Java持久化对象技术详解[第二版]

    《精通Hibernate:Java持久化对象技术详解[第二版]》是一部深入探讨Hibernate框架的专业书籍,旨在帮助Java开发者熟练掌握和运用这一强大的ORM(Object-Relational Mapping)工具。Hibernate是Java开发领域中广泛...

    Hibernate开发资料

    3. **精通Hibernate读书笔记.doc**: 这份笔记可能是一位资深开发者的学习心得,可能包含了实战案例、最佳实践以及常见问题的解决方案。笔记通常更加实用,能帮助读者在实际项目中快速解决问题,提高开发效率。 4....

    精通Hibernate源代码jar包1

    《深入理解Hibernate源码:基于“精通Hibernate源代码jar包1”》 在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇文章将围绕“精通Hibernate源代码jar包1”进行...

    孙卫琴精通hibernate part1

    《孙卫琴精通Hibernate Part1》是一份关于深入学习Hibernate框架的教程,涵盖了该框架的基础与进阶内容。本部分是整个系列的前三章节,旨在帮助开发者全面理解Hibernate的工作原理和核心特性,以便在实际开发中高效...

    hibernate 读书笔记

    **标题:“Hibernate 读书笔记”** 在IT领域,Hibernate是一个非常重要的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。这篇读书笔记将深入探讨Hibernate的核心概念、工作原理以及如何在...

    精通hibernate源码ch3

    本文将深入探讨“精通Hibernate源码Chapter 3”的核心知识点,主要关注Java对象持久化技术和Hibernate的实现原理。 一、对象持久化 对象持久化是将内存中的对象状态保存到持久存储介质(如数据库)的过程,使得...

    hibernate 学习笔记精要

    hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要

Global site tag (gtag.js) - Google Analytics