码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate学习笔记(一) — hibernate的配置文件简介与执行原理

时间:2015-08-05 22:20:58      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

一、初识Hibernate

1.JDBC的缺点:

1).编写代码的时候过于繁琐,try和catch比较多2).没有做数据缓存 3).不是面向对象编程 4).sql语句固定,可移植性差

JDBC的优点:效率比较高

2.Hibernate优点

1).完全面向对象编程 2).hibernate的缓存很牛的,一级缓存,二级缓存,查询缓存3).跨平台性强

4).使用场合多应用于企业内部的系统

Hibernate缺点

1).效率低 2).表中的数据如果在千万级别,则hibernate不适合 3).如果表与表之间的关系特别复杂,则hibernate也不适合

3.ORM

学习Hibernate,首先要先了解ORM(Object/Relation Mapping),对象关系映射,主要思想是:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作

ORM 采用元数据来描述对象-关系映射细节,元数据通常采用XML格式,并且存放在专门的对象-关系映射文件中
技术分享

4.Hibernate开发步骤图

技术分享


二、Hibernate的配置文件

1.hibernate.cfg.xml与xxx.hbm.xml的书写

告诉hibernate连接数据库的信息,用的什么样的数据库(方言),根据

持久化类和映射文件生成表的策略

<hibernate-configuration>
	<session-factory name="foo">

		<property name="hibernate.dialect"><![CDATA[org.hibernate.dialect.MySQLDialect]]></property>
		<property name="hibernate.connection.driver_class"><![CDATA[com.mysql.jdbc.Driver]]></property>
		<property name="hibernate.connection.url"><![CDATA[jdbc:mysql:///hibernate1]]></property>
		<property name="hibernate.connection.username"><![CDATA[root]]></property>
		<property name="hibernate.connection.password"><![CDATA[root]]></property>
		<!-- 是否显示sql语句 -->
		<property name="show_sql">true</property>
		<!--是否格式化sql语句-->
		<property name="format_sql">true</property>
		<!--生成表的策略,通常是update-->
		<property name="hbm2ddl.auto">update</property>
		<!--添加映射文件-->
		<mapping resource="cn/xxx/User.hbm.xml"/>

	</session-factory>
</hibernate-configuration>


<hibernate-mapping package="cn.cil.domain">
	
	<class name="User" table="USERS" >
	<!--id 主键,column是数据表中对应的列名 -->
		<id name="id" type="java.lang.Integer">
			<column name="u_id"/>
			<generator class="native"/><!-- 主键的增长策略 -->
		</id>
		<!--type:该属性对应的类型,该类型可分为Hibernate类型与java类型-->
		<property name="name" type="java.lang.String">
			<column name="NAME"/>
		</property>
		<!--hibernate类型为type="string"-->
		<property name="age" type="java.lang.Integer">
			<column name="AGE"/>
		</property>
		
	</class>

</hibernate-mapping>

在hibernate内部,有一张类型对应表,这张表中有如下的映射关系:

技术分享

故书写Java类型的方式效率比较高,hibernate类型的书写方式比较简单


2.hibernate.cfg.xml的加载

public class HibernateUtils {

	private static SessionFactory factory;
	static{
		factory = new Configuration()//
		//这种方式需要注意,hibernate的配置文件名必须是hibernate.hbm.xml,
		//且必须放classpath目录下
				.configure()//
				.buildSessionFactory();
		//new Configuration().configure(xxx)可以指定配置文件的路径,配置文件可以随意放
	}
	public static SessionFactory getSessionFactory(){
		return factory;
	}
	public static Session openSession(){
		return factory.openSession();
	}

}

3、SessionFactory接口

1).hibernate中的配置文件、映射文件、持久化类的信息都在sessionFactory中

2).sessionFactory中存放的信息都是共享的信息

3).sessionFactory是线程安全的

4).一个hibernate框架sessionFactory只有一个

5).sessionFactory是一个重量级别的类,很消耗资源

4、Session接口

Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,所有持久化对象必须在session的管理下才可以进行持久化操作。此对象的生命周期很短。Session对象有一个一级缓存,显式执行flush之前,所有的持久层操作的数据都缓存在session对象处。相当于JDBC中的 Connection

1).得到了一个session,相当于打开了一次数据库的连接

2).在hibernate中,对数据的crud操作都是由session来完成的

5、生成数据表

public class SessionfatoryTest {

	@Before
	public void init(){
		SessionFactory factory =  HibernateUtils.getSessionFactory();
	}
	@Test
	public void test(){
		
	}
}
sessionFactory初始化后,对应的数据表也就生成了

6、Transaction(事务)

代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,且hibernate中的事务默认不是自动提交的

技术分享

设置了connection的setAutoCommit为false, 只有产生了连接,才能进行事务的操作。所以只有有了session以后,才能有transaction

public class SessionfatoryTest {
	SessionFactory factory;
	Session session ;
	Transaction transaction;
	@Before
	public void init(){
		factory =  HibernateUtils.getSessionFactory();
		session = factory.openSession();
		transaction = session.beginTransaction();
	}
	@Test
	public void test(){
		User user = new User();
		user.setAge(10);
		user.setName("A");
		session.save(user);
	}
	
	@After
	public void destory(){
		transaction.commit();
		session.close();
		
	}
}
7、Hibernate的执行流程
技术分享

8.内部执行原理图

技术分享








版权声明:本文为博主原创文章,未经博主允许不得转载。

Hibernate学习笔记(一) — hibernate的配置文件简介与执行原理

标签:

原文地址:http://blog.csdn.net/wjw0130/article/details/47302121

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!