Hibernate简介
笔记网址:https://blog.youkuaiyun.com/c99463904/article/details/72794787
Hibernate是一个什么样的框架: 它是一个持久化的框架。
Hibernate的作用:它主要是访问数据库的
优缺点
Hibernate与MyBatis作比较
MyBaits:SQL映射,重心在SQL语句的管理,对象的方面并没有提供过多的设计。--简化版的ORM
Hibernate:面向对象的实现,除了提供封装基本功能之外,还提供了在基础上的一些对象状态的维护以及对象的级联操作的附加功能。
配置Hibernate框架
官方地址:https://sourceforge.net/projects/hibernate/files/hibernate3/3.6.10.Final/
解压出来的目录:
1.Documentation:文档 2.Lib:jar
3.project源码等学习资源
Hibernate3:这个是Hibernate核心的操作文件
hibernate-jpa-2.0-api-1.0.1.Final这个是提供Java标注持久化API的支持
jta-1.1.jar
javassist-3.12.0.GA.jar
dom4j-1.6.1.jar
Commons-collections-3.1jar
antlr-2.7.6.jar
slf4j-api-1.6.1jar:这个作用是通过一套同意的API来实现不同系统的兼容
Ojdbc.6这个是Oracle数据库的JDBC驱动
XML在哪里找:E:\Util\La Dependencia\Hibernate\hibernate-distribution-3.6.10.Final-dist\hibernate-distribution-3.6.10.Final\project\etc 里面的hibernate.cfg.xml
手动引入:
找DTD文件:E:\Util\La Dependencia\Hibernate\hibernate-distribution-3.6.10.Final-dist\hibernate-distribution-3.6.10.Final\project\hibernate-core\src\main\resources\org\hibernate
Hbm.XML文件
<!-- 这个文件主要是把持久化类和数库的表进行关联 -->
<!--name的值pojo持久化文件 ,,table的值是对应数据库中的表名,要加上`` -->
lazy代表延时加载,lazy=false,代表不延时,如果对象A中还有对象B的引用,会在A的xml映射文件中配置b的对象引用,多对一或一对多,不延时代表查询出对象A的时候,会把B对象也查询出来放到A对象的引用中,A对象中的B对象是有值的。如果lazy=true,代表延时,查询A对象时,不会把B对象也查询出来,只会在用到A对象中B对象时才会去查询,默认好像是false,你可以看看后台的sql语句的变化就明白了,一般需要优化效率的时候会用到。
生成器: 主键OID 可以配置主键生成器:
主键的生成器 class=生成器的名字 sequence序列
<generator class="sequence"> Oracle
主键生成器 class=生成器名字 identity自动增长
<generator class="identity "> MySQl
主键生成器class=生成器名字 通过方言自动配置
<generator class="identity ">******推存*********
了解一下即可,查询数据库最大值+1变成给你的这个ID来使用
<generator class="increment">
这个主键的值由应用程序来负责的并不依托数据库的机制
<generator class="assigned">
Oracle通用唯一识别码,运算规则通过IP地址虚拟机的序号当前时间以及一个随机数,生成一个32位长度的字符串,产生全球唯一的序列号
<generator class="uuid">
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP
官方地址:https://sourceforge.net/projects/hibernate/files/hibernate3/3.6.10.Final/
解压出来的目录:
1.Documentation:文档 2.Lib:jar
3.project源码等学习资源
所需要的包
Hibernate3:这个是Hibernate核心的操作文件
hibernate-jpa-2.0-api-1.0.1.Final这个是提供Java标注持久化API的支持
jta-1.1.jar
javassist-3.12.0.GA.jar
dom4j-1.6.1.jar
Commons-collections-3.1jar
antlr-2.7.6.jar
slf4j-api-1.6.1jar:这个作用是通过一套同意的API来实现不同系统的兼容
Ojdbc.6这个是Oracle数据库的JDBC驱动
搭建hibernate入门
1.下载并部署jar文件 -----引入项目中jar
*2.编写Hibernate配置文件----- 连接数据库的一些信息,还有Hidernate运行时一
些参数,以及一个比较重要的Hidernate映射文件中的内容。 **3.创建持久类和映射文件 -----持久化类理解为实体类,主要和数据库中的表进行一
个对应,映射文件:把一个类和一张表关联起来。
4.使用Hibernate API
实现添加步骤
第一步:加载hibernate核心配置文件
Configuration cfg=new Configuration();
Cfg.configure();
第二步:创建SessionFactory对象
第三步:使用SessionFaceory创建session对象
第四部:开启事务
第五步:写具体逻辑crod操作
第六步:提交事务:要么都成功要么都失败
第七部:关闭资源
Hibernate配置文件详解
Hidernate映射配置文件
- 映射配置文件名称和位置没有固定要求
- 映射配置文件中,标签name属性值写实体类相关内容
- class标签name属性值实体类的全路径
- id标签和property标签name属性值 实体类中属性名称
- id标签和property标签column属性可以省略的
- 不写值和name属性值是一样的
- Property标签type属性,设置生成表字段类型,自动生成对应类型
Hidernate核心配置文件
1..配置写位置要求
2. 配置三部分要求
(1)数据库部分必须的
(2)hibernate部分是可选的
(3)映射文件必须的
3.核心配置文件名称和位置固定的
(1)位置:src下面
(2)名称:hibernate.cfg.xml
Hibernate核心API
Configuration
(1) 到src下面找到名称Hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)
SessionFactory(重点)
- 使用confuration对象创建sessionFactory对象
- 创建sessionFactory过程中做事情
-根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建
- 创建sessionFactory过程中,这个过程特别耗资源的
- 在Hibernate操作中,建议一个项目一般创建一个sessionFactory对象
- 具体实现
- 写工具类,写静态代码块实现
-静态代码块在类加载时候执行,执行一次
Session(重点)
- session类似于jdbc中connection
- 调用session里面不同的方法实现crud操作
- 添加 save方法
- 修改 update方法
- 删除 delete方法
- 根据id查询get方法
- Session对象单线程对象
- Session对象不能共用,只能自己使用-----一个工具叫进程,工具里面的叫线程
Trasaction
- 事务对象
- 事务提交和回滚方法
- 事务概念
- 事务四大特性:
原子性、一致性、隔离性、持久性
解决配置文件没有提示问题
- 可以上网
- 把约束文件引入 MyEcplise中
- 在配置文件中复制一句话
重启MyEclipse开发工具
实体类编写规则
- 实体类里面属性私有的
- 私有属性使用公开的的set和get方法操作
- 要求实体类有属性作为唯一值(一般使用id值)
- 实体类属性建议不使用基本数据类型,使用基本类型数据的包装类
- 八个基础数据类型对应的包装类
-int-Integer
-char-Character
-其他的都是首字母大写 比如 double-Double
(2) 比如 表示学生分数,假如 int score;
-比如学生得了0分,int score=0;
-如果表示学生没有参加考试,int score=0;不能准确表示学生是否参加考试
解决:使用包装类就可以了,Integer score=0;表示学生得了0分
表示学生没有参加考试,Integer score=null;
Hibernate主键生成策略
- hibernate要求实体类里面有一个属性作为唯一值,对应表主键,主键可以不同生成策略
- hibernate 主键生成策略有很多的值
- 在class属性里面
- native:根据使用的数据库帮助选择哪个值
- uuid:之前web阶段写代码生成uuid值,hibernate帮我们生成uuid值
- 演示生成策略值 uuid
- 使用uuid 生成策略,实体类id属性类型 必须 字符串类型
- 配置部分写出uuid值
实体类操作
对实体类curd操作
添加操作
- 调用session里面save方法实现
- 根据id查询
个人心得
禁止转载!!!