使用Hibernate
1、Hibernate框架设计原理
1)设计原理
Hibernate采用ORM思想对JDBC进行封装,Hibernate框架是ORM思想的一种实现,解决对象和数据库数据映射问题
Hibernate提供一系列API,允许我们直接访问实体对象,然后根据ORM映射关系,转换成SQL去执行,从而达到访问数据库的目的。
2)ORM思想
ORM(Object Relation Mapping)即对象关系映射,指的是Java对象和关系数据库之间的映射。
ORM思想,就是将对象与数据库进行相互转换的思想,不同的框架/技术实现ORM的手段不同,但更多的是采用配置+反射的方式实现。
2、Hibernate框架体系结构
1)主配置文件
Hibernate的主配置文件是一个XML文件,通常命名为 hibernate.cfg.xml ,此文件可以配置数据库连接参数、Hibernate框架参数、及映射关系文件
2)实体类
实体类是数据库表对应的Java类型,它是用于封装数据库记录的对象类型。
3)映射关系文件
映射关系文件指定实体类和数据库表的对应关系,即类中的属性和表中的字段之间的对应关系。
Hibernate使用XML文件来描述映射关系,文件通常命名为“实体类.hbm.xml”,存放在实体类相同的路径下。
3)底层API
Hibernate提供一系列的底层API,基于ORM思想对数据库进行访问,API主要是对映射关系文件的解析,根据解析出来的内容动态生成SQL语句,自动将属性和字段关系映射。
3、如何使用Hibernate
1)Hibernate常用的API
Configuration:负责加载主配置文件信息,同时加载映射关系文件信息
SessionFactory:负责创建Session对象
Session:数据库连接会话,负责执行增删改查操作
Transaction:负责事务控制
Query:负责执行特殊查询
2)Hibernate使用步骤
a.先导入Hibernate 的jar包,及数据库驱动包
b.引入Hibernate主配置文件hibernate.cfg.xml
c.创建实体类
d.创建映射关系文件(存放于实体类相同路径下,通常命名为“实体类.hbm.xml”)
e.使用Hibernate常用API执行增删改查操作
4、Hibernate映射类型
Hibernate提供6种映射类型,书写时全小写,对应转换如下:
映射类型 | Java类型 | 数据库类型 | |
整数 | byte | java.liang.Byte | number(m) |
short | java.lang.Short | number(m) | |
integer | java.lang.Integer | number(m) | |
long | java.lang.Long | number(m) | |
小数 | float | java.lang.Float | number(m,n) |
double | java.lang.Double | number(m,n) | |
字符串 | string | java.lang.String | varchar() |
日期(年月日) | date | java.util.Date或java.sql.Date | date |
时间(年月日时分秒) | time | java.sql.Timestamp | date |
布尔 | yes/no | boolean或java.lang.Boolean | char(1)('Y'or'N') |
true/false | boolean或java.lang.Boolean | char(1)('T'or'F') |
5、Hibernate主键生成方式
1)sequence:采用序列方式生成主键,适用于Oracle,其配置语法:
<generator class="sequence"> <param name="sequence">序列名</param></generator>
2)identity:采用数据库自增长机制生成主键,适用于数据库支持自动递增,其配置语法:
<generator class="increment"></generator>
注意:这种方式在并发量高时存在问题,可能会出现重复的主键。
3)assigned:是Hibernate不负责生成主键,需要开发者自己处理主键的生成,其配置语法:
<generator class="assigned"></generator>
4)uuid/hilo:采用uuid或hilo算法生成一个主键值,是一个不规则的长数字,其配置语法:
<generator class="uuid"></generator>
注意:这种方式生成的主键值可以保证不重复,但是没有规律,不能按主键值排序。
5)native:根据当前配置的数据库方案,自动选择sequenec或identity,其配置语法:
<generator class="native"> //注意:如果Oracle,需要制定序列名 <param name="sequence">序列名</param></generator>
6)increment:不是采用数据库自身的机制来生成主键,而是Hibernate提供的一种生成主键的方式,它会取当前表中主键的最大值,然后加1作为新的主键值,其配置语法:
<generator class="increment"></generator>
注意:这种方式在并发量高时存在问题,可能会出现重复的主键。
转载于:https://www.cnblogs.com/xslzwm/p/9564115.html
使用Hibernate相关推荐
- java面试常见问题之Hibernate总结
1 Hibernate的检索方式 Ø 导航对象图检索(根据已经加载的对象,导航到其他对象.) Ø OID检索(按照对象的OID来检索对象.) Ø HQL检索(使用面向对象的HQL查询语言.) ...
- Spring中启用Hibernate二级缓存步骤
1.在applicationContext.xml配置文件中SessionFactory bean中配置缓存 <!-- 配置会话工厂对象 --> <bean id="se ...
- ssh(Struts+spring+Hibernate)三大框架整合-简述
ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...
- Hibernate框架第二天
### Hibernate的持久化类 ### ---------- **什么是持久化类** 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为 ...
- Hibernate **关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用**
之前一直都是使用hibernate4.2.21的我,有一天突然没有使用本地的jar包而是让IDEA自动下载最新版本的hibernate5.2.2之后,发现有几个经常使用的方法报错了. //创建配置对象 ...
- 使用hibernate与mysql时数据不能插入的原因及解决办法
1.背景 之前从没用过hibernate,因此在网上搜了一下hibernate快速入门方面的信息,最后我按照<Myeclipse Hibernate 快速入门 中文版>(CSDN,百度文库 ...
- IntelliJ IDEA下自动生成Hibernate映射文件以及实体类
转自:https://blog.csdn.net/qq_34197553/article/details/77718925 1.构建项目并添加项目结构配置以及配置初始参数 1.1.如图将基本的架子搭建 ...
- Spring Hibernate JPA 联表查询 复杂查询
(转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...
- 5 -- Hibernate的基本用法 --2 1 Hibernate 下载和安装
1. 下载Hibernate压缩包 2. 解压:文件结构 ⊙ documentation : 该路径下存放了Hibernate的相关文档,包括Hibernate的参考文档和API文档等. ⊙ lib ...
- Hibernate的一级缓存
Hibernate的一级缓存 什么是缓存:缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取 缓存的好处:提升程序运行的效率.缓存技术是Hibe ...
最新文章
- [转]后期-快速消除痘痘,完美修复MM肌肤
- 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)...
- 完成登录与注册页面的前端
- python怎么打开shell界面-使用IDLE的Python shell窗口实例详解
- C++接口定义及实现举例
- c++ auto 关键字
- Spring-AOP 切点/切面类型和创建切面
- ASP实现隐藏下载地址和防盗
- Python中按指定长度分割字符串并反转
- 小程序外接web-view坑------alert显示域名
- Spring,FetchType.LAZY和FetchType.EAGER什么区别?
- 关于Windows 1803版本内核隔离打开后无法关闭的解决方案
- 中期蒙混过关,后期要早点起步4.13-4.19
- 补全aaz288 可能有问题的过程 P_COMPL_AAZ288
- android系统设置默认字体,如何获取Android设备的默认字体?
- mplay readme
- Squitd代理服务器安装
- 热议!211高校近200名硕博新生开学无宿舍住,需校外租房...
- 浅谈执行力文化(zt)
- 敏捷遇上UML(深圳 2014.3.15)- 活动报道