Hibernate

全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架

1)、基础概念

DAO(Data Accessor Object):实现数据访问和业务逻辑分离
POIO(Plain Ordinary Java Object):不包含业务逻辑代码的值对象
PO:Persistent Object
VO:Value Object
DTO:Data Transfer Object

2)、Hibernate特点

①对JDBC访问数据库的代码做了轻量级封装,大大简化了数据访问层繁琐的重复性代码,减少内存占用,加快运行效率
②基于JDBC的主流持久化框架,是ORM实现,简化了DAO层编码
③支持很多关系型数据库,从一对一到多对多的复杂关系
④扩展性强,源代码开源,自行编码进行扩展

配置步骤

1)、导包

①数据库驱动
②核心包
③日志包(slf4j、log4j、slf4j-log4j(需注意两者版本相对应))

2)、配置文件

①前置条件
数据库中表结构和类结构相对应
②映射配置文件
xml文件命名规范(类名.hbm.xml),使用DTD进行约束,根元素hibernate-mapping
③核心配置文件
xml文件命名规范(hibernate.cfg.xml),src下,使用DTD进行约束,根元素hibernate-configuration

3)、简单使用

①加载核心配置文件
Configuration con = new Configuration().configure();
②创建SessionFactory对象
con.buildSessionFactory()
③通过SessionFactory获取到Session对象
factory.openSession()
④手动开启事务
session.beginTransaction()
⑤操作
⑥事务提交
transaction.commit();
⑦释放资源
session.close()

涉及到的类

1)、Configuration

①加载核心配置文件
xml文件:new Configuration.configure()
properties文件:new Configuration()
②加载Mapper(在使用properties文件时,无法配置mapper,需使用)
configuration.addResource(“包名/映射文件名”)

2)、SessionFactory

负责初始化Hibernate和创建Session,充当数据源的代理,并不是轻量级的,
一般一个项目只需用一个,一个数据库只需用一个SessionFactory
维护了Hibernate的连接池和二级缓存,是线程安全的
①配置连接池
默认连接池:

需导入c3p0的jar包

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.min_size">value</property>//最小数目
<property name="c3p0.max_size">value</property>//最大数目
<property name="c3p0.timeout">value</property>//连接过期时间(秒),超时清除
<property name="c3p0.idle_test_period">value</property>//检查连接池中空闲连接的时间间隔(秒)

②使用工具类来管理SessionFactory和Configuration(可使用线程绑定)

3)、Session

是一个连接对象,负责被持久化对象的CRUD操作,非线程安全(不能定义为全局)
①增
Serializable save(Object obj);
②查
T get(Class c, Srializable id);
采用立即加载,返回真实对象,查询不到对象返回空
T load(Class c, Srializable id);
采用lazy加载,使用对象(非id属性)时,才会进行查询,返回代理对象(javassist技术),查询不到对象报异常
③改
void update(Object obj);
直接创建对象(不推荐):会将对象中所有属性(除id)进行更新,若有些属性未赋值,会修改为null
先查询,再修改(推荐):先查询,使用对象接收到所有信息,然后对某个信息进行更改后,进行修改
④删
void delete(Object obj);
直接创建对象删除 和 先查询再删除(推荐,可做级联删除)
⑤保存或更新
saveorUpdate(object);//无id保存(瞬时态),有id修改(托管态),有id但不存在,报错

4)、Transaction

管理事务对象,begin(),commit(),rollback()
hibernate5会默认自动提交,但当配置c3p0数据库连接池时,必须配置,
并且hibernate3也不会自动提交,推荐书写。

Hibernate框架 简述相关推荐

  1. Hibernate框架简述

    Hibernate框架简述 Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.propert ...

  2. Hibernate框架(1)

    1.Hibernate框架简述 Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.prope ...

  3. 1.Hibernate框架核心组件 (转自冯岩)

    Hibernate框架核心组件 在Hibernate框架简述中,演示了一个简单的Hibernate应用,但并没有深入说明其中程序,在这篇中将比较详细的介绍一下Hibernate的核心组件. 首先最关键 ...

  4. Hibernate框架第二天

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

  5. hibernate框架int和Integer类型区别

    hibernate 框架在定义实体时,int类型最好定义为Inttger类型,因为在注入时int是值类型不允许为空. 转载于:https://www.cnblogs.com/codespirit/p/ ...

  6. 我的第一个用Hibernate框架写的小例子

    Hibernate框架 今天我来主要讲一下Hibernate框架的配置步骤,在讲之前,我们先了解一下使用框架的优势 1.不再考虑公共问题,框架已经帮我们做好了 2.可以专心于业务逻辑,保证核心业务逻辑 ...

  7. Hibernate框架--学习笔记(上):hibernate项目的搭建和常用接口方法、对象的使用

    一.什么是Hibernate框架: 1.Hibernate是一个操作数据库的框架,实现了对JDBC的封装: 2.Hibernate是一个ORM(对象关系映射)框架,我们在写程序时 ,用的是面向对象的方 ...

  8. SSH框架第一天——hibernate框架

    什么是框架? 是软件的半成品,它已经完成了部分功能. 什么是hibernate? hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程 ...

  9. 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架

    这篇博客是hibernate学习的第一篇,主要简单介绍hibernate框架,之后简单说一下hibernate的目录结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hibern ...

最新文章

  1. LeetCode 35.搜索插入位置
  2. 如何查看Linq to SQL运行时,实际执行的Sql语句
  3. maven打包常用的几个插件
  4. 李开复写给中国学生的七封信之给中国学生的第五封信——你有选择的权利(完)...
  5. ceil与intval区别
  6. 转载构造函数与拷贝构造函数
  7. mysql中profile的使用
  8. 一台服务器上使用docker安装redis6.0.10一主两从以及哨兵模式
  9. MonkeyDevice Class
  10. 【redis】spring boot利用redis的Keyspace Notifications实现消息通知
  11. 最简单的在IntelliJ IDEA导入一个本地项目教程
  12. 可批量查询企业工商数据信息的API
  13. CorelDRAW打造金属质感3D立体按钮教程
  14. 樊登读书会掌控读后感_樊登读书刻意练习读后感
  15. Unreal Engine 4 渲染目标(Render Target)教程 之 使用渲染目标绘制(下)
  16. EasyNVR网页Chrome无插件播放摄像机视频功能二次开发之云台控制接口示例代码
  17. TP6手册理解之架构·服务
  18. 1tb等于多少g 1TB和500G有什么区别
  19. Scrapy学习过程之二:架构及简单示例
  20. Cryptohack刷题记录(一) General部分 WP

热门文章

  1. linux5 vnc,CentOS 5 下安装配置VNC
  2. 【Python】二维数据格式化
  3. C#开发笔记之17-如何用C#深克隆一个对象(传统方案)?
  4. 如何优化Jupyter Notebook
  5. node js 技术架构_[视频] Node JS中的干净架构
  6. 机器学习训练营_如何不运行学习代码训练营
  7. 如何遍历JavaScript中的对象
  8. 程序员为什么觉得会议很无聊_我从100个无聊的会议中学到的难忘的教训
  9. 建立在线社区:Numenta
  10. AnnotationConfigApplicationContext ad has not been refreshed yet 错误