hibernate学习心得

来源:互联网 发布:云数据库怎么用 编辑:程序博客网 时间:2024/06/11 00:51

写在前面

       首先你要有eclipse的软件,并且加载有相关hibernate的包,这是前提否则没法学习验证。

有了以上的条件就可以来学习hibernate了。

第一

 我们要了解hibernate和JDBC比较有什么不同?我们已经学习了JDBC,它是访问数据库最原始最直接的办法,那么我们为什么还要学Hibernate,以我之见Hibernate直接面向对象,不用再去写SQL,而JDBC无法直接面向对象,重复性工作多,

Hibernate一次编写适用各种不同的数据库。

首先我们要学会建立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:orcl</property>

<!-- 数据库用户名  -->

<property name="connection.username">hr</property>

<!-- 数据库密码 -->

<property name="connection.password">hr123</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="entity/Type.hbm.xml" ></mapping>

<mapping resource="entity/Book.hbm.xml" ></mapping>

<mapping resource="entity/Student.hbm.xml" ></mapping>

<mapping resource="entity/Record.hbm.xml" ></mapping>

</session-factory>

</hibernate-configuration>



主配置文件基本为四部分:

1 数据库连接信息:驱动程序类名、URL、用户名、密码。

2 Hibernate相关特性:dialect(方言)、show_SQL(输出SQL语句到控制台)、format_SQL(格式化SQL语句)。

3 连接池相关信息。

4 实体类映射文件:实体类与数据库表之间的逻辑映射。

配置文件应放在src下面,然后用下面的代码测试一下。



public class HibernateTest {

public static void main(String[] args) {

//获取配置,默认读取classpath根目录下名为hibernate.cfg.xml的文件

Configuration cfg = new Configuration().configure();

ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();

//创建SessionFactory

SessionFactory factory = cfg.buildSessionFactory(serviceRegistry); 

//获取session

System.out.println(factory.openSession());

}

}



成功后我们就完成了第一步了

第二

首先我们要明白类和表之间的对应关系,类→表;属性→主键;属性→普通字段。Hibernate所直接操作的都是类、属性。我们来配置一下文件以Type为例,附上Type的表

下面是配置文件



<?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"></property>

<property name="desc" column="descp"></property>

<set name="books" >                                                

<key column="type_id"></key>                           

<one-to-many class="entity.Book"/>              

</set>

</class>

</hibernate-mapping>



其中要注意一对多,多对一,联合主键的配置问题

配置完就可以对数据库操作了,分为7个步骤:

1、配置Configuration

2、创建Session工厂

3、打开session

4、开始事务

5、持久化操作(save,update等)

6、提交事务

7、关闭session

不过在写方法的时候一般不要提交事务和关闭session,在事务层实现,操作就行了挂起就行了

第三

Hibernate的核心接口

1、Configuration

Configuration cfg = new Configuration().configure();

用来配置引导文件

2、SessionFactory

3、Session

持久化操作管理器,对对象进行操作,拥有一系列API

4、Transaction

主要定义了commit()和rollback()两个方法,前者是提交事务的方法,后者是回滚事务的方法。

5、Query

a) 查询使用HQLSQL

b) Query实例可用来绑定查询参数,限定查询返回的结果数,并且最终执行查询

第四

Hibernate中对象的三种状态

瞬时状态(Transient)

刚用new语句创建,还没有被持久化,且不处于Session的缓存中

持久状态(Persistent)

已经被持久化,且加入到Session的缓存中

游离状态(Detached)

已经被持久化,但不再处于Session的缓存中

三种状态的关系






原创粉丝点击