您的位置:首页 > 运维架构 > 网站架构

hibernate基本架构(1)

2014-03-03 18:47 453 查看

1、课程名称: Hibernate基本架构

2、知识点

2.1、上次课程的主要知识点

1、数据库:Oracle数据库的使用(SQL语句,关联查询),数据库设计工具(Power Designer)
2、Java基础:IO操作,线程和反射,类集,JDBC
3、JavaWeb:MVC,DAO

2.2、本次预计讲解的知识点

Hibernate
Spring
Struts2
AJAX,JQuery

3、具体内容

3.1、框架概述(了解)

框架的优点:开发速度快,规范

后台框架:Hibernate,MyBATIS(iBATIS),EJB
前台框架(MVC):Struts(1/2),SpringMVC,JSF
Spring框架:Spring,Seam
JS框架:JQuery,ExtJS

3.2、Hibernate框架与ORMapping概念(了解)

ORMapping:对象关系映射,通过在类与表之间建立关系,使程序操作类能自动影响到表中的数据。
ORMapping的发展过程:
优点
缺点
JDBC
好学,执行速度快
重复代码比较多,开发速度慢
EJB1,2
提出了ORMapping
除了有概念,什么都不行。
JDO
简单
连接控制有问题
Apache OJB

太多
Hibernate
很多
执行速度慢
MyBATIS
比Hibernate执行速度快
比JDBC代码简单
比Hibernate代码多
比JDBC执行速度慢
EJB3
使用了Hibernate的源代码
架构还是EJB的原始架构
Hibernate建立ORMapping关系的方式是使用 XML或Annotation(在Hibernate3.2以上版本才可以使用)

JDBC完成数据库操作的支持类:Hibernate
ConnectionàSession
PreparedStatementàQuery
ResultSetàList
DataBaseConnectionàHibernateSessionFactory

3.3、Hibernate完成单表数据库操作(重点)

在数据库中建立一张数据表,这里建立一个张新闻表(news)
CREATETABLE news (
idnumber(8) primarykey ,
title varchar2(50) notnull,
content varchar2(500) notnull,
pub_date datenotnull
);
在MyEclipse中需要建立项目,并加入Hibernate框架支持。
但在这些之前,建议先在MyEclipse里建立与数据库的连接。










选择建立一个新的数据库连接



点Test Driver,测试是否连接成功。







如果可以在连接中找到之前建立好的表,表示配置成功,可以开始建立项目。













加入Hibernate核心配置文件








如果要手工加入框架支持,需要加入以下两部分内容:
1) 支持jar包加入到WEB-INF/lib目录下2) Hibernate.cfg.xml加入到src目录下。

Hibernate核心配置文件的功能:
1) 配置数据库连接参数2) 加入Hibernate的属性配置,例如:a)


b)




生成的HibernateSessionFactory中,实现了连接池功能,要求掌握连接池的实现原理。

public class HibernateSessionFactory {
// 配置文件的所在位置和名称
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
// 用来实现连接池的,该类类似Map集合。
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
// Hibernate用来读取配置文件的类
private static Configuration configuration = new Configuration();
// 用来建立连接的,该类就是连接池,使用单例设计模式
private static org.hibernate.SessionFactory sessionFactory;
// 备用的配置文件位置
private static String configFile = CONFIG_FILE_LOCATION;
// 静态块,类加载时最先执行
static {
try {
// 加载配置文件到内存中
configuration.configure(configFile);
// 建立连接池以及里面的连接
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}
/**
* 取得数据库连接对象
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
// 先从ThreadLocal中取得连接。
Session session = (Session) threadLocal.get();
// 如果手头没有连接,则取得一个新的连接
if (session == null || !session.isOpen()) {
session = sessionFactory.openSession();
// 把取得出的连接记录到ThreadLocal中,以便下次使用。
threadLocal.set(session);
}
return session;
}
/**
* 连接关闭的方法
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
// 将ThreadLocal清空,表示当前线程已经没有连接。
threadLocal.set(null);
// 连接放回到连接池
if (session != null) {
session.close();
}
}
public static Configuration getConfiguration() {
return configuration;
}
}



原理可以参考下图来看:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: