背景

  • 持久化技术框架
  • 封装了JDBC做数据库相关功能开发的重复性工作
  • 比如创建连接,关闭连接,把字段逐一映射到属性中等

使用

  • 在数据库中创建表
  • 创建java project
  • 导入hibernate依赖的jar包
  • 创建实体类,映射数据库中的表
  • 配置Product.hbm.xml
    • 在包com.how2java.pojo下创建
    • 用于映射Product类与数据库中表的对应关系
    • <class name="Product" table="product_">:类Product对应表product_
    • <id name="id" column="id">:属性id,映射表里的字段id
    • <generator class="native"> :id的自增长方式采用数据库的本地方式
  • 配置hibernate.cfg.xml
    • 在src目录下创建 hibernate.cfg.xml
    • 配置访问数据库要用到的驱动,url,账号密码等
    • <property name="dialect">org.hibernate.dialect.MySQLDialect</property>:使用MySQL方言
    • <property name="current_session_context_class">thread</property>:设置事务管理方式为每个线程一个事务
    • <property name="show_sql">true</property>:设置是否在控制台显示执行的sql语句
    • <property name="hbm2ddl.auto">update</property>:是否自动更新数据库的表结构
    • <mapping resource="com/how2java/pojo/Product.hbm.xml" />:识别Product实体类
  • 创建Product对象,通过hibernate把这个对象插入到数据库中
    • 获取SessionFactory
    • 通过SessionFactory 获取一个Session
    • 在Session基础上开启一个事务
    • 调用Session的save方法把对象保存到数据库 
    • 提交事务
    • 关闭Session
    • 关闭SessionFactory

注解

  • 本来放在hbm.xml文件里的映射信息,现在不用配置文件做了,改由注解来完成
  • 配置
    • 把hibernate.cfg.xml 中
    • <mapping resource="com/how2java/pojo/Product.hbm.xml" />
    • 改为
    • <mapping class="com.how2java.pojo.Product" />
  • 与xml比较
    • xml:容易编辑,配置比较集中,方便修改;较繁琐,配置文件过多时难以管理(适合大项目)
    • 注解:方便,简洁;分散到各个class文件中,不易维护(适合小项目)

相关概念

  • HQL

    • hibernate专门用于查询数据的语句,相比于SQL更接近于面向对象的思维方式
  • 事务
    • Hibernate的任何对数据有改动的操作,都应该被放在事务里面(都成功,或都失败)
    • 在Mysql中,只有当表的类型是INNODB的时候,才支持事务
  • 延迟加载(lazyload)
    • 属性的延迟加载:只有访问了这个对象的属性,hibernate才会到数据库中进行查询
    • 关系的延迟加载
  • 级联
    • 没有配置级联的时候,删除分类,其对应的产品不会被删除 
    • 配置了恰当的级联,那么删除分类的时候,其对应的产品都会被删除掉
    • 四种类型
      • all:所有操作都执行级联操作
      • none:所有操作都不执行级联操作
      • delete:删除时执行级联操作
      • save-update:保存和更新时执行级联操作 
  • 缓存
    • 一级缓存存放在session上,hibernate默认开启 
    • 二级缓存在SessionFactory上,在hibernate.cfg.xml中开启(hibernate本身不提供,需安装插件如 EhCache)   
  • 乐观锁
    • 处理脏数据问题
    • <version name="version" column="ver" type="int"></version>
    • 增加一个version字段,用于版本信息控制
    • version元素必须紧跟着id后面,否则会出错

  • 连接池

    • 建立数据库连接比较耗时
    • 通常都会采用数据库连接池的技术来建立多条数据库连接,并且在将来持续使用
    • 节约建立数据库连接的时间,应对高并发量场景
    • hibernate本身提供的数据库连接池不推荐使用,一般会使用第三方的数据库连接池,如C3P0 

[Java] Hibernate的更多相关文章

  1. JAVA Hibernate工作原理及为什么要用

    hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...

  2. JAVA Hibernate工作原理及为什么要用(转)

    hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...

  3. Java Hibernate 之 Session 状态

    Session接口是Hibernate向程序提供操纵数据库的最主要接口,是单线程对象,它提供了基本的保存.更新.删除和查询方法.它有一个缓存,保存了持久化对象,当清理缓存时,按照这些持久化对象同步更新 ...

  4. java Hibernate 处理 oracle xmltype类型

    网上关于如何处理oracle xmltype类型的博客很多,我现在分享的是针对具体业务来的,我在oracle数据库entity表中detail插入了一条xmltype类型的数据 xml的详细内容如下: ...

  5. Java Hibernate中的悲观锁和乐观锁的实现

    锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种, ...

  6. java+hibernate+mysql

    实体类News package org.mythsky.hibernatedemo; import javax.persistence.*; @Entity @Table(name="new ...

  7. java Hibernate UUID代码

    package mypack; import java.io.Serializable; import java.net.InetAddress; /** * 唯一主键生成办法.从Hibernate中 ...

  8. Java Hibernate 5.3.x

    SchemeExport Hibernate根据实体类和实体类映射文件自动生成表结构. 示例代码: <?xml version='1.0' encoding='utf-8'?> <! ...

  9. java Hibernate 用法

    Hibernate 用法总结: import java.io.Serializable; import java.sql.SQLException; import java.util.Collecti ...

随机推荐

  1. 论Redis分布式锁的正确使用姿势

    前言 日常开发中,秒杀下单.抢红包等等业务场景,都需要用到分布式锁.而Redis非常适合作为分布式锁使用.本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式.如果有不正确的地方,欢迎大家 ...

  2. 如何在O(1)时间复杂度获取栈中最大值和最小值

    问题描述: 如何在O(1)时间复杂度获取栈中的最大值和最小值? 问题分析: 普通栈规定的push(入栈).pop(出栈).peek(查看栈顶)等操作都只能在栈顶上操作,如果栈中元素是有序的,那么我们就 ...

  3. C#中protobuf-net的编码结构及使用方法

    目录 protobuf-net简介 ProtoBuf编码原理 编码结构 解析一个编码结果 使用方法 参考资料 protobuf-net简介 Protocol Buffer(简称Protobuf) 是 ...

  4. 开源服务器设计总计(plain framework2020年总计)

    2020年注定会被历史铭记,世界遭受着一场前所未有的灾难,这种灾难到现在还在持续.还记得19年末的时候,那时候听到一点点消息,哪里想得到年关难过,灾难来的让人猝不及防.由于疫情防控,2020年感觉转瞬 ...

  5. 使用gradle插件发布项目到nexus中央仓库

    目录 简介 Gradle Nexus Publish Plugin历史 插件的使用 Groovy DSL Kotlin DSL 插件背后的故事 总结 简介 Sonatype 提供了一个叫做开源软件资源 ...

  6. RocketMq(一)初识

    消息中间件基本上是互联网公司必用的一个中间件,为什么要使用MQ,当然是因为能给我们的系统带来很多好处. 消息队列简单来说是一种先进先出的数据结构,先简单认识下. 一.应用场景 消息中间件主要应用场景主 ...

  7. redis实际应用-限流

    为什么要做限流 首先让我们先看一看系统架构设计中,为什么要做"限流". 旅游景点通常都会有最大的接待量,不可能无限制的放游客进入,比如故宫每天只卖八万张票,超过八万的游客,无法买票 ...

  8. zipfile tarfile模块

    zipfile --- 使用ZIP存档 这个模块提供了创建.读取.写入.添加及列出 ZIP 文件的工具 # 创建一个ZipFile对象, 可使用上下文管理 with class zipfile.Zip ...

  9. 1082 Read Number in Chinese

    Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese ...

  10. 从苏宁电器到卡巴斯基第25篇:难忘的三年硕士时光 III

    阴差阳错,走上了讲师的道路 时间已经来到了2015年的1月,我的找工作之路也是屡败屡战,屡战屡败.金山.百度以及腾讯不约而同地不要我,使得我对于自己的未来充满了迷茫.尽管才研二而已,可是对于我这种没有 ...