[Java] Hibernate
背景
- 持久化技术框架
- 封装了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的更多相关文章
- JAVA Hibernate工作原理及为什么要用
hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...
- JAVA Hibernate工作原理及为什么要用(转)
hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...
- Java Hibernate 之 Session 状态
Session接口是Hibernate向程序提供操纵数据库的最主要接口,是单线程对象,它提供了基本的保存.更新.删除和查询方法.它有一个缓存,保存了持久化对象,当清理缓存时,按照这些持久化对象同步更新 ...
- java Hibernate 处理 oracle xmltype类型
网上关于如何处理oracle xmltype类型的博客很多,我现在分享的是针对具体业务来的,我在oracle数据库entity表中detail插入了一条xmltype类型的数据 xml的详细内容如下: ...
- Java Hibernate中的悲观锁和乐观锁的实现
锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种, ...
- java+hibernate+mysql
实体类News package org.mythsky.hibernatedemo; import javax.persistence.*; @Entity @Table(name="new ...
- java Hibernate UUID代码
package mypack; import java.io.Serializable; import java.net.InetAddress; /** * 唯一主键生成办法.从Hibernate中 ...
- Java Hibernate 5.3.x
SchemeExport Hibernate根据实体类和实体类映射文件自动生成表结构. 示例代码: <?xml version='1.0' encoding='utf-8'?> <! ...
- java Hibernate 用法
Hibernate 用法总结: import java.io.Serializable; import java.sql.SQLException; import java.util.Collecti ...
随机推荐
- 自动统计zabbix过去一周监控告警
# -*- coding:utf-8 -*-import jsonimport requestsimport time,datetimeimport csv,chardetdef getToken(u ...
- 谷歌SRE运维模式解读
谷歌SRE运维模式解读 前面我和你分享了一些关于运维组织架构和协作模式转型的内容,为了便于我们更加全面地了解先进的运维模式,今天我们再来谈一下谷歌的SRE(Site Reliability Engin ...
- 通过lms.samples熟悉lms微服务框架的使用
经过一段时间的开发与测试,终于发布了Lms框架的第一个正式版本(1.0.0版本),并给出了lms框架的样例项目lms.samples.本文通过对lms.samples的介绍,简述如何通过lms框架快速 ...
- 深入Spring Security魔幻山谷-获取认证机制核心原理讲解(新版)
文/朱季谦 本文基于Springboot+Vue+Spring Security框架而写的原创学习笔记,demo代码参考<Spring Boot+Spring Cloud+Vue+Element ...
- 给我一个shell我能干翻你内网
0x00 前言 在去年小菜鸡学了点内网知识就闲着没事跑点jboss的站看看,在经历过很多次内网横向失败之后终于算是人生圆满了一把,阿三的站一般进去之后很难横向,不知道是不是我太菜的原因,反正阿三的站能 ...
- BUAA_OO_2020_第三单元总结
BUAA_OO_2020_第三单元总结 JML理论基础 简介 JML(Java Modeling Language)是一种用于对JAVA程序进行规格化设计的语言,其通过定义接口所包含方法的行为,来约束 ...
- 消息队列高手课,带你从源码角度全面解析MQ的设计与实现
消息队列中间件的使用并不复杂,但如果你对消息队列不熟悉,很难构建出健壮.稳定并且高性能的企业级系统,你会面临很多实际问题: 如何选择最适合系统的消息队列产品? 如何保证消息不重复.不丢失? 如果你掌握 ...
- antd+react项目迁移vite的解决方案
antd+react+webpack往往是以react技术栈为主的前端项目的标准组合,三者都有成熟的生态和稳定的表现,但随着前端圈的技术不断革新,号称下一代构建平台vite2的发布,webpack似乎 ...
- 《深入理解计算机系统》学习笔记整理(CSAPP 学习笔记)
简介 本笔记目前已包含 CSAPP 中除第四章(处理器部分)外的其他各章节,但部分章节的笔记尚未整理完全.未整理完成的部分包括:ch3.ch11.ch12 的后面几小节:ch5 的大部分. 我在整理笔 ...
- 一次死锁导致CPU异常飘高的整个故障排查过程
目录 一.问题详情 top 命令截图 联系腾讯云排查 检查系统日志发现异常 二. 问题解析 三.问题原因 最终结论 四.扩展 进程的几种状态 马后炮 如何快速清理僵尸进程(Z) 内核参数相关 如何查看 ...