浅谈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事务 它主要方法有mit()和rollback() 可以从Session的beginTrancation()方法生成
Persistent Object
持久化对象可以是普通的Javabeans 惟一特殊的是它们与(仅一个)Session相关联 JavaBeans在Hibernate中存在三种状态
临时状态(transient):当一个JavaBean对象在内存中孤立存在 不与数据库中的数据有任何关联关系时 那么这个JavaBeans对象就称为临时对象(Transient Object)
持久化状态(persistent):当一个JavaBean对象与一个Session相关搜桐联时 就变成持久化对象(Persistent Object)
脱管状态(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简单示例
数拦御据
create table T_register
(
id int primary key
userName varchar( )
userPwd varchar( )
sex varchar( )
age int
)
视图层 注册页面register jsp
用户名
密 码
性 别
年 龄
设计持久化类TRegister java
package hibernate PO;
/**
* 持久化类
*/
public class TRegister implements java io Serializable {
// Fields
private Integer id;
private String userName;
private String userPwd;
private String sex;
private Integer age;
// Constructors
/** default constructor */
public TRegister() {
}
/** minimal constructor */
public TRegister(Integer id) {
this id = id;
}
/** full constructor */
public TRegister(Integer id String userName String userPwd String sex Integer age) {
this id = id;
this userName = userName;
this userPwd = userPwd;
this sex = sex;
this age = age;
}
// Property accessors
public Integer getId() {
return this id;
}
public void setId(Integer id) {
this id = id;
}
public String getUserName() {
return this userName;
}
public void setUserName(String userName) {
this userName = userName;
}
public String getUserPwd() {
return this userPwd;
}
public void setUserPwd(String userPwd) {
this userPwd = userPwd;
}
public String getSex() {
return this sex;
}
public void setSex(String sex) {
this sex = sex;
}
public Integer getAge() {
return this age;
}
public void setAge(Integer age) {
this age = age;
}
}
设计Hibernate配置文件hibernate cfg xml
//Hibernate/Hibernate Configuration DTD //EN
configuration dtd >
root
jdbc:mysql://localhost: /study
hibernate dialect MySQLDialect
MySQL
root
gjt mm mysql Driver
true
设计映射文件TRegister hbm xml
mapping dtd >
设计hibernate基础类HibernateUtil java
package hibernate;
/**
* hibernate 基础类
* @author fengyan
* date :
*/
import hibernate HibernateException;
import hibernate Session;
import hibernate SessionFactory;
import hibernate cfg Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static
{
try
{
Configuration config = new Configuration(nfigure( /hibernate/hibernate cfg xml );
sessionFactory = config buildSessionFactory();
}
catch(Throwable e)
{
throw new ExceptionInInitializerError(e);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException
{
Session s = (Session)session get();
//Open a new Session if this Thread has none yet
if(s == null || !s isOpen())
{
s = sessionFactory openSession();
session set(s);
}
return s;
}
public static void closeSession() throws HibernateException
{
Session s = (Session)session get();
session set(null);
if(s != null)
s close();
}
}
设计控制类
package hibernate servlet;
/**
* @author fengyan
* date :
* 设计Hibernate控制类
*/
import hibernate HibernateUtil;
import hibernate PO TRegister;
import java io IOException;
import java io PrintWriter;
import javax servlet ServletException;
import javax servlet HttpServlet;
import javax servlet HttpServletRequest;
import javax servlet HttpServletResponse;
import hibernate HibernateException;
import hibernate Session;
import hibernate Transaction;
public class RegisterServlet extends HttpServlet {
private static final String CONTENT_TYPE = text/;charset=GBK ;
public void init() throws ServletException {
// Put your code here
}
public void destroy() {
super destroy(); // Just puts destroy string in log
// Put your code here
}
public void doGet(HttpServletRequest request HttpServletResponse response)
throws ServletException IOException {
response setContentType(CONTENT_TYPE);
request setCharacterEncoding( GBK );
PrintWriter out = response getWriter();
String userName = request getParameter( userName );
String userPwd = request getParameter( userPwd );
String sex = request getParameter( sex );
int age = Integer parseInt(request getParameter( age ));
TRegister rg = new TRegister();
rg setAge(age);
rg setSex(sex);
rg setUserName(userName);
rg setUserPwd(userPwd);
Session session = HibernateUtil currentSession();//生成Session实例
Transaction tx = session beginTransaction();
try
{
session save(rg); //保存持久类对象
mit(); //提交到数据库
session close();
response sendRedirect( registerOK jsp );
}
catch(HibernateException e)
{
e printStackTrace();
tx rollback();
}
}
public void doPost(HttpServletRequest request HttpServletResponse response)
throws ServletException IOException {
doGet(request response);
}
lishixinzhi/Article/program/Java/ky/201311/28144