1.只有业务逻辑层出现的问题?
1.切换数据库麻烦
2.sql编写起来麻烦
3.我们的程序员不需要关注数据库,只希望关心业务本身 2.hibernate的好处
1.程序员只关心业务逻辑,使角色更加清楚
2.分层更清楚
3.通用修改更强,适合数据库平台的切换
4.对象化,数据库关系变成java对象关系,更加方便操作
5.性能保证,hiernate可能按照不同的数据库操作,但是会最优sql语句
6.增加程序的鲁棒性。 3.hibernate开放的三种方式
1.有Domain object >> mapping >> db(官方推荐)
2.有DB开始,用工具生成mapping和Domain object。(项目中大部分使用这种,先设计数据库,在建类)
3.由映射文件开始 4.POJO(plain old/ordinary java object简单的java对象)
1.使用POJO名称主要是为了EJB混淆起来
2.有一个主键,用于唯一标识
3.有其他的属性
4.有对应的get/set方法
5.属性一般用private修饰
6.一定有一个无参的构造函数 5.对hibernate而言,在进行更新,删除,查询数据时必须用事务,增加的时候可以不用 6.session.load(Employee.class,id)
1.反射机制 7.hibernate要求domain中的类必须实例化
1.如果不实例化,操作的时候将不知道操作的是那条记录,序列化可以唯一的标识该对象
2.可以在网上传输和文件传输 8.hibernate中重要的类和接口
1.Configuration类:Configuration conf = new Configuration().configure();
2.SessionFactory接口:SessionFactory sf = cfg.buildSessionFaction();现在
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
3.Session接口:
1.Session接口是Hibernate应用使用最广泛的接口。Session也被称为持久化管理器,
它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。
2.不是线程安全的,因此在设计软件架构时,应避免多个线程共享一个Session实例。
3.Session是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。
Session对象通过SessionFactory构建:
4.Session session = SessionFactory.openSession(); 9.对持久化类的理解:
一个持久化类从定义上和一个普通的JavaBean类没有任何区别,但它与Session关联起来,就具有了持久化的能力。
这种持久化操作是受Session控制的,即通过Session对象装载、保存、创建、或查询持久化对象PO。 10.Session类的主要方法:
1.建立查询对象
createQuery()方法:用来从Session生成Query对象。
beginTransaction()方法:用来从Session生成Transaction对象。
2.管理Session的方法:
isOpen(),flush(),clear(),evict()和close()等方法。
3.获取持久化对象:get()和load()方法.
get()方法
public object get(Class entityClass,Serializable id)
entityClass 表明类的类型,id是对象的主键值,如果id是int类型,应通过new Integer(id)的方法把它变成一个Integer对象。
4.load()方法
public object load(Class entityClass,Serializable id)
load()方法和get()方法都能通过主键id值从数据库中加载一个持久化对象PO。
两者的主要区别:当数据库中不存在主键id值,load()方法会抛出org.hibernate.ObjectNotFoundExceptio,get()方法则抛出java.lang.NullPointerException。
5.持久化对象的保存、更新、和删除:
save(),update(),saveOrUpdate()和delete()等方法。 11.理解Sesion的缓存
在Session接口的实现类org.hibernate.impl.SessionImpl中定义了一系列的Java集合,这些Java集合构成了Session的缓存。 12.Session缓存的三大作用
1.减少访问数据库的频率。
2.保证缓存中的对象与数据库中的相关记录可以保持同步。
3.当缓存中的持久化对象存在循环关系时,Session会保证不出现访问对象的死循环,以及由死循环引起的JVM堆栈溢出异常。 13.注意:Session的commit()和flush()方法的区别:
1..flush():清理缓存并执行一系列SQL语句,不提交事务。
2.commit():会先调用flush()方法,然后提交事务。提交事务意味着数据所做的更新被永久保存下来。 14.ORM:对象关系映射 15.openSession()和 getCurrentSession()区别
①采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会
②采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭.
③使用getCurrentSession()需要在hibernate.cfg.xml文件中加入
如下配置:
* 如果使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果使用的是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
简单解释一下jdbc事务和jta事务的区别吧!
hibernate知识点理解的更多相关文章
-
Hibernate知识点整理
一, Hibernate 介绍: Hibernate 只是一个将持久化类与数据库表相映射的工具,每个持久化类实例均对应于数据库表中的一个数据行而已.用户只需直接使用面向对象的方法操作此持久化类实例,即 ...
-
对Hibernate的理解
---恢复内容开始--- 一.面向对象设计的软件内部运行过程可以理解成就是不断创建各种新对象,建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程.不管程序运行的过程和操作怎么样,本 ...
-
hibernate FetchType理解
JPA定义实体之间的关系有如下几种: @OneToOne @ManyToOne @OneToMany @ManyToMany 在定义它们的时候可以通过fetch属性指定加载方式,有两个值: Fetch ...
-
初识Hibernate之理解持久化类
上一篇文章我们简单介绍了Hibernate相关的一些最基本的文件及其作用,并在最后完整的搭建了Hibernate的运行环境,成功的完成了与数据库的映射.但是至于其中的一些更加细节的地方并没有 ...
-
Hibernate知识点总结(一)
前言:学习的过程在于不断的总结与思考,这里记下笔者在学习过程中,所遇到的知识点,增加对框架掌握的熟悉程度. 1.环境的搭建 通过maven可以轻松搭建hibernate的环境. <propert ...
-
Hibernate知识点小结汇总
Hibernate部分 1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的? 为什么要使用 ①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复 ...
-
Hibernate知识点小结(三)-->;一对多与多对多配置
一.多表关系与多表设计 1.多表关系 一对一: 表的设计原则(分表原则): 优化表的性能 基于语意化分表 ...
-
谈谈你对Hibernate的理解
答: 1. 面向对象设计的软件内部运行过程可以理解成就是在不断创建各种新对象.建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管程序运行的过程和操作怎么样,本质上都是要得到一 ...
-
[Hibernate]知识点
本笔记只介绍注解的方法 一.准备工作: a.添加三个pojo类: Product: package pojo; import javax.persistence.*; import java.util ...
随机推荐
-
1046 A^B Mod C
1046 A^B Mod C 基准时间限制:1 秒 空间限制:131072 KB 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Input 3个正整 ...
-
将本地项目上传到Github
将本地项目上传到Github 转载请注明出自天外归云的博客. 前提 已经下载了Git到本地. 创建Repository 首先登陆我的Github页面,在Repositories中New一个并起Repo ...
-
Openstack Ceilometer监控项扩展
Openstack ceilometer主要用于监控虚拟机.服务(glance.image.network等)和事件.虚拟机的监控项主要包括CPU.磁盘.网络.instance.本文在现有监控项的基础 ...
-
JQ无法修改input的type属性的替代解决方法
需要实现的效果:一个输入框,当输入框未获得焦点的时候,显示为 “请输入密码”:当输入内容并失去焦点的时候,输入内容显示为”*****”,如果没有输入仍然显示“请输入密码”: 方法一:使用text,隐藏 ...
-
USACO 4.1 Fence Loops(Floyd求最小环)
Fence Loops The fences that surround Farmer Brown's collection of pastures have gotten out of contro ...
-
GitHub入门与实践
基本命令 git status 工作区状态 git add git commint 暂存区 git push gitHub客户端 下载网址:https://desktop.github.com/ 解决 ...
-
CentOS7.2下Nginx的使用
Nginx的启动 指定配置文件的方式启动 nginx -c /etc/nginx/nginx.conf 对于yum安装的nginx,使用systemctl命令启动 systemctl start ng ...
-
Win7删除文件夹提示找不到该项目无法删除
在使用win7操作系统的过程中,有一些朋友会遇到这种情况,因为某种不明原因,硬盘里面某一个文件夹无法删除,表现为在删除的时候,系统提示找不到该项目,即找不到该文件夹,就像它变成了幽灵一样,看得到却摸不 ...
-
NewLife.Net——网络压测单机1.88亿tps
NewLife.Net压力测试,峰值4.2Gbps,50万pps,消息大小24字节,消息处理速度1.88亿tps! 共集合20台高配ECS参与测试,主服务器带宽6Gbps.100万pps,16核心64 ...
-
PG数据库——视图
视图(View)是从一个或多个表(或视图)导出的表.视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义 ...