您的位置:首页 > 其它

对象生成Hibernate框架简述

2013-05-08 20:32 405 查看
每日一贴,今天的内容关键字为对象生成

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简略示例:
据数:

create table T_register
(
id int primary key,
userName varchar(30),
userPwd varchar(30),
sex varchar(10),
age int
)

视图层:注册面页register.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
</head>
<body>

<form action="servlet/RegisterServlet" method="POST">
用户名:<input type="text" name="userName" /><BR>
密 码:<input type="text" name="userPwd" /><BR>
性 别:<input type="text" name="sex" /><BR>
年 龄:<input type="text" name="age" /><BR>
<input type="submit" value="save" />
</form>
</body>
</html>

计设久持化类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

每日一道理

美丽是平凡的,平凡得让你感觉不到她的存在;美丽是平淡的,平淡得只剩下温馨的回忆;美丽又是平静的,平静得只有你费尽心思才能激起她的涟漪。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

<session-factory>
<property name="connection.username">root</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/study
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="myeclipse.connection.profile">MySQL5.0</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
org.gjt.mm.mysql.Driver
</property>
<property name="show_sql">true</property>
<mapping resource="hibernate/PO/TRegister.hbm.xml" />

</session-factory>

</hibernate-configuration>

计设映射文件TRegister.hbm.xml

<?xml version="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">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="hibernate.PO.TRegister" table="t_register">
<id name="id" type="java.lang.Integer">
<column name="id" />
<!-- 我在MYSQL中并没有设置该字段递增,但在Hibernate中然依可以设置为递增 -->
<generator class="increment" />
</id>
<property name="userName" type="java.lang.String">
<column name="userName" length="30" />
</property>
<property name="userPwd" type="java.lang.String">
<column name="userPwd" length="30" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" length="10" />
</property>
<property name="age" type="java.lang.Integer">
<column name="age" />
</property>
</class>
</hibernate-mapping>

计设hibernate基础类HibernateUtil.java

package hibernate;
/**
* hibernate 基础类
* @author fengyan
* date 2007-01-09 02:32
*/
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static
{
try
{
Configuration config = new Configuration().configure("/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 2007-01-09 02:44
* 计设Hibernate制控类
*/
import hibernate.HibernateUtil;
import hibernate.PO.TRegister;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class RegisterServlet extends HttpServlet {

private static final String CONTENT_TYPE = "text/html;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); //保存久持类对象
tx.commit(); //提交到据数库
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);

}

}

文章结束给大家分享下程序员的一些笑话语录:

有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。

“如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。

“如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。

“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。

“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。

  最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐