Hibernate 学习总结之第一步
经过一个星期做左右的学习
,对hibernate 有了“些”了解
,于是就写下了这篇文章记录所学所感
Hibernate的优势:
1.一个开发源代码的对象关系映射框架
2.对JDBC进行了非常轻量级的对象封装, 简化了JDBC 繁琐的编码
3.将JavaBean对象和数据库的表建立对应
建立了初步的概念后,我们就要动手了,前期我们不要深究为什么。只有在实现的过程中才会有问题,通过解决这些问题,我们才会不断的深入
一.首先我们要做的是搭建项目框架编写hibernate配置文件、实体映射文件
二.创建Hibernate主配置文件(默认文件名为“hibernate.cfg.xml”)和实体映射文件
举例如下:
主配置文件:
<?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>
<!-- 数据库连接URL -->
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
<!-- 数据库用户名 -->
<property name="connection.username">username</property>
<!-- 数据库密码 -->
<property name="connection.password">passwd</property>
<!-- 数据库JDBC驱动类名 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 数据库方言 -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- ddl语句自动建表 -->
<property name="hbm2ddl.auto">none</property>
<!-- 是否输出Hibernate生成的SQL语句,开发阶段一般需要开启 -->
<property name="show_sql">true</property>
<!-- 是否对输出SQL进行格式化 -->
<property name="format_sql">true</property>
<!-- 连接池配置 -->
<property name="hibernate.connection.provider_class">
org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
</property>
<!-- 这是C3P0随时准备好的最少的JDBC连接数量 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 连接池中JDBC连接的最大数量 -->
<property name="hibernate.c3p0.max_size">20</property>
<!-- 超时周期,在它之后,闲置连接将从池中移除 -->
<property name="hibernate.c3p0.timeout">300</property>
<!-- 最多高速缓存100个预编译语句,该属性是使Hibernate获得较好性能的要素。 -->
<property name="hibernate.c3p0.max_statements">100</property>
<!-- 连接被自动验证前,以秒为单位的闲置时间 -->
<property name="hibernate.c3p0.idle_test_period">3000</property>
<!-- 注册ORM实体类映射文件-->
<mapping resource="实体类映射文件路径" />
…
</session-factory>
</hibernate-configuration>
实体映射文件格式
<?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>
[...]
</hibernate-mapping>
在实体类映射文件中,被映射的类必须定义对应数据库表的主键字段的属性。映射文件的<id>元素定义了该属性到数据库表主键字段的映射
<id name="propertyName" type="typename"> 1
<column="column_name" > </column> 2
<generator class="generatorClass"/> 3
</id>
最后将映射文件的路径信息添加到hibernate.cfg.xml中。
<mapping resource=“***/***/***.hbm.xml" />
Hibernate核心接口
1.Configuration接口
Configuration对象用来配置和引导Hibernate,一个Hibernate应用使用一个Configuration实例来指定主配置文件的位置,然后创建会话工厂。
Configuration cfg = new Configuration().configure("/cfg/auction.cfg.xml")
2.SessionFactory接口
一个Hibernate应用从SessionFactory(会话工厂)里获得会话实例。
一般情况下,整个应用只有唯一的一个SessionFactory,它应该在应用初始化时被创建。
3.Session接口
Session(会话)接口是Hibernate应用使用的主要接口,它拥有操作持久化对象的一系列API,可用于管理(例如加载和保存)对象,因此我们也称之为“持久化管理器”。
Session实例是轻量级的,创建与销毁的代价不昂贵,通常我们会为每个事务创建一个Session实例,并在使用后关闭它。
4.Transaction接口
Transaction(事务)接口是对实际事务实现的一个抽象,这些实现包括JDBC事务或者JTA事务等。
在Transaction接口中主要定义了commit()和rollback()两个方法,前者是提交事务的方法,后者是回滚事务的方法
5.Query与Criteria接口
Query(查询)接口允许在数据库上执行查询,并控制查询如何具体执行。查询使用HQL或SQL。Query实例可用来绑定查询参数,限定查询返回的结果数,并且最终执行查询
到这里我们就可以完成初步的对数据库的增删改查。。。。。。。。。。。。。。。。。。。只是初步哦
贴出我的部分代码
public void save() {
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Type type = new Type("漫画", "你懂得");// 新对象
session.save(type);// save-->自动化生成sql语句:insert
tx.commit();
Session.close
}
Hibernate中实体对象的三种状态(非常重要)
1.瞬时状态(Transient)
刚用new语句创建,还没有被持久化,且不处于Session的缓存中
2.持久状态(Persistent)
已经被持久化,且加入到Session的缓存中
3.游离状态(Detached)
已经被持久化,但不再处于Session的缓存中
未完待续。。。。。。。。。。。。。。。。