文档章节

hibernate开发步骤

朱桂林
 朱桂林
发布于 2017/06/04 19:25
字数 1664
阅读 36
收藏 5

1)开发步骤:

>>导入hibernate相关的10个jar包,如果后面,要用到其它功能,可以添加新jar包 (包括了MySQL的驱动包)

>>创建表:customers.sql

    >>创建实体:Customer.Java

>>创建Customer.hbm.xml映射文件,目的是通知hibernate框架,如何将实体和表关联起来

    >>创建hibernate.cfg.xml配置文件,目的是通知hibernate框架,如何连接不同的数据库和产生不同数据库的SQL命令

    >>测试类:CURD操作(CustomerService) 

 

   2具体步骤详解

         >>jar 包:

antlr-2.7.6.jar  一个语言转换工具,Hibernate利用它实现 HQL 到 SQL 的转换

commons-collections-3.1.jar  collections Apache 的工具集,用来增强Java对集合的处理能力

dom4j-1.6.1.jar  dom4j XML 解析器

hibernate3.jar    核心包

javassist-3.9.0.GA.jar  代码生成工具, Hibernate用它在运行时扩展 Java类

jta-1.1.jar  标准的 JAVA 事务处理接口

log4j.jar  日志包

mysql-connector-java-5.1.7-bin.jar  mysql驱动包

slf4j-api-1.5.8.jar  slf4j-log4j12.jar  hibernate使用的一个日志系统

>>创建sql表

例: dropdatabaseifexists hibernate;

createdatabaseifnotexists hibernate;

use hibernate;

droptableifexists customer;

createtableifnotexists customer(

    id intprimarykey auto_increment,

    namevarchar(20) default "小小",

    ageintdefault 21,

    des varchar(100) default "文雅"

);

select * from customer;

 

 

     >>Customer.hbm.xml文件

         1.Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句, 映射文件的扩展名为 .hbm.xml 如;Customer.hbm.xml文件. 如: 以上Customer.hbm.xml文件是Customer类和customers表的对应关系。该文件前缀必须和类名一致,后缀必须是.hbm.xml。文件位置任意

         2.  property元素:设定持久化类的属性和表字段映射       

name属性:指定持久化类的属性的名字

column属性:指定表中字段的名称    

type属性指定Hibernate映射类型 Hibernate映射类型是java类型与SQL类型的桥梁

.hbm.xml文件的来源:

hibernate-distribution-3.5.6-Final-dist.zip\hibernate-distribution-3.5.6-Final\project\tutorials\web\src\main\resources\org\hibernate\tutorial\domain......

注:该映射文件的规范在org.hibernate. hibernate-mapping-3.0.dtd文件中

例:

Customer.hbm.xml文件的属性含义:

<hibernate-mapping package="cn.itcast.web.hibernate.character0(实体对象的包名)">

    <class name="Customer(类名)" table="CUSTOMERS(表名)">

        <id name="id" column="ID" type="integer">

            <generator class="increment"/>

        </id>

        <property name="name(属性名)" column="NAME(列名)" type="string(hibernate类型)"/>

        <property name="age(属性名)" column="AGE(列名)" type="integer(hibernate类型)"/>

        <property name="des(属性名)" column="DES(列名)" type="string(hibernate类型)"/>

    </class>

</hibernate-mapping>

 

     >>hibernate.cfg.xml文件

创建 Hibernate 配置文件, Hibernate 从其配置文件中读取和数据库连接的有关信息, 这个文件应该位于应用的 classpath 下.

文件名必须是hibernate.cfg.xml,文件位置任意,   除了使用xml作为配置文件之除,还可以使用hibernate.properties文件(项目中不提倡)。

注:该映射文件的规范在org.hibernate.hibernate-configuration-3.0.dtd文件中

文件的来源:   hibernate-distribution-3.5.6-Final-dist.zip\hibernate-distribution-3.5.6-Final\project\tutorials\web\src\main\resources

例:

hibernate.cfg.xml文件的属性含义:

<hibernate-configuration>

    <session-factory>

    <!-- 配置连接数据库的相关属性 -->

        <property name="connection.driver_class">com.mysql.jdbc.Driver(驱动类名)</property>

        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate(URL)</property>

        <property name="connection.username">root(访问数据库的用户名)</property>

        <property name="connection.password">root(访问数据库的密码)</property>

        <!-- 通知hibernate动态生成哪个数据库的SQL命令 -->

        <property name="dialect">org.hibernate.dialect.MySQL5Dialect(数据库的方言)</property>

        <!-- 显示hibernate动态生成的SQL命令,true表示显示 -->

        <property name="show_sql">true(需要显示sq命令)</property>

        <!-- 加载对象和关系的映射文件 -->

        <mapping resource="cn/itcast/web/hibernate/character0/Customer.hbm.xml(映射文件的类路径)"/>

    </session-factory>

</hibernate-configuration>

 

>>Configuration类:

是hibernate中一个用于加载hibernate.cfg.xml文件的类,config .config(“xml文件的类路径”)方法能够加载指定目录下的hibernate.cfg.xml文件,config.buildSessionFactory()创建一个SessionFactory工厂。该工厂有大量空闲的session.

Configuration 类负责管理 Hibernate 的配置信息。包括如下内容:

Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。持久化类与数据表的映射关系(*.hbm.xml 文件).

创建 Configuration 的两种方式

•      属性文件(src/hibernate.properties):

    Configuration cfg = new Configuration();

 

•      Xml文件(src/hibernate.cfg.xml)推荐

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

    Configuration cfg = new Configuration().configure(“目录”);

 

     >>SessionFactory接口

       保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存,有且只放置一种类型数据库的相关信息 , 重量级,即创建需要大量时间和资源,因此将创建SessionFactory的工作,放在static块中,只创建一个,便于重用 , SessionFactory是一个线程安全的,所以可以定义成实例变量,无需加synchronized。    

创建方式:

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

   SessionFactory sf = cfg.buildSessionFactory();

 

    >>Session

       SessionFactory.openSession()     

       Session是由SessionFactory获取而来,它是轻量级,即创建需要少量时间和资源,每次数据库的操作(CURD)都需要一个Session的绑助,没有Session就无法与数据库表操作。

Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。此对象的生命周期很短。Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久层操作的数据都缓存在 session 对象处。相当于 JDBC 中的 Connection

            

       Session常用的API

              session.save(对象)     //向数据库插入数据

              session.update(对象)   //更新数据

              session.delete(对象)    //删除数据

              session.get(对象的字节码class文件,序号)   //查询数据

             //查询所有数据信息

            String hibernateSQL = " from 需要查询的类的类名";   例如: 查询User类   String hibernateSQL = " from  User"; 此处的类名一个要和创建的类名保持一致.

              Query query = session.createQuery("hibenate query language语句,不是sql语句")    

          例: Query query = session.createQuery(hibernateSQL)  ;  

              List<类> list = query.list()

       Session是不安全的,不要定义成实例变量,除非加synchronized。

       将Session定义成局部变量,即在某个方法内部,就无需加synchronized。

    >>Transaction接口(事物)

       通过session.getTransaction()取得事务对象,在应用时,除查询外,其它都需要事务的支持,查询对事务的要求不限(可选),

       开始事务:t.begin()

       提交事务:t.commit()

       回滚事务:t.rollback()

       显示try..catch...finally...

例:

         publicvoid saveCustomer(){

       //创建customer对象,并设置属性值

       Customer cus = new Customer();

       cus.setName("思思");

       cus.setAge(21);

       cus.setDes("文静");

       //创建confingration对象

       Configuration config = new Configuration();

       //加载配置文件,连接驱动

       config.configure("cn/web/hibernate/hibernate.cfg.xml");

       //创建sessionfactory

       SessionFactory sessionfactory = config.buildSessionFactory();

       //创建session

       Session  session = sessionfactory.openSession();

       //创建事物

       Transaction transaction= session.getTransaction();

       try {

           //事物开始

           transaction.begin();

           //保存实体域对象到表中

           session.save(cus);

       } catch (HibernateException e) {

           //错误的情况下事物恢复到原有的状态

           transaction.rollback();

       }finally{

           //事务结束

           transaction.commit();

       }

session.close();

    }

© 著作权归作者所有

下一篇: list
朱桂林
粉丝 0
博文 12
码字总数 11343
作品 0
产品经理
私信 提问

暂无文章

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部