Hibernate入门

Hibernate入门

Hibernate简介

  • Hibernate的创始人Gavin King
    • EJB 3.0专家委员会成员
    • JBoss核心成员之一
    • 《Hibernate in Action》的作者
  • 优秀的Java持久化层解决方案
  • 主流的对象-关系映射工具

Hibernate的优缺点

  • 简化了JDBC繁琐的编码

    Session session = HiberanteUtil.currentSession();
    Query query = session.createQuery("from User");
    List<User> users = (List<User>) query.list();
  • 对面向对象特性支持良好

  • 可移植性好

  • Hibernate的缺点

    • 不适合需要使用数据库的特定优化机制的情况
    • 不适合大规模的批量数据处理

与MyBatis的比较

  • 相对于MyBatis的“SQL-Mapping”的ORM实现,Hibernate的ORM实现更加完善,提供了对象状态管理、级联操作的功能
  • 完全面向对象,语句与数据库无关,开发者无需关注SQL的生成,开发简单,便于修改,数据库移植性好
  • 由于直接使用SQL,MyBatis使用自由度较高

使用Hibernate的步骤

  1. 下载并部署相关jar文件
  2. 编写Hibernate配置文件
  3. 创建持久化类和映射文件
  4. 使用Hibernate API

准备Hibernate

  • 下载需要的jar文件

    • Hibernate的官方网站 http://hibernate.org
    • 托管网站
      • https://sourceforge.net/projects/hibernate/files/
        • 推荐下载:hibernate-distribution-3.6.10.Final-dist.zip
  • 部署jar文件

    • hibernate3.jar
    • lib\required目录下的jar文件
    • lib\jpa\hibernate-jpa-2.0-api-1.0.1.Final.jar
    • Oracle数据库驱动jar文件
  • 编写Hibernate配置文件

    • 用于配置数据库连接
    • 运行时所需的各种特性
    • 一般命名为“hibernate.cfg.xml”
    <property name="connection.url">jdbc:oracle:thin:@127.0.0.1.1521:orcl</property>
    <property name="connection.username">scott</property>
    <property name="connection.password">tiger</property>
    <property name="connection.dirver_class">oracle.jdbc.OracleDriver</property>
    <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="current_session_context_class">thread</property>
  • 创建持久化类和映射文件

    • 定义持久化类(也称实体类),实现java.io.Serializable接口,添加默认构造方法

      pulbic class Dept implements Serializable{
          private Byte deptNo;
          private String deptName;
          private String location;
          
          public Dept(){}
          
          //省略getter&setter方法
      }
    • 配置映射文件(*.hbm.xml)

      <hibernate-mapping>
      	<class name="cn.hibernatedemo.entity.Dept" table="`DEPT`">
          	<id name="deptNo" column="`DEPTNO`" type="java.lang.Byte">
              	<generator class="assigned"/>
              </id>
              <property name="deptName" type="java.lang.String">
              	<column name="`DNAME`"></column>
              </property>
              <property name="location" type="java.lang.String" column="`LOC`"/>
          </class>
      </hibernate-mapping>
    • 向hibernate.cfg.xml文件中配置映射文件

      <session-factory>
      	<!-- 省略其他配置 -->
          <mapping resource="cn/hibernatedemo/entity/Dept.hbm.xml"/>
      </session-factory>

使用Hibernate API

使用Hibernate实现查询操作

通过主键值加载指定类型的实例

方法区别一
Object get(Class clazz,Serialible id)若数据不存在,返回null
Object load(Class clazz,Serializable id)若数据不存在,使用时抛出ObjectNotFoundException

使用Hibernate实现修改、删除

修改

tx = session.beginTransaction();//开启事务
Dept dept = (Dept) session.load(Dept.class,new Byte("13"));//加载数据
dept.setDeptName("研发部");//修改数据
tx.commit();//提交事务

删除

tx = session.beginTransaction();
Dept dept = (Dept) session.load(Dept.class,new Byte("13"));
session.delete(dept)
tx.commit();

Hibernate中Java对象的三种状态

瞬时状态(Transient):数据库中没有,会话中没有

持久状态(Persistent):数据库中有,会话中有

游离状态(Detached):数据库中有,会话中没有

三种状态之间的转换

[外链图片转存中...(img-gO67D86J-1584434683066)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值