怎样学好hibernate!(http://edu.csdn.net/news/2012822/240ca26f0d7e.shtml)没事下载下来看哦!
1理解Hibernate ,
什么是Hibernate? Hibernate 是一个优秀的Java 持久化层解决方案,是当今主流的对象—关系映射(ORM)工具。
那什么又是ORM呢?ORM是持久化的一种解决方案,主要是把对象模型和关系型数据库关系模型映射起来,并且使用元数据对这些映射进行描述。
那什么又是映射呢?说白了,映射就是关联,而面向对象涉及的软件内部运行工程可以理解成就是就是在不断创建各种新对象,建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管程序运行的过程和操作怎么样,本质上都是要得到一个结果,程序上一个时刻和下一个时刻运行结果的差异就表现在内存中的对象状态发生了变化(映射主要在配置hbm.xml中会用到,其中包括,一对一,一对多,多对一,双向多对一等。如果这没有搞懂,将会在运行时出大量的错误。特比注意)
2.为了在关机和内存空间不够的情况下,保持程序的运行状态,需要将内存中的对象状态保存到持久化设备和从持久化设备中恢复初对象的状态,通常都是保存到关系数据库保存来保存大量对象信息。通过数据库保存java程序运行时产生的对象和恢复对象,其实就是实现了java对象与关系数据库记录的映射关系,
3.使用Hibernate的基本流程是:
A:配置Configuration对象,
- // 1、获取配置
- Configuration cfg = new Configuration().configure();
- ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
- .applySettings(cfg.getProperties()).buildServiceRegistry();
B:创建SessionFactory,
- // 2、创建SessionFactory
- SessionFactory factory = cfg.buildSessionFactory(serviceRegistry);
C:创建session对象,
- 3、获取session
- Session session = factory.openSession();
- Transaction tx = session.getTransaction();
D:启动事务,
- 4、开启事务
- tx.begin();
- Seeker seeker = new Seeker();
- seeker.setEmail("abc@163.com");
- seeker.setPassword("abc");
E:完成CRUD(增删改查)操作,
- 5、保存seeker对象
- session.save(seeker);
F:提交事务,
- 6、提交事务
- session.getTransaction().commit();
- } catch (Exception e) {
- tx.rollback();
- e.printStackTrace();
- } finally {
G:关闭session。
- 7、关闭session
- session.close();
4.使用Hibernate时,先要配置hibernate.cfg.xml文件,如(A)其中配置数据库连接信息和方言等,还要为每个实体配置相应的hbm.xml文件。如(B)
(A)
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 1.数据库连接信息 --> <!-- 数据库JDBC驱动类名 --> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <!-- 数据库连接URL --> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property> <!-- 数据库用户名 --> <property name="connection.username">dev</property>//(此处需改为自己数据库用户名) <!-- 数据库密码 --> <property name="connection.password">dev123</property> //( 改为自己的密码) <!-- 2.hibernate相关配置 --> <!-- 数据库方言 --> <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <!-- 是否输出Hibernate生成的SQL语句,开发阶段一般需要开启 --> <property name="show_sql">true</property> <!-- 是否对输出SQL进行格式化 --> <property name="format_sql">true</property> <property name="hbm2ddl.auto">validate</property> <!-- 3.连接池配置 --> <!-- 注册ORM实体类映射文件的路径--> <mapping resource="entity/Type.hbm.xml" /> </session-factory> </hibernate-configuration> (B) <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- 类和表 --> <class name="entity.Type" table="book_type"> <!-- 属性和主键 --> <id name="id" column="type_id"> <!-- 主键生成策略 --> <generator class="sequence"> <param name="sequence">lib_seq</param><!--sequence对象的名字 --> </generator> </id> <!-- 属性和字段 --> <property name="name" column="name" length="20"></property> <property name="desc" column="descp" length="500"></property> <set name="books"> <key column="type_id"></key>//此处映射关系要搞懂。 <one-to-many class="entity.Book" /> </set> </class> </hibernate-mapping>
5.在应用hibernate时,重点要了解Session的缓存原理,级联延迟加载和hql查询。 那什么是Session呢?答案是Session(会话)接口是Hibernate应用使用的主要接口,它拥有操作持久化对象的一系列API,可用于管理(例如加载和保存)对象,因此我们也称之为“持久化管理器”。Session实例是轻量级的,创建与销毁的代价不昂贵,通常我们会为每个事务创建一个Session实例,并在使用后关闭它。(另外还有以下接口:Transaction接口,Query与Criteria接口,如有兴趣,可自己学习) Hibernate中Session的缓存原理: 一级缓存:session级的缓存也叫事务级的缓存,只缓存实体,生命周期和session一致。不能对其进行管理。 在Session的save()、update()、saveOrUpdate()、get()或load(),如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。 二级缓存:sessionFactory缓存,也叫进程级的缓存,也值缓存实体,生命周期和sessionFactory一致,可以进行管理。 级联延迟加载 hibernate的延迟加载(Lazy load):延迟加载能够保证应用只有在需要的时候才去数据库抓取相应的数据记录,通过延迟加载技术能够避免过多,过早的加载数据库表中的数据,从而减少应用内存的开销。hibernate的延迟加载实质上是一个代理模式的运用,当程序通过hibernate装载一个实体时,默认情况下hibernate不会马上去抓取它的集合属性、关联实体所对应的记录。而是通过一个代理来生成这些集合属性,和关联实体,这就是代理的优势。 最后倾情奉献(http://edu.csdn.net/news/2012822/240ca26f0d7e.shtml)