1.Hibernate框架简述
Hibernate的核心组件
在基于MVC设计模式的JAVA
WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent
Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。
除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:
a)Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。
b)SessionFactory接口:产生Session实例工厂。
c)Session接口:用来操作PO。它有get(),load(),save(),update()和delete()等方法用来对PO进行加载,保存,更新及删除等操作。它是Hibernate的核心接口。
d)Query接口:用来对PO进行查询操。它可以从Session的createQuery()方法生成。
e)Transaction接口:用来管理Hibernate事务,它主要方法有commit()和rollback(),可以从Session的beginTrancation()方法生成。
Persistent Object
持久化对象可以是普通的Javabeans,惟一特殊的是它们与(仅一个)Session相关联。JavaBeans在Hibernate中存在三种状态:
1.临时状态(transient):当一个JavaBean对象在内存中孤立存在,不与数据库中的数据有任何关联关系时,那么这个JavaBeans对象就称为临时对象(Transient Object)。
2.持久化状态(persistent):当一个JavaBean对象与一个Session相关联时,就变成持久化对象(Persistent Object)
3.脱管状态(detached):在这个Session被关闭的同时,这个对象也会脱离持久化状态,就变成脱管状态(Detached
Object),可以被应用程序的任何层自由使用,例如可以做与表示层打交道的数据舆对象(Data Transfer Object)。
Hibernate的运行过程Hibernate的运行过程如下:
A:应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。
B:然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将
提交这些操作结果到数据库中。
Hibernate的运行过程如下图:
2.入门案例
1.客户的实体类
/**
* get和set方法
*/
2在实体类下设计映射文件Custormer.hbm.xml(在配置文件hibernate.cfg.xml使用)
<!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.Custormer" table="cst_customer">
<id name="cust_id" column="cust_id">
<generator class="native" ></generator>
</id>
<property name="cust_name" column="cust_name"/>
<property name="cust_user_id" column="cust_user_id"/>
<property name="cust_create_id" column="cust_create_id"/>
<property name="cust_industry" column="cust_industry"/>
<property name="cust_level" column="cust_level"/>
<property name="cust_mobile" column="cust_mobile"/>
</class>
</hibernate-mapping>
3.在src下设计Hibernate配置文件hibernate.cfg.xml
<!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>
<!-- 需要配置5大参数:JDBC的4大参数,数据库的方言 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///db_name?useUnicode=true&characterEncoding=UTF-8 </property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!--可选参数 -->
<property name="hibernate.show_sql"> true</property><!--显示SQL语句 -->
<property name="hibernate.format_sql"> true</property><!--将SQL语句格式化 -->
<!-- <property name="hibernate.hbm2ddl.auto">create</property>自动建表
<property name="hibernate.hbm2ddl.auto">update</property> -->
<!-- 引入映射配置文件 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="entity/Custormer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3.配置的方法
public class Hibernate {
private static final Configuration CONFIG;
private static final SessionFactory FACTORY;
static{
CONFIG=new Configuration().configure();
FACTORY=CONFIG.buildSessionFactory();
}
public static Session opensession(){
return FACTORY.openSession();
}
}
4. 测试类 增加客户的方法
public class TestDemo {
@Test
public void run() {
/*
* 1.加载配置文件 2.创建sessionFactory 3.创建session对象 4.开启事务 5.保存客户 6.提交事务 7.释放资源
*/
Session session = Hibernate.opensession();
Transaction ta = session.beginTransaction();
Custormer c = new Custormer();
c.setCust_name("北京");
c.setCust_phone("66666666");
c.setCust_level("高级工程师");
try {
session.save(c);
ta.commit();
} catch (Exception e) {
e.printStackTrace();
ta.rollback();
} finally {
session.close();
}
}
}