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相关推荐

  1. java面试常见问题之Hibernate总结

    1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象.) Ø  OID检索(按照对象的OID来检索对象.) Ø  HQL检索(使用面向对象的HQL查询语言.) ...

  2. Spring中启用Hibernate二级缓存步骤

    1.在applicationContext.xml配置文件中SessionFactory  bean中配置缓存 <!-- 配置会话工厂对象 --> <bean id="se ...

  3. ssh(Struts+spring+Hibernate)三大框架整合-简述

    ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...

  4. Hibernate框架第二天

    ### Hibernate的持久化类 ### ---------- **什么是持久化类** 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为 ...

  5. Hibernate **关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用**

    之前一直都是使用hibernate4.2.21的我,有一天突然没有使用本地的jar包而是让IDEA自动下载最新版本的hibernate5.2.2之后,发现有几个经常使用的方法报错了. //创建配置对象 ...

  6. 使用hibernate与mysql时数据不能插入的原因及解决办法

    1.背景 之前从没用过hibernate,因此在网上搜了一下hibernate快速入门方面的信息,最后我按照<Myeclipse Hibernate 快速入门 中文版>(CSDN,百度文库 ...

  7. IntelliJ IDEA下自动生成Hibernate映射文件以及实体类

    转自:https://blog.csdn.net/qq_34197553/article/details/77718925 1.构建项目并添加项目结构配置以及配置初始参数 1.1.如图将基本的架子搭建 ...

  8. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

  9. 5 -- Hibernate的基本用法 --2 1 Hibernate 下载和安装

    1. 下载Hibernate压缩包 2. 解压:文件结构 ⊙ documentation : 该路径下存放了Hibernate的相关文档,包括Hibernate的参考文档和API文档等. ⊙ lib ...

  10. Hibernate的一级缓存

    Hibernate的一级缓存 什么是缓存:缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取 缓存的好处:提升程序运行的效率.缓存技术是Hibe ...

最新文章

  1. [转]后期-快速消除痘痘,完美修复MM肌肤
  2. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)...
  3. 完成登录与注册页面的前端
  4. python怎么打开shell界面-使用IDLE的Python shell窗口实例详解
  5. C++接口定义及实现举例
  6. c++ auto 关键字
  7. Spring-AOP 切点/切面类型和创建切面
  8. ASP实现隐藏下载地址和防盗
  9. Python中按指定长度分割字符串并反转
  10. 小程序外接web-view坑------alert显示域名
  11. Spring,FetchType.LAZY和FetchType.EAGER什么区别?
  12. 关于Windows 1803版本内核隔离打开后无法关闭的解决方案
  13. 中期蒙混过关,后期要早点起步4.13-4.19
  14. 补全aaz288 可能有问题的过程 P_COMPL_AAZ288
  15. android系统设置默认字体,如何获取Android设备的默认字体?
  16. mplay readme
  17. Squitd代理服务器安装
  18. 热议!211高校近200名硕博新生开学无宿舍住,需校外租房...
  19. 浅谈执行力文化(zt)
  20. 敏捷遇上UML(深圳 2014.3.15)- 活动报道

热门文章

  1. Golang学习(12)——regex包
  2. 为什么:要嫁就嫁程序猿
  3. HBase源码分析:HTable put过程
  4. 几个jquery分发库速度测评
  5. java中的静态块static{}及this,super,final的用法总结
  6. vue-cli3使用vue-router 使用动态路由,在刷新页面时报错
  7. 软测基础相关知识回顾
  8. springBoot集成Mybatis-Generator
  9. Java Web前后端分离的思考与实践
  10. 操作系统学习---进程