`

Hibernate学习一

阅读更多
认识:
Hibernate是将对象模型表示的数据映射到用SQL表示的关系模型上去.还提供了一般的数据库操作,所以大幅度减少了编程任务

对象持久化:把数据同步保存到数据库或者某些存储设备中

ORM: object-relation mapping   对象关系映射

结果:操作具体的数据库时,不用再与复杂的SQL语句打交道,只用操纵对象即可,ORM工具会自动将对象操作转换为SQL语句,这样就可用更多时间关注业务逻辑,不用关心底层复杂的SQL和JDBC代码

配置:
HIBERNATE被设计为可以在不同的环境下工作,所以有很多的参数要配置,不过很多参数已经有默认值,所以配置较少的参数就可以运行了
Configuration类
它是HIB的入口,它管理HIB的配置信息,它的一个对象代表应用程序中JAVA类到数据库的映射集合..  它会创建一个sessionfactory实例来开始工作
SessionFactory  sessionFactory = new Configuration().configure().buildSessionFactory();
注: new Configuration()时,HIB会在类路径中查找文件hibernate.properties和hibernate.cfg.xml.如果这两个文件同时存在,则hibernate.cfg.xml将会覆盖hibernate.properties文件;如果两个文件都不存在,则会抛出异常
注:hibernate.cfg.xml文件的名称及路径可以自己设置它的名称及所在位置,不过这时创建
Configuration类对象时要用下面带参数方法
String filename=”my_hibernate_cfg.xml”;
Configuration config=new Configuration().configure(filename);


下面以最常用的hibernate.cfg.xml格式进行配置[数据库以mysql为例]<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

<session-factory>

                   ###连接数据库
<property name="connection.url">
jdbc:mysql://localhost:3306/store
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>


                   ###下面这个属性是配置HIB所使用的语言[用于操作DB的]
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
               
                 
<mapping resource="store/Product.hbm.xml" />
<mapping resource="store/Order.hbm.xml" />
<mapping resource="store/Customer.hbm.xml" />
         ##上面三行是各个表的映射文件
                
           </session-factory>
</hibernate-configuration>


Sessionfactory类
它负责SESSION实例的创建,通过configuration类来得到,并且把已经写好的映入文件交由它处理.  当SESSIONfactory创建成功后,configuration对象就没有用了,可以简单抛弃它
Configuration config = new Configuration().configure();
SessioFactory sessionfactory = config.buildSessionFactory();

注:sessionfactory是线程安全的,可以被多个线程调用来取得SESSION对象而不会引起数据共享的问题,而构造sessionfactory很破费资源,所以多数情况下一个应用只创建一个sessionfactory 即可.


session管理
session是HIB动作的核心, 对象的声明周期,事务管理,数据库的存取都与它密切相关

注意:
sessionfactory可以让多个线程一起调用,是线程安全的
可是session不是线程安全的,所以多个线程共享一个session会引起冲突和混乱

下面介绍使用 ThreadLocal变量,解决session的管理问题.用它有效地隔离线程执行所使用的数据可以避免多个线程之间的数据共享问题.
下面提供一个工具类专门来管理session


package store;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private  static Configuration configuration = new Configuration();
    private static org.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;

    private HibernateSessionFactory() {
    }

/**
         得到一个SESSION对象
       */
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();

     if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ?    sessionFactory.openSession(): null;
threadLocal.set(session);
}
        return session;
    }

/**
     *  重新创建SESSION 工厂
     *
     */
public static void rebuildSessionFactory() {
   try {
      configuration.configure(configFile);
      sessionFactory = configuration.buildSessionFactory();
     } catch (Exception e) {
     System.err.println("%%%% Error Creating SessionFactory %%%%");
      e.printStackTrace();
     }
   }

/**
        关闭SESSION
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);

        if (session != null) {
            session.close();
        }
    }

/**
     返回一个 session factory
     *
     */  *  return session factory
     *
     * session factory will be rebuilded in the next call
    public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}

/**
  
     */
public static void setConfigFile(String configFile) {
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
}

/**
     *  return hibernate configuration
     *
     */
public static Configuration getConfiguration() {
return configuration;
}

}















分享到:
评论

相关推荐

    hibernate学习资料大全

    这个压缩包包含了丰富的Hibernate学习资源,旨在帮助开发者深入理解和熟练掌握这一强大的工具。 1. **对象关系映射(ORM)基础**: Hibernate 提供了一种将Java对象模型与关系数据库之间的映射机制,使得开发者...

    HIBERNATE:Hibernate 学习一--注解方式自动建表

    这篇博客"Hibernate学习一--注解方式自动建表"主要探讨了如何使用Hibernate的注解来实现数据库表的自动化创建。 在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被...

    hibernate学习一:简单应用1配置文件版

    本篇文章将探讨“Hibernate学习一:简单应用1配置文件版”,主要涵盖如何配置Hibernate,创建实体类,以及进行基本的CRUD操作。 首先,我们来了解Hibernate的核心配置文件——`hibernate.cfg.xml`。这个文件包含了...

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    hibernate学习

    &lt;br&gt;搜集清单和说明 1:hibernate学习源码,这是我以前做练习的代码,希望对感兴趣的朋友 有些帮助。 2:hibernate_reference.pdf,我以前学习参看的资料。 3:hibernate源码.zip,hibernate的源...

    Hibernate学习.pdf

    ### Hibernate学习知识点详解 #### 1. Hibernate简介与安装配置 **标题:** Hibernate学习 **描述:** Hibernate 学习 Hibernate学习.pdf **标签:** Hibernate 学习 Hibernate学习.pdf **知识点详解:** ####...

    hibernate学习1

    hibernate学习1,总共9部分。 欢迎下载

    Hibernate学习文档集合

    《Hibernate学习文档集合》 Hibernate,作为Java领域中的一款强大且广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。本集合包含了三个关键的学习文档,分别关注于Hibernate的操作基础、对象关系映射和...

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    Hibernate 中文api 等学习资料

    标题"Hibernate 中文api 等学习资料"暗示了这是一组针对Hibernate ORM框架的中文学习资源,包括API文档和其他指南,旨在帮助用户更好地理解和使用Hibernate。 描述中的"hibernate orm框架api中文文档,学习资料,...

    hibernate学习总结文档

    **Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它为 Java 开发者提供了一种在 Java 应用程序中管理关系...通过实践和深入学习,你可以更好地利用 Hibernate 实现高效、可靠的数据库应用。

    Hibernate学习笔记和资料

    hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式

    hibernate学习资料大合集

    **hibernate学习资料大合集** 本资料合集涵盖了关于Hibernate的各种学习资源,包括PDF、CHM和Word文档,旨在帮助开发者深入理解和掌握Hibernate这一强大的Java持久化框架。Hibernate作为一个对象关系映射(ORM)...

    非常好的Hibernate学习资料

    《Hibernate学习精华》 Hibernate,一个开放源代码的对象关系映射框架,是Java开发者在数据库操作中不可或缺的工具。它简化了Java应用与数据库之间的交互,使得开发人员能够以面向对象的方式来处理数据库操作,极大...

    hibernate学习文档

    《Hibernate学习文档》 Hibernate是一种广泛应用于Java开发中的对象关系映射(ORM)框架,它的核心价值在于简化了数据库操作,通过将Java对象模型与SQL关系模型进行映射,使得开发者可以使用面向对象的方式来处理...

    北大青鸟Hibernate学习资料

    【北大青鸟Hibernate学习资料】 Hibernate是一个开源的Java ORM(对象关系映射)框架,它为开发者提供了在Java应用中管理关系数据库数据的便捷方式。本学习资料集合了多个关于Hibernate的重要主题,包括对象关系...

    hibernate学习笔记,学习大纲【吐血推荐】

    **Hibernate学习笔记与大纲** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本笔记将深入...

    hibernate学习心得

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,而无需直接编写 SQL 查询。对于初学者来说,学习 Hibernate 可以简化数据库操作,提高开发效率。以下是对 Hibernate 学习...

    hibernate学习笔记

    在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....

    hibernate基础学习资料

    Java框架中关于hibernate的基础学习

Global site tag (gtag.js) - Google Analytics