hibernate基本架构(1)

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



二、知识点

2.一、上次课程的主要知识点

一、数据库:Oracle数据库的使用(SQL语句,关联查询),数据库设计工具(Power Designer)java

二、Java基础:IO操做,线程和反射,类集,JDBC数据库

三、JavaWeb:MVC,DAO设计模式


2.二、本次预计讲解的知识点

Hibernatesession

Spring架构

Struts2app

AJAX,JQuery框架


三、具体内容

3.一、框架概述(了解)

框架的优势:开发速度快,规范数据库设计


后台框架:Hibernate,MyBATIS(iBATIS),EJBide

前台框架(MVC):Struts(1/2),SpringMVC,JSF工具

Spring框架:Spring,Seam

JS框架:JQuery,ExtJS


3.二、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.三、Hibernate完成单表数据库操做(重点)

在数据库中创建一张数据表,这里创建一个张新闻表(news)

CREATETABLE news (
idnumber(8)         primarykey ,
      title        varchar2(50)      notnull,
      content      varchar2(500)     notnull,
      pub_date     datenotnull
);

在MyEclipse中须要创建项目,并加入Hibernate框架支持。

但在这些以前,建议先在MyEclipse里创建与数据库的链接。


wKiom1MUX8nxkHDyAAWXFhr2avA817.jpg

wKioL1MUX6OixfD8AAFVPmiCuHo345.jpg

wKiom1MUX8rhnPV8AAPrOy0gJqM788.jpg

选择创建一个新的数据库链接

wKioL1MUWk-BaZJFAAJe9MFYKRs525.jpg\"

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


wKioL1MUWoyyFYjhAACUxoRXXDA574.jpg\"

wKiom1MUWrPjZ0UiAAQDaqyE2zU762.jpg\"

若是能够在链接中找到以前创建好的表,表示配置成功,能够开始创建项目。




wKioL1MUYB3xzT3XAAI_2YHn_OQ867.jpg

wKioL1MUYB6R771HAAY21SmCQoQ058.jpg

wKiom1MUYEWAvUkKAALFtcAQSqs167.jpg

wKioL1MUYB-gLai9AAGLwscGpvU276.jpg

加入Hibernate核心配置文件


wKiom1MUYFzgFCgVAAJKhG_PBw0039.jpg

wKioL1MUYDbhFCagAAGtdZ92hFM763.jpg


若是要手工加入框架支持,须要加入如下两部份内容:

1) 支持jar包加入到WEB-INF/lib目录下

2) Hibernate.cfg.xml加入到src目录下。


Hibernate核心配置文件的功能:

1) 配置数据库链接参数

2) 加入Hibernate的属性配置,例如:

a)

wKiom1MUW0jyphDqAADwcgwGQ3k016.jpg\"

b)

wKioL1MUWyKRpz-xAADxc9sTzJo154.jpg\"




生成的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;
    }
}



原理能够参考下图来看:


wKiom1MUaCPCHMyGAAE5l1YCpvg852.jpg

相关文章
相关标签/搜索