首页 技术 正文
技术 2022年11月8日
0 收藏 524 点赞 2,000 浏览 1315 个字

  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接口

  

上一篇: vijos1011题解
下一篇: Complete
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,086
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,561
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,410
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,183
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,820
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,903