我们知道hibernate的核心就是对数据库的操作,里面的核心接口就是org.hibernate.Session接口。要想对数据库操作我们就要理清楚对象在整个操作中的所属的状态(Transient,Persistent,Detached)。就像马士兵老师在视频中所说的,我们并不必死抠这些字眼,我们通过自己编写测试类就可以他们之间不同的区别。

其实三种状态各自的不必总结那么多,只是一个重要的地方就是Transient状态里面的对象是没有id的。
session中常用的方法是save(),update(),saveOrUpdate(),get(),load(),delete(),clear(),flush()这些
其中大学期间我其实对get和load方法都不是太熟悉,死记硬背才在考试中答题,现在想起完全没有这个必要。我们可以根据配置好的hibernate环境来进行junit测试。
首先我们进行get()方法进行测试。
这里我们首先建立一个实体类,StudentEntity.Java 和数据库中student所对应
package com.cwnu.entities;
import javax.persistence.*;
import java.io.Serializable;
/**
* Created by yangy on 2015/12/19.
*/
@Table(name = "student")
@Entity
public class StudentEntity implements Serializable{
private int id;
private String name;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
junit类都是idea编译环境给我们配置好了,这里我们要注意,要使用getCurrentSession()来操作的话,我们首先要在Junit类中加上@Transaction注解,下面是相关的测试方法:
@Test
public void testGetOrLoad() {
Session session = sessionFactory.getCurrentSession();
StudentEntity student = (StudentEntity)session.get(StudentEntity.class, 1);
//StudentEntity student_load = (StudentEntity)session.load(StudentEntity.class,1); String name = student.getName();
}
先测试get方法,我们发现一旦我们只是拿student这个实体操作,get方法是会输出相关的sql查询语句的,而我们注释掉get方法,换load方法的话,load方法执行拿student这个实体的数据是没有输出相应的sql语句的。但是我们在对student类进行操作的时候,这时才输出相关的语句.
所以我们看出get()和load()之间的差别:
get()每次执行都会执行sql语句,不会延迟。load()方法只是会在我们对拿到的实体进行操作的时候才去执行查询,拿到相应的实体信息。load方法返回的是一个代理对象(马士兵老师视频)。无论是get还是load首先都会查一级缓存(session)中有没有相应的对应值,如果没有,再去数据库进行查找。
clear()方法是对session里面的缓存进行了清理,测试这个方法我们可以根据下面的Junit进行测试:
@Test
public void testClear() {
Session session = sessionFactory.getCurrentSession();
session.get(StudentEntity.class,1);
session.clear();
session.get(StudentEntity.class,1);
}
如果我们把session.clear()注释掉的话,我们就可以看到只执行了一条sql语句
flush()方法是是对数据库同步的一条语句,执行完这个后立即刷新到数据库。粗浅的来看哈,其实里面还是有很多东西,比如FlushMode这个类,我们默认设置的是FlushMode.AUTO,这个一般不修改,只是为了以后的性能调优。其实我们在执行事务的时候,事务完成之后它会帮我们执行flush()方法。只是我们在进行大规模插入的时候,我们经常可以看到下面的操作:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) {
//20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}}
tx.commit();session.close();
这样做的目的就是避免大量插入,造成session里面内存溢出,所以我们定时清理一下就可以避免这个问题。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# hibernate
# session
# Hibernate的Session_flush与隔离级别代码详解
# Hibernate中Session增删改查操作代码详解
# Hibernate中获取Session的两种方式代码示例
# hibernate通过session实现增删改查操作实例解析
# 快速了解Hibernate中的Session
# 简介Java的Hibernate框架中的Session和持久化类
# Hibernate管理Session和批量操作分析
# hibernate关于session的关闭实例解析
# 的是
# 可以根据
# 就可以
# 进行测试
# 都是
# 好了
# 就像
# 死记硬背
# 有很多
# 那么多
# 中有
# 给我们
# 会在
# 这个问题
# 要在
# 要注意
# 要想
# 这样做
# 如果没有
# 可以看到
相关文章:
开心动漫网站制作软件下载,十分开心动画为何停播?
C#如何序列化对象为XML XmlSerializer用法
网站制作公司排行榜,四大门户网站排名?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
太平洋网站制作公司,网络用语太平洋是什么意思?
公司网站制作价格怎么算,公司办个官网需要多少钱?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何高效搭建专业期货交易平台网站?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
建站之星代理平台如何选择最佳方案?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
家具网站制作软件,家具厂怎么跑业务?
建站主机空间推荐 高性价比配置与快速部署方案解析
公司门户网站制作流程,华为官网怎么做?
如何在IIS中新建站点并配置端口与IP地址?
网站制作公司排行榜,抖音怎样做个人官方网站
高性能网站服务器部署指南:稳定运行与安全配置优化方案
建站之星与建站宝盒如何选择最佳方案?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
潮流网站制作头像软件下载,适合母子的网名有哪些?
h5网站制作工具有哪些,h5页面制作工具有哪些?
建站之星伪静态规则如何正确配置?
如何通过西部建站助手安装IIS服务器?
网站网页制作专业公司,怎样制作自己的网页?
济南网站制作的价格,历城一职专官方网站?
如何在Golang中使用replace替换模块_指定本地或远程路径
如何选择美橙互联多站合一建站方案?
股票网站制作软件,网上股票怎么开户?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
建站主机SSH密钥生成步骤及常见问题解答?
建站主机CVM配置优化、SEO策略与性能提升指南
已有域名如何免费搭建网站?
高防服务器如何保障网站安全无虞?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
昆明高端网站制作公司,昆明公租房申请网上登录入口?
如何在万网ECS上快速搭建专属网站?
制作网站的模板软件,网站怎么建设?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
建站之星如何优化SEO以实现高效排名?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
建站上传速度慢?如何优化加速网站加载效率?
海南网站制作公司有哪些,海口网是哪家的?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
金*站制作公司有哪些,金华教育集团官网?
如何彻底卸载建站之星软件?
建站主机无法访问?如何排查域名与服务器问题
*请认真填写需求信息,我们会在24小时内与您取得联系。