浅谈Hibernate框架简述

 我来答
温屿17
2022-10-13 · TA获得超过1.2万个赞
知道小有建树答主
回答量:827
采纳率:0%
帮助的人:90.9万
展开全部

  在基于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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式