Hibernate学习笔记(2)

 

Configuration对象

Configuration相当于hibernate中的商务局,如果你想做什么商业活动的话,必须要到他那注册,接受他的管理.

1. 创建Configuration对象

创建Configuration对象根据Hibernate所使用的配置文件的不同,创建Configuration对象的方式也不相同。

1. 使用Hibernate.properties文件作为配置文件

Configuration cfg = new Configuration()

.addResource("Person.hbm.xml")

.addResource("Name.hbm.xml")

................  

.................

.................

.addResource("Time.hbm.xml"<想要操作的类的配置文件,可以1个也可以多个>);

当然还有另一种方法

Configuration cfg = new Configuration()

.addResource("pojo.Person.class")

.addResource("pojo.Name.class")

................  

.................

.................

.addResource("pojo.Time.class"<想要操作的类,可以1个也可以多个>);

如果使用上面的方法,那么累的配置文件必须和该类在同一个包内

注意:不常使用

2. 使用hibernate.cfg.xml文件作为配置文件

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

注意:几乎所有的项目都使用它

3. 不需要任何配置文件创建Configuration

Configuration cfg = new Configuration()

.addClass("pojo.Person.class")//添加持久化类

.addClass("pojo.Name.class") 

//通过setProperty设置Hibernate的连接属性

.setProperty("hibernate.dialect","org.hiberanet.dialect.MySQLInnoDBDialect")

.setProperty("hibernate.connection.datasource","java:comp/en/database/test")

.setProperty("hibernate.order_updates","true");

注意:该种方法不建议使用,这里就不详细解释了。大家了解知道有这么一回事就       行了。

Hibernate.cfg.xml文件了解

文件中的内容是其他持久化类公有的内容

比如连接数据库

1. JDBC连接属性介绍

所有的hibernate属性名字和语义都在org.hibernate.cfg.Environment中定义,感兴趣可以自己看看

JDBC连接的重要配置如下:

hibernate.connection.driver_class:设置连接数据库的驱动程序

hibernate.connection.url:设置连接所需数据库服务的url

hibernate.connection.username:设置连接数据库的用户名

hibernate.connection.password:设置连接数据库的密码

hibernate.connection.pool_size:设置数据库的连接池数量

hibernate.dialect:设置数据库的方言

在hiberante.cfg.xml文件中的写法

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

<!--  上面的是限制本文件的DTD                    -->

< hibernate-configuration > <!-- 根元素  -->

     < session-factory > <!-- 数据连接 -->

         < property  name = "connection.username" >

Scott <!-- 设置数据库用户名 -->

</ property >

         < property  name = "connection.url" >

jdbc:oracle:thin:@127.0.0.1:1521:liang

<!-- 设置数据库服务url -->

</ property >

         < property  name = "dialect" >

org.hibernate.dialect.Oracle9Dialect

<!-- oracle数据库方言 -->

</ property >

         < property  name = "myeclipse.connection.profile" >

Orale <!--  myeclipse 工具连接使用  -->

</ property >

         < property  name = "connection.password" >

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

</ property >

         < property  name = "connection.driver_class" >

oracle.jdbc.driver.OracleDriver

<!--  oracle驱动程序 -->

</ property >

< property  name = "connection.pool_size" >

30 <!-- 数据库连接池,的连接个数 -->

</ property >

    

     </ session-factory >

</ hibernate-configuration >

注意:在现实的项目中我们极少使用

< property  name = "connection.pool_size" >

30 <!-- 数据库连接池,的连接个数 -->

</ property >

他来配置数据库的连接池,通常使用的是C3P0或Proxool连接池。我们常用的是   C3P0.

下面是用来替换 < property  name = "connection.pool_size" >

30 <!-- 数据库连接池,的连接个数 -->

</ property >

该属性的

< property  name = "hibernate.c3p0.max_size" >

30 <!-- 数据连接池的最大连接数 -->

</ property >

       < property  name = "hibernate.c3p0.min_size" >

1 <!-- 数据库的最小连接数 -->

</ property >

       < property  name = "hibernate.c3p0.timeout" >

1000 <!-- 数据库连接池的连接超时时长 -->

</ property >

< property  name = "hibernate.c3p0.max_statements" >

100 <!-- 缓存statements的数量 -->

</ property >

其他常用配置

Hibernate.show_sql:

true显示输出hibernate生成的SQL语句

False不显示输出hibernate生成的SQl

Hibernate.jdbc.fetch_size:

制定觉得不错抓取的数量的大小,他可以接受一个整数值,其实质是调用   Statement.setFetchSize()方法

Hibernate.jdbc.batch_size

制定hibernate使用jdbc2批量更新的大小,他可接受一个整数值,建议   5---30之间的值

Hibernate.hbm2ddl.auto

设置创建SessionFactory是,是否根据映射文件自动建立数据库表。如果   使用create_drop值显式关闭SessionFactory时,将关闭Drop刚建的   数据表,该属性可以为update、create和create-drop3个值

简单的持久化对象

Hibernate是一个彻底的ORM框架,即一个pojo类-----对应一个Xml的配置文件-------数据库。持久化对象就是把这个pojo实例存入数据库

持久化类的要求

1. 持久化类的所有属性必须提供setter和getter方法

2. 需要提供一个无参数的构造器。(hibernate框架可以使用               Constructor.newInstance()方法来创建持久化类)

3. 要有一个标识属性。如id什么的。对应的是数据库中的关键字

4. 重写equals()方法和hashCode()方法。(如果需要把持久化类的实力放入     Set中<当表示多值关联关系映射时,推荐这么做>),则应该为该持久化类重     写equals()方法和hashCode()方法。(详细内容看core Java方面的     图书)。

5. 使用非final的类(在运行时方便hibernate生成代理)

持久化对象的状态

1. 瞬态(入境)

2. 持久化(得到永久居留权)

3. 脱管(驱逐出境)

简单解释一下

瞬态(和session没有任何关系)

描述:对象是有new操作符创建,切尚未与hibernate中的session  关联的对象被认为是处于瞬态的状态。

特征:瞬态对象不会持久化到数据库中,也不会被赋予持久化标识(上面  说道的id),如果程序中失去了瞬态对象的引用,瞬态对象将被垃圾

回收

解释:好比我们出国旅游,手中的护照和签证时对我们身份的唯一标识,  也就是上面说的引用。我们在该国没有永久居住权,签证过期我们就  会被立刻驱逐出境。现在的这种状态就叫做瞬态

持久化(和session有关系)

描述:持久化实例在数据库中有对应的记录,并拥有一个持久化的标识。  持久化的实力可以是刚刚保存的,也可以是刚刚被加载的。无论哪一  种,持久化对象都必须与制定的hibernate session关联。

特征:在数据库中存在该条记录,该对象的标识有一个唯一的值

解释:就是你已经有了该国的永久居留权,在他们国家有了一个唯一标识  身份的身份证号

脱管

描述:某个实例曾经处于持久化状态,但随着与之相关联的session被  关闭,该对象就变成脱管状态。

特征:没有与该实例相关的session

该对象依然可以使用

解释:该国家认为你已经犯罪了。Session把你驱逐出境了。但是你的  资料还是有备份存在该国的(数据库中),如果你改过自新,在找一  个session你还是一个持久化的状态

改变持久化状态

1. 瞬态-------持久化状态(注意:是new出来的)

可以使用save()和saveOrUpdate()两种方法

解释:

Save()数据库中没有你的时候,使用

saveOrUpdate()数据库中没有你他操作的动作和save()相同,当你  已经存在的时候他会更新你的信息。

持久化状态----瞬态

可以使用delete()方法

2. 持久化状态

数据库-----持久化状态

可使用get()、loaded()、find()和iterator()四种方法

这四种方法都是从数据库中读取出该对象

注意:

注意在使用get和load方法他们之间的不同

Load()方法:具有延迟加载的特性。在使用load方法加载数据库中的 记录时如果该记录不存在会返回一个objectnotfondexception的异 常,get方法没有延迟加载的特性。使用get加载时数据库中如果没有 改纪录就会返回一个null(不会抛出异常)

脱管---持久化状态

可以使用save()、saveOrUpdate()和lock()方法

3. 脱管状态

持久化状态---脱管

使用eviction()、close()和clear()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值