1.maven 管理依赖 ??
mvn exec:java -Dexec.mainClass="org.hibernate.tutorial.EventManager" -Dexec.args="store" //运行
2.javaBean
a)get,set 重构时的健壮性
b)private hibernate可直接访问
c)建表使用标识符 id ,set方法private,让hibernate分配标识符值
d)要无参数构造器(hibernate生成对象)
e)使用运行时代理,构造器修饰符>=package(没有字节码指令时,从持久化类获取数据更有效)
f)bidirectional safety method
public void addToEvent(Event event) {
this.getEvents().add(event);
//event.getParticipants().add(this);
}
3.映射文件(知道怎么加载(load),存储(store)持久化类
a)hibernate不从web加载,先在classpath查找(hibernate.jar)
b)映射文件的属性才被持久化
c)hibernate映射类型(java类型->数据库类型)有自动检测的功能
d)反射会占用资源,时间
e)连接池(内置(功能少),c3p0,proxool)
f)hbm2ddl create 创建表 (ant的schemaExport可把数据库schema重定向到文件)
g)session-factory 到一个数据库的全局factory
h)hibernate可自动detect 数据库方言
i)自动上下文
<property name="current_session_context_class"><!--与线程绑定 不适用大环境 仅用于prototyping-->
thread
</property>
j)id native (oracle HIBERNATE_SEQUENCE 序列取值)
4.启动和辅助类
a)sessionFactory创建session(代表一个线程操作), factory线程安全,全局变量,只能实例化一次
private static final SessionFactory sessionFactory;
static {//静态块,类加载创建一次
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {//获得唯一sessionFactory
return sessionFactory;
}
/////////////////////3.5方式-使用初始化private方法(类加载被jvm执行一次)
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
return new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
b)在配置文件中给SessionFactory名称,hibernate创建后会给它绑定到jndi
(可用jmx容器实例化hibernateService,绑定到jndi)
c)getCurrentSession 第一次调用开始,绑定到线程,事务结束,会话与线程剥离,关闭session
5.关联
a)many2many
<set name="events" table="PERSON_EVENT" inverse="true"><!--中间表 inverse 在另一端可得到关联信息-->
<key column="PERSON_ID"/>
<many-to-many column="EVENT_ID" class="Event"/>
</set>
aPerson.getEvents().add(anEvent);//没有显示save,hibernate自动检测回写数据(自动脏检查(automatic dirty checking)
1)都是!!处于持久化状态(session) 与前一状态不同(更新,保存),hibernate监视,隐式写sql
2)同步内存,数据库(session结束时执行,清理缓存flushing)
3)session由commit结束(CurrentSessionContext的thread配置决定)
4)托管(detached) 以前被持久化过
session.getTransaction().commit();
b)one2many (值类型集合--依赖类不重要 没有实体entity)
<set name="emailAddresses" table="PERSON_EMAIL_ADDR">
<key column="PERSON_ID"/>
<element type="string" column="EMAIL_ADDR"/> <!--many element-->
</set>
c)关联方向(directionality),集合(collection),阶数(multiplicity)
d)many2many inverse="true" 可任意
many2one many一端 inverse="true" 忽略这一端关联,把这看成另一端的镜像
6.public package protected private
7.http get请求
8.session.save(e); 后获得主键
a)session.createQuery("from Event").list(); //返回全部
b) aPerson.getEmailAddresses().add(emailAddress);//直接用get方法赋值(HashSet())
9.hql
// If we want to handle it bidirectional and detached, we also need to load this
// collection with an eager outer-join fetch, this time with Criteria and not HQL:
Event anEvent = (Event) session
.createCriteria(Event.class).setFetchMode("participants", FetchMode.JOIN)
.add( Expression.eq("id", (long)1) )
.uniqueResult(); // Eager fetch the colleciton so we can use it detached
=======================================
Person aPerson = (Person) session
.createQuery("select p from Person p left join fetch p.events where p.id = :pid")
.setParameter("pid", (long)30)
.uniqueResult(); // Eager fetch the collection so we can use it detached
10.每个请求为一个session session-per-request getCurrentSession()自动绑定当前线程
11.auto-commit 自动提交
分享到:
相关推荐
这套笔记是我学习Hibernate,进行相关技术点训练时记录下来的,其中包括技术点说明与相关事例,拿出来与大家分享。
这个标题表明这是一个关于Hibernate框架的综合学习资料,特别适合初学者或者需要深入理解Hibernate的开发者。它可能包含了一系列PPT,旨在全面概述Hibernate的核心概念、工作原理以及实际应用。 【描述】:“添加...
【hibernate增删改查事例的web工程】是一个基于Hibernate框架的Web应用程序,旨在帮助开发者通过实际操作来理解和掌握Hibernate在数据库操作中的基本功能,包括插入(Insert)、删除(Delete)、更新(Update)和...
总之,这个"Struts+Hibernate增删改查事例"是一个基础但全面的教程,适合初学者了解如何结合这两个框架来构建一个完整的Web应用,实现对数据库的基本操作。通过学习这个实例,你可以掌握如何组织Struts的Action,...
通过分析这个工程源码,我们可以学习到如何在MyEclipse6中配置和使用Hibernate,以及如何在业务代码中正确地管理事务。这对于提升我们的Java Web开发技能,尤其是数据持久化和事务处理能力,具有极高的参考价值。...
在“Struts2+Spring+Hibernate3.2+整合文档及事例程序.zip”这个压缩包中,包含了这些框架的集成教程和示例代码,旨在帮助开发者理解并熟练掌握SSH框架的联合使用。 首先,我们来看“properties文件即i18n国际化...
Hibernate作为一款优秀的对象关系映射(ORM)工具,简化了数据库操作,将复杂的SQL语句和Java对象之间的映射工作自动化,让开发者能更专注于业务逻辑,而不是数据库层面的细节。 整合SSH涉及到以下关键步骤: 1. *...
标题中提到的"struts2一个真正的项目事例",意味着这是一个实际应用了Struts2框架的项目,适合那些对Struts2不熟悉或正在学习的人去研究和学习。通过这个项目实例,开发者可以深入理解Struts2的核心概念和工作原理,...
在这个“SpringMVC搭建的一个测试事例”中,我们可能看到的是一个使用SpringMVC和Hibernate来处理数据库操作的简单应用。 首先,我们需要了解SpringMVC的基本组件。Controller是处理HTTP请求的核心,通常使用@...
这个"java ssh最小事例demo myeclipse项目"是一个基础教程,旨在帮助开发者快速理解如何在MyEclipse集成开发环境中搭建并运行SSH项目的流程。 1. **Spring框架**:Spring是Java领域的一个全功能的轻量级应用框架,...
目的:给学习SSH(Struts2.1.6+Spring2.0+Hibernate3.1)整合的学生。从使用角度看,Struts2的SSH事例比Struts1.x的SSH简单。至于声明式事务部分,你可以参见另外一个资源“Spring 2.0 + Struts 1.2 + Hibernate 3.2 +...
综上所述,"Hibernat+myeclipse6+事例+工程源码.rar"提供的资料涵盖了从理论到实践的全过程,对于希望深入学习和使用Hibernate与MyEclipse6整合开发的Java开发者来说,是一份非常宝贵的资源。通过学习和实践其中的...
SSH2(Struts2 + Spring + Hibernate)是一个经典的Java Web开发框架组合,它结合了Struts2的MVC设计模式、Spring的依赖注入和事务管理以及Hibernate的对象关系映射功能,为开发者提供了一套高效、灵活的开发工具。...
这个SSH框架的事例为你提供了一个基本的参考,你可以从中学习到如何整合这三个框架来构建一个完整的Web应用,并实现文件的上传和下载功能。不过,实际项目中可能还需要结合其他技术和最佳实践,以满足更复杂的需求和...
这个完整事例对于初学者来说,是一个很好的学习资源,能够帮助他们理解如何在实际项目中整合S2SH框架和Oracle数据库,实现数据的持久化操作。通过阅读源代码和运行示例,开发者可以更深入地了解这些技术的工作原理和...
通过学习这个最小化事例,开发者可以理解Blazeds、Flex3和Spring是如何协同工作的,以及如何在实际项目中实施这些技术。这对于想要掌握RIA开发或者提升现有项目的技术栈的人来说,是一个宝贵的资源。
Hibernate则是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java对象与数据库表之间的映射关系自动管理。在Hibernate3.6版本中,性能和功能都有所提升,包括更优化的缓存策略、支持JPA 2.0规范等,使得...
6. **学习建议**:对于Java初学者,理解SSH框架的每一个组成部分及其相互作用至关重要。可以从创建简单的CRUD操作开始,逐步深入到复杂的业务逻辑处理。同时,熟悉XML配置文件的编写和理解AOP的概念也是必不可少的。...
这个"SSH简单三大框架项目事例"是一个综合性的实战项目,旨在帮助开发者理解并掌握SSH框架的集成与应用。 1. **Struts**:作为表现层框架,Struts主要处理HTTP请求和响应,通过Action类来执行业务逻辑,并通过配置...
这个“三层架构事例”是一个演示如何按照三层架构原则构建一个小网站的实际项目。在这个案例中,我们可以通过MultLayerDemo来了解具体实现。 首先,我们要理解三层架构的基本概念。三层架构通常包括表现层...