Hibernate简单学习

Hibernate

什么是ORM

  • ORM(Object/Relationship Mapping):对象关系映射
  1. SQL语句的不好
  • 不同数据库使用的SQL语法不同。
  • 同样的功能在不同的数据库中有不同的实现方式。
  • 程序过分依赖SQL对程序的移植及扩展,维护等带来很大的麻烦

Hibernate简介

  • Java领域的一款开源的ORM框架技术
  • 对JDBC进行了非常轻量级的对象封装
  • 其他ORM框架技术
    • MyBatis
    • Toplink
    • EJB:JAVAEE的规范

编写Hibernate例子

  • 创建Hibernate配置文件 Hibernate.cfg.xml
  • 创建持久化类
  • 创建对象 - 关系映射文件
  • 通过Hibernate API编写访问数据库的代码

创建Hibernate配置文件

<!-- 数据库配置  方言配置 -->

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

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

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

       <property 
name="connection.url">jdbc:mysql:///<u>Hibernate</u>?useUnicode=true&amp;characterEncoding=UTF-8</property>

       <property 
name="dialect">org.Hibernate.dialect.MySQLDialect</property>

       

       <property 
name="show_sql">true</property>

       <property 
name="format_sql">true</property>

       <property 
name="hbm2ddl.auto">create</property>

使用Junit进行测试

  • @Test:测试方法
  • @Before:初始化方法
  • @After:释放资源

通过Hibernate API编写访问数据库的代码

  • 创建配置对象
  • 创建服务注册对象
  • 创建会话工厂对象
  • 打开会话
  • 打开事务

Hibernate进阶

  • Hibernate.cfg.xm常用配置
  • session简介
  • transaction简介
  • session详解
  • 对象关系映射常用配置

Hibernate.cfg.xml常用配置

  • 常见属性
  • Hibernate.show_sql: 输出SQL语句 true
  • Hibernate.format_sql:格式化SQL语句 ture
  • hbm2ddl.auto:可以帮助由java大夫生成数据库脚本,进而生成具体的表结构 cteate| update|create-drop|validate
  • Hibernate.default_schema:默认的数据库
  • Hibernate.dialect:配置Hibernate数据库方言,Hibernate可针对特殊的数据库进行优化

注意:Hibernate的前缀可以省略。即 Hibernate.dialect等同于dialect

session简介

Hibernate执行流程
456_1

不建议直接使用jdbc的connection操作数据库,通过session操作数据库的对象

session与conncetion,是多对一关系,每个session都有一个与之对应的connecion,一个connection不同时刻可以供对各session使用。

调用session各种方法
save() update() delete() createQuery()等

Transaction简介

  • Hibernate对数据的操作都是封装再事务当中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存再数据库中。

  • 如果你想让Hibernate想jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的conncetion后,设置其为自动提交事务模式。(注意:通常不推荐这样做)

  • 不开启事务就不能将对象保存到数据库中!

session详解

  • 如何获得session对象?

    • openSession
    • getCurrentSession
  • getCurrentSession需要再Hibernate.cfg.xml文件中配置

  • 本地事务(jdbc事务)

  • thread

  • 全局事务(jta事务)

  • jta

openSession与getCurrentSession的区别

  • getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出
  • openSession每次创建新的对象,getCurrentSession使用现有的session对象

hbm配置文件常用设置


<id
name=""
type=""
column=""
length=""

/>

主键生成策略

457_1

  • native
  • assigned

Hibernate单表操作

  • 单一主键
  • 基本类型
  • 对象类型
  • 组件属性
  • 单表操作实例
    单一组件
  • assigned由java应用程序负责生成(手工赋值)
  • native 由底层数据库自动生成标识符,如果是MySQL就是increment,如果是Oracle就是sequence等等。

基本类型
458_1
<property中的 type的类型
459_1

对象类型
460_1

  • MySQL不支持标准SQL的CLOB类型,在MySQL中用TEXT,MEDIUMTEXT及LONGTEXT类型来表示长度超过255的长文本数据

组件属性
实体类中的某个属性属于用户自定义的类的对象
461_1

  • Address

单表CRUD操作实例

  • save
  • update
  • delete
  • get/load(查询单个记录)

get与load的区别

  • get方法会在调用之后立即向数据库发出sql语句,load 方法使用时才会发出sql语句
  • get返回持久化对象 , load方法会在调用后返回一个代理对象,该代理对象只保存勒实体对象的id,直到使用对象的非主键属性时才会发出sql语句。
  • 查询数据库中不存在的数据时,get方法返回null,
    load方法返回抛出异常org.Hibernate.ObjectNotFoundException

课程总结

  1. 什么是ORM?为什么要使用Hibernate?
  2. Hibernate开发的基本步骤?
    • 编写配置文档Hibernate.cfg.xml
    • 编写实体类
    • 生成对应实体类的映射文件并添加到配置文档中
    • 调用Hibernate API进行测试
  3. 什么是session?
  4. openSession与getSession?
  5. 单表操作常用方法有哪些?
  6. get与load
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值