hibernate作为一个完整的ORM映射框架,通过配置即可以让我们从复杂的JDBC操作中脱离出来。hibernate封装了 JDBC,JTA(java transaction API) 和JNDI。hibernate 是一个轻量级的框架,对于开发人员,可以采用它提供的接口进行数据库操作,当然也可以直接绕过hibernate,采用原生JDBC操作。而且当与Spring整合之后,Spring也提供了jdbcTemplate 。所以,使用者最好区分到底用谁的。

hibernate主要接口

   根据图示:configration中获取到sessionfactory,然后sessionfactory中获取session,在获取对应接口执行对应的操作。

在这个地方需要注意的是,sessionfactory是重量级的(用来缓存sql语句之类),session是轻量级的,主要缓存一些java对象。

缓存清理

  java中对象生命周期是从 new开始,终止与没有引用指向。再说一下,session的清理缓存,在某些时间点按照缓存中对象的变化执行sql同步更新数据库,称为清理缓存。

时间点主要有  commit ()   flush() 加上查询的时候,如果存在脏数据也会先清理缓存。

2.1 java对象在session声明周期中的三种形态

new 一个对象 是临时态, session.save()将其持久化,session.close()如果再用该对象该对象实际上是游离态,假如不是session.close()而是session.delete()就会变成删除状态

注意:

  临时态 对象OID为空,

  被删除对象 是计划要删除,执行了tx.xommit()就会被删除

2.2  session相关方法  

  session.save() :不会立即执行insert语句,只有当session清理缓存的时候才会执行insert语句。

        这个地方有个细节就是,session.save()之后在如果在修改值,会产生两条sql语句。一条insert一条update。所以应该先修改完值在save()

  session.update() 也有一个细节点

      session.update()只有在清理缓存的时候才会执行update,所以 下边的代码是一样的

  sesion.saveOrupdate():会根据传入参数是临时态还是游离对象还是持久化对象,选择是save还是update

批量处理数据

    当处理大量数据时,如果还是简单的在应用层一条条调用语句,会导致两个问题。第一个是内存占用过大,第二是效率低下

这种大数据就避免在应用层处理数据,而是直接采用数据库层处理数据。例如直接在数据库层执行批量操作,如果批量操作逻辑复杂,

可以写存储过程(),但是mysql不支持

当然,也可以在应用层做批量处理:
  session:比如每处理20条就手动flush,再session.clear()
  StatelessSession:无状态的session,不会加载到内存
  HQL:根据条件
  JDBC API(我开发中用此方法):涉及数据不会加载到内存,可以实现Work接口

  

【hibernate初探】之接口说明,session使用的更多相关文章

  1. hibernate的五大接口

    Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration .这五个接口构成了Hibernate运行的基本要素 ...

  2. Hibernate的核心接口

    Hibernate5个核心接口 所有Hibernate应用中都会访问Hibernate的5个核心接口 Configuration接口:配置Hibernate,根启动Hibernate,创建Sessio ...

  3. Hibernate五大核心接口简介

    所有的Hibernate应用中都会访问Hibernate的5个核心接口. Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象. Se ...

  4. 慕课网Hibernate初探之一对多映射实验及总结

    慕课网Hibernate初探之一对多映射实验及总结 一.本课核心 * 1.如何在MyEclipse中使用Hibernate * 2.如何实现Hibernate中一对多的映射 * 3.如何创建Sessi ...

  5. Hibernate二次学习二----------session.flush、session.doWork

    目录 1. session 2. session.flush 3. session.doWork 4. 完整代码 5. 总结 © 版权声明:本文为博主原创文章,转载请注明出处 1. session H ...

  6. 写出Hibernate中核心接口/类的名称,并描述他们各自的责任?

    Hibernate的核心接口一共有5个,分别为:Session.SessionFactory.Transaction.Query和 Configuration.这5个核心接口在任何开发中都会用到.通过 ...

  7. Hibernate的懒加载session丢失解决方法

    在web.xml加入spring提供的过滤器,延长session的生命周期 <!--Hibernate的懒加载session丢失解决方法 --> <filter> <fi ...

  8. Hibernate Could not obtain transaction-synchronized Session for current thread问题处理

    项目通过Hibernate查询时报出如下错误: Hibernate Could not obtain transaction-synchronized Session for current thre ...

  9. 07.Hibernate常用的接口和类---Session接口☆☆☆☆☆

    一.特点 Session是在Hibernate中使用最频繁的接口.也被称之为持久化管理器.它提供了和持久化有关的操作,比如添加.修改.删除.加载和查询实体对象 Session 是应用程序与数据库之间交 ...

随机推荐

  1. 使用Dockerfile构建镜像-Docker for Web Developers(5)

    1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...

  2. 开源网络操作系统--VyOS

    User Guide Jump to: navigation, search Contents 1 Introduction 2 Installation 3 Using the Command-Li ...

  3. css3中强大的filter(滤镜)属性

    CSS3中强大的filter(滤镜)属性 博主最近在做网站的过程中发现了一个非常强大的CSS3属性,就是filter(滤镜)属性,喜欢p图的朋友看名字都应该知道这是什么神器了吧.当然,这个属性的效果肯 ...

  4. javaCV图像处理之Frame、Mat和IplImage三者相互转换(使用openCV进行Mat和IplImage转换)

    前言:本篇文章依赖四个jar包,其中javacv.jar,javacpp.jar和opencv.jar为固定jar包,opencv-系统环境.jar为选配(根据自己的系统平台,x64还是x86而定) ...

  5. 利用arpspoof和urlsnarf 进行ARP嗅探

    地址解析协议 (ARP, Address Resolution Protocol) 是如何将网络设备的MAC地址和其IP地址关联起来的,这样在同一个局域网内的设备就能相互知道彼此的存在.ARP基本上就 ...

  6. PyQt5环境搭建及cx_freeze打包exe

    Python的图形库也有好几个,Qt文档和使用面还是要广一些. 打包成可执行文件的也有好几个,PyInstaller用的比较多,但是PyInstaller目前还不支持Python3.6(开发版支持3. ...

  7. Spring学习(15)--- 基于Java类的配置Bean 之 @Bean & @Scope 注解

    默认@Bean是单例的,但可以使用@Scope注解来覆盖此如下: @Configuration public class MyConfiguration { @Bean @Scope("pr ...

  8. 常用SHELL命令

    1.查看版本号cat /proc/version; uname -a; uname -r 2.查看用户组cat /etc/group 3.查看当前用户组 groups 4.查看当前用户 whoami ...

  9. java入门学习笔记之1(类的定义,代码的编译执行)

    这篇文章讲解Java代码的基本执行过程 我们先抛开各种JAVA IDE,开发工具,只使用文本编辑器,以突出最本质的东西. 在Linux环境下,我们编辑一个文件: vim HelloWorld.java ...

  10. go 接口案例,音乐播放器

    manager.go //package main package mlib import "errors" type MusicEntry struct { Id string ...