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

一、初识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.内部执行原理图

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

时间: 2024-10-03 22:37:38

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

Hibernate学习笔记(2)Hibernate问题

(1)数据库驱动问题 log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" org.hibernate.HibernateException: JDBC Driver class not found: com.m

Hibernate学习笔记(六) — Hibernate的二级缓存

我们知道hibernate的一级缓存是将数据缓存到了session中从而减少与数据库的交互.那么二级缓存呢? 一.应用场合 比如,在12306购票时,需要选择出发地与目的地,如果每点一次都与数据库交互一次,这就很不合适,这些地点数据在相当长的一段时间内是不会发生变化的(山东省在相当长的时间内还叫山东省),所以应该缓存起来,没必要每次都与数据库交互,而且该类数据安全性也不是很高. 适合二级缓存的数据: 在现代软件开发中,确实存在一类数据没有什么私有性,为公开的数据,数据基本上不发生变化,该数据保密

Hibernate学习笔记(三) — Hibernate 的一级缓存意义

什么是缓存? 缓存说白了,就是应用程序向数据库要数据,然后把一些数据,临时的放在了内存的区域中,第二次再要数据的时候,直接从内存中拿即可. 缓存需要解决的事情: 1.能把数据放入缓存 2.能把数据从缓存中取出来 3.如果缓存中的数据发生变化,需要把数据同步到数据库中 4.把数据库中的数据同步到缓存中 5.hits命中率低的对象应该及时从缓存中移走 分布式缓存: 为什么会有分布式缓存? 应用程序运行在服务器上,并发访问时,服务器压力过大,分布式缓存就是来分担服务器压力的. 分布式缓存之间的数据是同

hibernate学习笔记之一 hibernate简介

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架 hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久

Hibernate学习笔记(九) — Hibernate的查询

Hibernate共提供以下三种检索方式 HQL检索方式: 1.通过 Session 的 createQuery() 方法创建一个 Query 对象, 它包括一个 HQL 查询语句. HQL 查询语句中可以包含命名参数 2.动态绑定参数 3.调用 Query 的 list() 方法执行查询语句. 该方法返回java.util.List 类型的集合, 在 List 集合中存放了符合查询条件的持久化对象. 4.Qurey 接口支持方法链编程风格, 它的 setXxx() 方法返回自身实例 Hiber

Hibernate学习笔记(3)

两年前曾经学习过Hibernate,也通过博客将Hibernate的学习过程记录下来了,地址如下: Hibernate学习笔记(1) Hibernate学习笔记(2) 最近在复习Hibernate,在重新学习的过程中,有了一些新的体会和收获,现在将其总结成博客,供以后作为参考资料使用. 一.导入相应的jar包 目前Hibernate更新到了4.x版本,在官网下载后,找到lib文件加中的required文件夹,此外还需要额外导入log4j和数据库驱动包. 二.创建Hibernate配置文件 在sr

Hibernate学习笔记:第一个程序的搭建

Hibernate学习笔记:第一个程序的搭建 前一段时间对Struts2这个框架有了一点点地了解,很高兴,自己开始学习Hibernate这个框架了.本篇博文将记录下第一个Hibernate程序的搭建过程.其实有时候个人觉得无论我们学习什么语言也好,还是学习什么框架也好,第一个HelloWorld程序真的相当重要,假如 我们在学习第一个HelloWorld程序都跑不出来,这完全影响着我们对新接触的东西的兴趣和动力,但是,往往第一个程序都会涉及到很多的配置,因此使得对于初学者要摸索一定的时间,对于我

Hibernate学习笔记(1)Hibernate配置

一 准备工作 首先我们将创建一个简单的基于控制台的(console-based)Hibernate应用程序. 我们所做的第一件事就是创建我们的开发目录,并且把所有需要用到的Java库文件放进去.解压缩从Hibernate网站下载的Hibernate发布包,并把所有需要的库文件拷到我们项目中去. 学习建User-library-hibernate,并加入相应的jar包 (a)项目右键-buildpath-configure build path-add library (b)选择User-libr

hibernate学习笔记之二(初识hibernate)

(hibernate学习笔记系列来自于 "疯狂Java" 视频学习) Hibernate概述 免费开源Java包,可以使程序和数据库的交互变得容易,并更加符合面向对象的设计. 持久化:将数据保存到数据库中 hibernate持久化类步骤 环境搭建 导入jar包,在hibernate包里的\lib\required文件夹里 导入mysql的JDBC驱动 将上述包添加到路径里面 编写持久化类 要求: 在持久化类中一般需要一个id,通常用Integer类型,这样之后操作会使用null,而不是