Hibernate小结

来源:互联网 发布:阶层的算法 编辑:程序博客网 时间:2024/06/05 09:11

Hibernate框架简介

Hibernate是一个开放源代码对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。


为什么要用hibernate?

直接使用JDBC操作数据库的步骤很繁琐

JDBC操作的是关系型数据库

我们用JAVA开发程序,则使用面向对象的思想 

Hibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口


Hibernate优势:


优秀的Java 持久化层解决方案

主流的对象—关系映射工具

简化了JDBC 繁琐的编码

将数据库的连接信息都存放在配置文件



Hibernate发展

         最新版本hibernate5

Hibernate3和hibernate4的区别:


Hibernate3中推荐使用sessionFactory.openSession();

Hiberante4中推荐使用sessionFactory.getCurrentSession()开启session

 

hibernate3(openSession())中的查询方法,可以不用事物管理

Hiberante4(getCurrentSession())中的查询方法,必须加入事物管理(Transaction)


说到Hibernate不得不说一下ORM思想(对象关系映射

ORM对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

编写程序的时候,以面向对象的方式处理数据

保存数据的时候,却以关系型数据库的方式存储

ORM解决方案包含下面四个部分

在持久化对象上执行基本的增、删、改、查操作

对持久化对象提供一种查询语言或者API

对象关系映射工具

提供与事务对象交互、执行检查、延迟加载以及其他优化功能

面向对象的概念

面向关系的概念

属性

列(表中的字段)

对象

行(表中的一条记录)



 第一个hibernate程序

       开发步骤

1.    创建项目,部署jar包

新建一个java project(或web project)

然后把hibernate框架压缩包中的hibernate-release-4.3.11.Final\lib\required目录下的所有jar包加载到项目当中,把数据库的连接驱动jar包部署在项目当中

           加载后如下:


2.    编写hibernate配置文件

在src目录下新建hibernate.cfg.xml(所在目录,文件名字不可变动

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPE hibernate-configurationPUBLIC

         "-//Hibernate/HibernateConfiguration DTD 3.0//EN"

        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

         <hibernate-configuration>

                   <session-factory>

                           <!--数据库url -->

                            <propertyname="hibernate.connection.url">jdbc:mysql://user</property>

                           <!--数据库用户名 -->

                            <propertyname="connection.username">root</property>

                           <!--数据库密码 -->

                            <propertyname="connection.password">root</property>

                           <!--数据库驱动 -->

                            <propertyname="connection.driver_class">com.mysql.jdbc.Driver</property>

                           <!--hibernate管理session的模式 -->

                            <propertyname="current_session_context_class">thread</property>

                           <!--方言 -->

                            <propertyname="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

                   <mappingfile="src/base/vo/user.hbm.xml"/>

                   </session-factory>

         </hibernate-configuration>



3    编写持久化类(vo/pojo)

新建类base/vo/User.java

    public classUser {

                    private int userid;

                    private String name;       //为了加以区分,该属性和表的列名不一致

                     private String psw;

                     private String realname;

                     private String phone;

                     private String idcard;

                     //省略get/set方法

}


4.    创建映射文件

新建base/vo/user.hbm.xml文件完成类和数据库的映射

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEhibernate-mappingPUBLIC

    "-//Hibernate/HibernateMapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

    <hibernate-mapping>

             <classname="base.vo.User"table="sys_user">

                       <!-- 针对id映射 -->

                       <idname="userid"column="userid">

                                <generator class="increment"></generator>

                       </id>

                       <!-- 针对普通字段映射 -->

                       <!-- name属性指定类对象的属性名称     column属性指定表中的列名   type字段类型 -->

                       <propertyname="name"column="uname"type="string"></property>

                       <propertyname="psw"column="psw"type="string"></property>

                       <propertyname="realname"column="realname"type="string"></property>

                       <propertyname="phone"column="phone"type="string"></property>

                       <propertyname="idcard"column="idcard"type="string"></property>

             </class>

</hibernate-mapping>


5.    创建测试实例

新建base/HibernateTest.java测试类实现新增数据功能

         public class HibernateTest {

         //新增用户

         public void add(User u){

                   Configuration cfg=new Configuration().configure();

                   StandardServiceRegistryssr=newStandardServiceRegistryBuilder()

                                                                           .applySettings(cfg.getProperties()).build();

                   SessionFactorysf=cfg.buildSessionFactory(ssr);

                   //创建session对象

                   Sessionsession=sf.getCurrentSession();

                   //开启事务

                   session.beginTransaction();

                   session.save(u);

                   session.getTransaction().commit();

                           

         }

         public static void main(String[] args) {

                   User u=new User();

                   u.setIdcard("qqq");

                   u.setPhone("www");

                   u.setPsw("123");

                   u.setName("你你你你你你你你你");

                   HibernateTest ht=new HibernateTest();

                   ht.add(u);

         }

}


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对象将 提交这些操作结果到数据库中。