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论坛.mhtjavaMD5加密及登录验证(备忘) - Hibernate - Java - ITeye论坛.mhtjavaMD5加密及登录验证(备忘
Spring2.5.3+Struts2.0.11.1+Hibernate3.2.6整合备忘 (转载)
以下是基于标题“struts+spring+hibernate3+webligic812环境配置备忘录”的详细知识点解析: ### 一、环境搭建与配置 #### 1. WebLogic Server安装与配置 - **安装过程**:首先,下载WebLogic Server 8.1.2版本的...
在Java Web开发中,SSHF(Struts2、Spring、Hibernate和FreeMarker)是一个常见的技术栈,用于构建高效、可维护的MVC应用程序。这些框架的整合能够提供强大的功能,如模型-视图-控制器架构、依赖注入、持久化管理和...
【标题】"s2sh框架实例——个人备忘录系统源码" 提供了一个学习和研究Web开发的宝贵资源,特别适合对Java Web技术感兴趣的初学者。S2SH是Struts2、Spring和Hibernate三个开源框架的组合,是Java领域广泛应用的MVC...
Java SSM备忘录管理系统毕业论文 本文主要介绍了基于 Java SSM 框架和 MySQL 数据库的备忘录管理系统的设计与实现。该系统旨在解决传统备忘录管理中的问题,实现信息化和网络化,提高备忘录管理的效率和经济性。 ...
【标题】中的“大学毕业设计 项目实训 个人备忘录系统(java SSH网站源代码)”表明这是一个基于Java的SSH框架实现的个人备忘录系统,适用于大学生进行毕业设计或项目实训。SSH是Struts2、Spring和Hibernate三个开源...
9. **数据持久化**:除了使用数据库存储数据外,系统可能还使用了ORM(Object-Relational Mapping)框架如Hibernate或MyBatis,以简化数据库操作,实现对象与数据库表之间的映射。 10. **文档和论文**:压缩包中...
【标题】:“备忘录”涉及的技术点涵盖了图形用户界面(GUI)的元素设计、程序关闭的优雅实现、数据库管理和系统事件监听等多个方面。 【图形按钮】是用户界面设计中的重要组成部分,它允许用户通过点击来执行特定...
系统的主要功能包括药品管理、类别管理、进货管理、出货管理、系统管理、备忘添加等。 在该系统的设计和实现过程中,我们首先对系统的可行性进行了分析,接着进行了需求分析和概要设计。然后,我们对系统的数据库表...
本系统使用jsf,richfaces,hibernate整合开发,完整的系统,个人日志系统,可以写日志,做备忘,行程,学习笔记等,覆盖了jsf,richfaces,hiberante等开发过程中的常用功能实现.适合新手的学习参考和学习.
Struts可以与Hibernate、iBatis等持久层框架集成,Spring框架可以用于依赖注入,提高应用的可测试性和解耦。 总的来说,Struts作为一个成熟的MVC框架,为Java Web开发提供了强大且灵活的工具,帮助开发者构建出高效...
这个备忘系列将探讨 Spring 的主要组成部分和使用方法。 **IoC 容器** IoC 是 Spring 的核心概念,它通过反转对象创建和管理的控制权,使得开发者不再手动实例化对象,而是由框架负责对象的生命周期。Spring 提供...
【EJB备忘(整理)】 企业级JavaBean(Enterprise JavaBeans,简称EJB)是Java平台企业版(Java EE)的一部分,它提供了一种标准的框架,用于开发和部署可扩展、安全、事务处理以及分布式的企业级应用程序。EJB是...
这是一个备忘录, 主要用angjularjs框架写的前台,bootstrap做的页面样式,页面跳转用了angular-ui-router这个模块插件。 后台主要用了springmvc和hibernate。这是我练笔的一个项目,由于时间关系有些功能没做,当中...
Code-memo 平时学习的开源框架的示例代码。包括mybatis、spring、spring-boot、hbase、...springboot、jpa、hibernate访问mysql,并提供restful接口 opensource-utils google guaua 使用示例,hbase访问接口以及hbase操
3. 使用Struts2整合Hibernate进行数据库操作,体验数据的CRUD操作。 4. 创建拦截器实现用户权限控制,只允许登录用户访问特定页面。 通过以上知识点的学习和实践,你将能够熟练掌握Struts2框架,为构建高效、可维护...
1. **创建数据库模型**:定义数据库表结构和数据模型,这通常是通过ORM(对象关系映射)框架如Hibernate或MyBatis完成的。 2. **版本记录**:在每次数据库结构更改时,创建一个新的版本。这可以通过脚本文件(如SQL...
标题中的"T1F1练习示例(s2sh)"暗示了这是一个关于编程练习的项目,主要使用Struts2、Spring和Hibernate这三种技术的整合,通常简称为"S2SH"。Struts2是一个流行的MVC(Model-View-Controller)框架,用于构建Java ...