Hibernate基础核心解析(1)
基本过程:
一个*.hbm.xml对应一个POJO类,用于保存从类到关系映射的信息,hibernate.cfg.xml信息会获取映射源,同时保存关于连接数据库所需的基本信息。Configuration接口产生一个对应的对象用于加载配置信息,configuration对象产生一个对应于数据库的SessionFactory对象,SessionFactory可产生多个Sesssion对象,每个Session对应一次对数据库的操作,Session对象通过产生Transaction来使操作具有原子性。
1、hibernate概述:
Hibernate是一种常用的ORM(对象关系映射)框架,用于将POJO类对应到数据库,从而实现通过面向对象完成对数据库的操作。
2、*.hbm.xml文件(对象关系映射文件)
(1)一个hbm.xml文件将一个类对应到一个关系(数据库中的表)
(2)hbm.xml文件模板:
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
'-//Hibernate/Hibernate Mapping DTD 3.0//EN'
'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>
<hibernate-mapping package=”com.firsthibernate”>
<class name=”user” table=”user”> o
<id name=”the_id” colum=”id”type=”java.lang.Interger”>r
<generator class=”uuid”>
</id>
<property name=”user_name” type=”java.lang.String”>
<column name=”the_user_name” not-null=”false”>
</property>
</class>
</hibernate-mapping>
Hbm.xml的根标签为<hibernate-mapping></hibernate-mapping>其中的package可以省略,则后面的类名必须为全称限定类名。次级的标签为类和其所对应的表明(省略默认相同);再次级为id(主键)和property(属性),主键内必须说明generator;两者的类型对应的属性名皆可以省略,not-null默认为ture.
3、*.cfg.xml(hibernate配置文件)
(1)hibernate配置文件用于配置连接数据库的所有信息包括:JDBC类型,数据库的URL,用户名,密码,方言,以及基本设置。同时还要有映射文件源信息<mapping resource=”****”>.
(2)模板:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configurationPUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>cla
<!—对数据库的连接信息进行设置—>
<session-factory>
<! – 使用的JDBC -->
<property name=” hibernate.connection.driver_class”>
com.mysql.jdbc.driver
</property>
<! – 数据库的URL路径 –>
<propertyname=” hibernate.connection.url”>
jdbc:mysql://localhost:3306/hibernate_first
</property>
<!—用户名 -->
<property name=” hibernate.connection.username”>
Root
</property>
<!—密码—>
<property name=” hibernate.connection.password”>
Root
</property>
<!—方言 -->
<property name=” hibernate.dialect”>
org.hibernate.dialect.MySQLDialect
</property>
<!-- 显示出对应sql语句 -->
<propertyname="show_sql">true</property>
<!-- 格式化输出sql语句 -->
<propertyname="format_sql">true</property>
<!-- 指定管理对象映射文件 -->
<mappingresource="com/lc/domain/Employee.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
3、configuration类
(1)用于读取cfg.xml文件,并获得配置的所有信息,同时根据配置信息生成对应的SessioFactory对象。
(2)代码示意:
Configurationcfg= new Configuration().configure();
//加载配置信息,生成对应的configuration对象
SessionFactory sf=cfg.buildSessionFactory();
4、SessionFactory接口
(1)由Configuration对象产生,一个数据库对应一个SessionFactory对象,通过创建session来完成对数据库的操作。E
(2)代码示意:
Session session1=sf.openSession();
Session session1=sf.getCurrentSession();
//创建一次会话
区别:
①采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会
②采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭.
③使用getCurrentSession()需要在hibernate.cfg.xml文件中加入
如下配置:
* 如果使用的是本地事务(jdbc事务)
<propertyname="hibernate.current_session_context_class">thread</property>
* 如果使用的是全局事务(jta事务)
<propertyname="hibernate.current_session_context_class">jta</property>
5、Session接口
(1)由SessionFactory对象产生,一次会话对应一个Session对象,可以创建Transaction对象,使操作具有原子性。
(2)代码示意:
Session1.sava(user)
//对表进行操作后进行保存,其中user对象为POJO类的实例。
Session1.close();
//关闭会话,如果为getCurrentSession创建的会话可以省略。
Session1.beginTransaction();
//开始事务,以下的操作具有原子性,直至commit结束;
Session1.getTranscation.
//获得当前的事务。
6、Transaction接口
(1)由Seeeion对象产生,使操作具有原子性。
(2)Session1.getTransaction.commit();
//提交事务
Session1.getTransaction.rollback();
//事务滚回