Hibernate学习笔记之----Hibernate基本使用

6 篇文章 0 订阅
4 篇文章 0 订阅

        学习了Hibernate框架的基本使用之后,我初步掌握了如何在一个项目开发中使用Hibernate技术对数据库进行访问,作此笔记便于日后温习,也便于大家一起交流学习。

        首先,在学习Hibernate框架的基础之后,我知道了Hibernate技术其实也是对JDBC技术的封装,因为在Java程序中,要想访问数据库,JDBC技术是唯一的途径,也就是说,java程序访问数据库,底层操作只有通过JDBC技术才能访问,其他的一些数据访问框架如Hibernate、MyBatis等都是对JDBC操作的封装。Hibernate是目前国内最流行的数据访问层框架之一,也被称为持久层框架。下面通过一个示例介绍Hibernate框架使用的基本流程:

1.首先,创建一个项目,为其引入Hibernate框架的jar包,并在主配置文件 hibernate.cfg.xml文件中进行相关配置,

   如:使用的数据库方言类型、访问数据库的URL、连接数据库的驱动包、用户名和密码等的配置,我的 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">
<hibernate-configuration>
    <session-factory>
        <property name="hbm2ddl.auto">update</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/201company</property>
        <property name="connection.username">root</property>
        <property name="connection.password">zx123456</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="myeclipse.connection.profile">MySqlCon</property>
        <!-- 配置Hibernate参数,打印出Hibernate生成的sql语句 -->
        <property name="show_sql">true</property>
        <!-- 将生成的sql语句格式化后输出 -->
        <property name="format_sql">true</property>
        <mapping resource="com/jeason/entity/members.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

2.然后,编写实体类, 如下为实体类Members类的定义 Members.java:

package com.jeason.entity;

public class Members {
    private String name;   //姓名
    private String number; //学号
    private String location;  //位置

    //这里必须添加属性的get()和set()方法

    ..........

}

接下来,为entity(实体类)编写对应的映射描述文件,使实体类与数据表产生映射,一般与其实体类在同一个包路径下, 首先说一下Hibernate中的映射类型:
    hbm.xml在描述字段和属性映射时,采用type属性指定映射类型。
            映射类型的作用:主要负责实现属性和字段值之间的转化。
            映射类型type有两种写法,一般推荐采用第二种写法,即指定Hibernate类型:
    a.指定java类型,包名.类名,如:java.lang.String
    b.指定Hibernate类型,特点是全部小写,如下:
                  整数: byte,short,integer, long,
                  浮点数:float,double
                  字符串:string
                  日期和时间:date------(只有年月日,没有时分秒)-----java.sql.Date
                                          time------(没有年月日,只有时分秒)-----java.util.Date
                                          timestamp---------------(有年月日,还有时分秒)
                   布尔类型:yes_no, true_false(转换的时候,数据库中存储的boolean值将变为char类型)
                                       yes_no---------Y/N
                                       true_false-----T/F
                   一般在设计数据库的时候会考虑到数据库的移植,尽量避免使用boolean
                   其他:blob,clob,big_decimal,big_integer

如下为Members实体类编写映射描述文件 members.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" >
<hibernate-mapping>
    <!-- 指定Members类与201_member表之间的映射 -->
    <class name="com.jeason.entity.Members" table="201_members">
        <!-- 主键映射 -->
        <id name="number" type="string">
            <column name="NUMBER"></column>
            <!-- 指定主键的生成方式,采用序列方式生成主键 -->
            <generator class="native">
                指定序列名  
                <param name="sequence">SEQ_NAME</param>
            </generator>
        </id>
        <!-- 非主键映射 -->
        <property name="name" type="string">
            <column name="NAME"></column>
        </property>
        <property name="location" type="string">
            <column name="Location"></column>
        </property>
    </class>
</hibernate-mapping>

====这里介绍一下hbm.xml文件的编写,在编写hbm.xml文件时,首先要指定实体类和对应的数据表,如上述文件,然后指定主键属性和一般属性两种属性,在指定主键属性时,基本格式为:   <id name="实体类中的主键属性名"  type=主键属性的类型"  column="在数据表中主键所对应的字段名"></id>,在该id属性内部我们可以指定主键的生成方式,Hibernate中有以下几种方式指定主键的生成方式:

   a.sequence可以按指定序列生成主键值,只适用于oracle数据库。
      <generator class="sequence">
          <param name="sequence">SEQ_NAME</param>
      </generator>
    b.identity 按照数据库自动增长机制生成主键值,    一般适用于mySql,SqlSever数据库
      <generator class="identity"></generator>             
    c.native Hibernate会根据方言类型不同,选择不同的主键生成方式;如果是OracleDialect会选择sequence,如果是MySqlDialect会选择identity,可以直接在generator内部指定序列的名称
      <generator class="native"></generator>                    
    d.assigned:  Hibernate会放弃主键生成,采用此方法,需要在程序中指定主键值。
      <generator class="assigned"></generator>            
    e.increment(存在并发隐患) Hibernate会先执行select max(id) 找出当前记录中的最大值,然后自增1,之后再调用insert语句,它是种 通用型方式,支持各种数据库
      <generator class="increment"></generator>    
    f.uuid/hilo
      uuid是指按照UUID算法生成主键值-----------(字符串类型)。
      Hilo指的是按照高低位算法生成一个主键值-------(数值类型)
      <generator class="uuid/hilo"></generator>

在上述例子中我采用的主键生成方式是native类型。

3.在主配置文件hibernate.hbm.xml中将实体类的映射描述文件加载到主配置文件中,在主配置文件中加入以下配置:

    <mapping resource="com/jeason/entity/members.hbm.xml"/>

4. 接下来,就可以使用hibernate进行简单的查询操作:

     --> a.首先加载主配置文件;

     --> b.然后获取SessionFactory对象;

     --> c.通过SessionFactory对象获取一个session连接;

     --> d.通过session对数据进行增删改查操作

   如:对Members表进行查询可以如下编写:
        Configuration cfg = new Configuration();  //加载主配置文件
        cfg.configure();   
        SessionFactory sf = cfg.buildSessionFactory(); //获取SessionFactory对象
        Session session = sf.openSession();  //获取session对象
        Members mb = (Members)session.get(Members.class,"1308010326");  //根据主键查询
           

注意: Hibernate进行数据库操作时,一定要注意提交事务,因为在JDBC操作中事务提交默认是打开的,而Hibernate将自动提交事务默认关闭了,
        所以在添加操作完成后一定要手动提交事务,否则执行的更新操作将不会生效 ,
如下:      
        Session session = HibernateUtil.openSession();
        Transaction tx = session.beginTransaction();        //开始执行事务
        session.save(member);  //执行添加操作
        tx.commit();  //提交事务
        session.close();  //释放session连接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值