`

Hibernate 备忘

 
阅读更多

Hibernate 备忘 

 

1. 概述

 

   HQL查询依赖于Query类,每一个Query实例对应一个查询对象.

   使用HQL查询按如下步骤进行:

   (1) 获取Hibernate Session对象

   (2) 编写HQL语句

   (3) 以HQL语句作为参数,调用createQuery方法创建查询对象

   (4) 如果HQL语句包含参数,则调用Query的setXxx方法为参数赋值

   (5) 调用Query对象的list()或uniqueResult()方法返回查询结果列表.

   

2. From 子句

 

   From 后面跟的是持久化类名.类名可以 跟一个 as 然后跟 持久化类的实例.

   比如 select p from Person as p;

   

3. Select 子句

 

   (1) select可以跟 持久化实例,或者实例的属性.如

       select p,p.name.firstName from Person p; 表示select 出来的list元素是数组

       数组结构类似于[Person实例,String类型的first name]

   

   (2) select new list(p.name,p.address) from Person as p,select出来的list的元素还是list.

   

   (3) 可以将select的实例直接封装成对象

       select new ClassTest(p.name,p.address) from Person as p

       前提是 ClassTest(p.name,p.address) 要存在这个类型的构造器

       这个select出来的是ClassTest实例的集合

       

   (4) select 还支持给选中的表达式 命名

       select p.name as personName from Person as p. 

       

       与map结合

       select new map(p.name as personName) from Person as p

       select出来的list元素为map,map以personName为key,p.name的实际值为value

       

      public static void main(String[] args)

      {

        Session session = HibernateUtil.currentSession();

        Transaction tx = session.beginTransaction();

        

        Query query = session.createQuery("select new map(p.name as personName) from Person as p");

        java.util.List list = query.list();

        for(Iterator iterator=list.iterator();iterator.hasNext(); )

        {

          Map map = (Map) iterator.next();

          System.out.println(map);

        }

        tx.commit();

        HibernateUtil.closeSession();

        

      }

      上面代码输出:

      {personName=yeeku}

      {personName=老朱}

      注:Person表里面数据为:

      INSERT INTO person_inf VALUES

      (1,'yeeku',30),

      (2,'老朱',30);

       

4. 多态查询

 

   from aInterface as  n 表示把实现了aInterface接口的所有持久化类的实例全查出来.(P483)

   

5. where 子句

 

   from Person where name like "tom%"  --

   与下面的效果相同

   from Person person where person.name like "tom%" 

   

6. 命名查询

   将HQL配置到映射文件中

   <hibernate-mapping>中使用<query>

   <!-- 定义命名查询 -->

   <query name="myNamedQuery">

    <!-- 这里配置命名查询的HQL语句 -->

    from Person person where p.age > ?

   </query>

   在代码中使用session的getNamedQuery("myNamedQuery");来获取Query对象.

   

7. 使用原生SQL查询

 

   标量查询 和 实体查询 (P497-498)

   标量查询:

   //执行标量查询

    public void scalarQuery()

    {

      //打开Session和事务

      Session session = HibernateUtil.currentSession();

      Transaction tx = session.beginTransaction();

      String sqlString = "select stu.* from student_inf as stu";

      List l = session.createSQLQuery(sqlString)

        //指定查询name和student_id两个数据列

        .addScalar("name" , StandardBasicTypes.STRING)

        .addScalar("student_id" , StandardBasicTypes.INTEGER)

        //返回标量值列表

        .list();

      for (Iterator it = l.iterator(); it.hasNext() ; )

      {

        //每个集合元素都是一个数组,数组元素是name、student_id两列值

        Object[] row = (Object[])it.next();

        System.out.println(row[0] + "\t" + row[1]);

      }

      tx.commit();

      HibernateUtil.closeSession();

    }

   

   addEntity(String alias,Class entityClass);

   setResultTransformer();//将查询结果映射成普通的bean

   Hibernate还可以将查询的结构转换成非持久化实体(即普通的JavaBean),只要该JavaBean

   为数据列提供了getter和setter方法.

   

   将实体的关联实体(通常是属性)转换成查询结果.

   使用addJoin(Strig alias,String path).(P500)

   同时将主表和从表数据都查出来

   

8. 使用定制SQL,改变Hibernate产生底层sql的方式.可以配置成存储过程.

   这样Hibernate在增删改时使用存储过程.(P504)

   

9. 使用命名SQL可实现定制装载(P505)

 

10. 使用过滤器(P506)

    (1) 在映射文件中配置,在<hibernate-mapping>标签中配置<filter-def>

    (2) 在<class>标签中配置<filter name="filter-def">以便启用通过

        <filter-def>定义的过滤器.也可作为<list>,<set>,<map>的子元素使用

    (3) 在session上调用方法enableFilter("filter-def").setParameter("paraName",value);

    

    一旦设置了过滤,则不管数据查询,还是数据加载,该过滤器都将起作用.

    启用过滤器后,过滤器在整个session范围内有效,知道调用disableFilter方法.

    

    <!-- 下面定义2个Filter,这里定义过滤器的名称,已经参数情况(几个参数,参数什么类型?) -->

  <filter-def name="effectiveDate">

  <filter-param name="asOfDate" type="date"/>

  </filter-def>

  <filter-def name="category">

  <filter-param name="catId" type="long"/>

  </filter-def>

 

  在一个xml映射文件中定义的过滤器可以在其他映射xml文件中使用(前提是这些xml文件由同一个sessionFactory加载并管理).

 

  <!-- 对Category应用数据过滤,class标签的子标签 这里condition中只有一个参数,类型是data,由上面的 filter-def name="category" 来定义-->

<filter name="effectiveDate" condition=":asOfDate BETWEEN eff_start_date and eff_end_date"/>

 

11. 上下文相关的session

    配置: 

    <property name="hibernate.current_session_context_class">thread</property>

    <property name="hibernate.current_session_context_class">jta</property>

    

 

   

分享到:
评论

相关推荐

    javaMD5加密及登录验证(备忘) - Hibernate - Java - ITeye论坛.mht

    javaMD5加密及登录验证(备忘) - Hibernate - Java - ITeye论坛.mhtjavaMD5加密及登录验证(备忘) - Hibernate - Java - ITeye论坛.mhtjavaMD5加密及登录验证(备忘

    Spring2.5.3+Struts2.0.11.1+Hibernate3.2.6整合备忘 (转载)

    Spring2.5.3+Struts2.0.11.1+Hibernate3.2.6整合备忘 (转载)

    struts+spring+hibernate3+webligic812环境配置备忘录

    以下是基于标题“struts+spring+hibernate3+webligic812环境配置备忘录”的详细知识点解析: ### 一、环境搭建与配置 #### 1. WebLogic Server安装与配置 - **安装过程**:首先,下载WebLogic Server 8.1.2版本的...

    SSHF备忘之依赖包(struts2+spring2.5+hibernate+freemarker)

    在Java Web开发中,SSHF(Struts2、Spring、Hibernate和FreeMarker)是一个常见的技术栈,用于构建高效、可维护的MVC应用程序。这些框架的整合能够提供强大的功能,如模型-视图-控制器架构、依赖注入、持久化管理和...

    s2sh框架实例——个人备忘录系统源码

    【标题】"s2sh框架实例——个人备忘录系统源码" 提供了一个学习和研究Web开发的宝贵资源,特别适合对Java Web技术感兴趣的初学者。S2SH是Struts2、Spring和Hibernate三个开源框架的组合,是Java领域广泛应用的MVC...

    java ssm备忘录管理系统毕业论文.docx

    Java SSM备忘录管理系统毕业论文 本文主要介绍了基于 Java SSM 框架和 MySQL 数据库的备忘录管理系统的设计与实现。该系统旨在解决传统备忘录管理中的问题,实现信息化和网络化,提高备忘录管理的效率和经济性。 ...

    大学 毕业设计 项目实训 个人备忘录系统(java SSH网站源代码)+JSP漂亮的界面控件.zip

    【标题】中的“大学毕业设计 项目实训 个人备忘录系统(java SSH网站源代码)”表明这是一个基于Java的SSH框架实现的个人备忘录系统,适用于大学生进行毕业设计或项目实训。SSH是Struts2、Spring和Hibernate三个开源...

    java记事簿管理系统_备忘录管理系统_通讯录_记账本-源码+数据库+论文or文档.zip

    9. **数据持久化**:除了使用数据库存储数据外,系统可能还使用了ORM(Object-Relational Mapping)框架如Hibernate或MyBatis,以简化数据库操作,实现对象与数据库表之间的映射。 10. **文档和论文**:压缩包中...

    备忘录

    【标题】:“备忘录”涉及的技术点涵盖了图形用户界面(GUI)的元素设计、程序关闭的优雅实现、数据库管理和系统事件监听等多个方面。 【图形按钮】是用户界面设计中的重要组成部分,它允许用户通过点击来执行特定...

    基于Struts和Hibernate的医院药品管理系统毕业设计论文.docx

    系统的主要功能包括药品管理、类别管理、进货管理、出货管理、系统管理、备忘添加等。 在该系统的设计和实现过程中,我们首先对系统的可行性进行了分析,接着进行了需求分析和概要设计。然后,我们对系统的数据库表...

    JSF+richfaces+hibernate整合开发源码--个人日志系统

    本系统使用jsf,richfaces,hibernate整合开发,完整的系统,个人日志系统,可以写日志,做备忘,行程,学习笔记等,覆盖了jsf,richfaces,hiberante等开发过程中的常用功能实现.适合新手的学习参考和学习.

    STRUTS备忘录、

    Struts可以与Hibernate、iBatis等持久层框架集成,Spring框架可以用于依赖注入,提高应用的可测试性和解耦。 总的来说,Struts作为一个成熟的MVC框架,为Java Web开发提供了强大且灵活的工具,帮助开发者构建出高效...

    Spring 备忘 (一)

    这个备忘系列将探讨 Spring 的主要组成部分和使用方法。 **IoC 容器** IoC 是 Spring 的核心概念,它通过反转对象创建和管理的控制权,使得开发者不再手动实例化对象,而是由框架负责对象的生命周期。Spring 提供...

    java版本控制(数据库版本控制)

    1. **创建数据库模型**:定义数据库表结构和数据模型,这通常是通过ORM(对象关系映射)框架如Hibernate或MyBatis完成的。 2. **版本记录**:在每次数据库结构更改时,创建一个新的版本。这可以通过脚本文件(如SQL...

    EJB备忘(整理)

    【EJB备忘(整理)】 企业级JavaBean(Enterprise JavaBeans,简称EJB)是Java平台企业版(Java EE)的一部分,它提供了一种标准的框架,用于开发和部署可扩展、安全、事务处理以及分布式的企业级应用程序。EJB是...

    angularjs-hibernate-springmvc

    这是一个备忘录, 主要用angjularjs框架写的前台,bootstrap做的页面样式,页面跳转用了angular-ui-router这个模块插件。 后台主要用了springmvc和hibernate。这是我练笔的一个项目,由于时间关系有些功能没做,当中...

    code-memo:代码备忘录, 包含mybatis、spring、spring-boot、hbase、hive、guava、jdk等示例代码

    Code-memo 平时学习的开源框架的示例代码。包括mybatis、spring、spring-boot、hbase、...springboot、jpa、hibernate访问mysql,并提供restful接口 opensource-utils google guaua 使用示例,hbase访问接口以及hbase操

    struts2从入门到精通总结(备忘)

    3. 使用Struts2整合Hibernate进行数据库操作,体验数据的CRUD操作。 4. 创建拦截器实现用户权限控制,只允许登录用户访问特定页面。 通过以上知识点的学习和实践,你将能够熟练掌握Struts2框架,为构建高效、可维护...

    T1F1练习示例(s2sh)

    标题中的"T1F1练习示例(s2sh)"暗示了这是一个关于编程练习的项目,主要使用Struts2、Spring和Hibernate这三种技术的整合,通常简称为"S2SH"。Struts2是一个流行的MVC(Model-View-Controller)框架,用于构建Java ...

Global site tag (gtag.js) - Google Analytics