07.Hibernate常用的接口和类---Session接口☆☆☆☆☆
一.特点
Session是在Hibernate中使用最频繁的接口。也被称之为持久化管理器。它提供了和持久化有关的操作,比如添加、修改、删除、加载和查询实体对象Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心Session是线程不安全的所有持久化对象必须在 session 的管理下才可以进行持久化操作Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处持久化类与 Session 关联起来后就具有了持久化的能力
二.注意
Session不是线程安全的。应避免多个线程使用同一个Session实例Session是轻量级的,它的创建和销毁不会消耗太多的资源。应为每次客户请求分配独立的Session实例Session有一个缓存,被称之为Hibernate的一级缓存。每个Session实例都有自己的缓存
三.常用的方法
1.save
/**
* 测试session.save();
*/
@Test
public void TestSave(){ // 创建session对象
Session session = HibernateUtils.openSession(); // 开启事务
Transaction tr = session.beginTransaction(); // 编写保存代码
Customer c = new Customer();
// c.setCust_id(cust_id); 已经自动递增
c.setCust_name("xx");
c.setCust_mobile("110"); // 保存客户
session.save(c); // 提交事务
tr.commit(); // 释放资源
session.close();
}
2.get(Class,id)
/**
* 测试Session.get(class,id)
*/
@Test
public void TestGet(){ // 创建session对象
Session session = HibernateUtils.openSession(); // 开启事务
Transaction tr = session.beginTransaction(); //查询数据
Customer c = session.get(Customer.class, 1L); System.out.println(c.toString()); // 提交事务
tr.commit(); // 释放资源
session.close();
}
3.delete(obj)
/**
* 测试Session.delete(obj)
* 凡是删除或修改,都先查询在操作
*/
@Test
public void TestDelete(){ // 创建session对象
Session session = HibernateUtils.openSession(); // 开启事务
Transaction tr = session.beginTransaction(); //查询数据
Customer c = session.get(Customer.class, 1L); //删除数据
session.delete(c); // 提交事务
tr.commit(); // 释放资源
session.close();
}
4.update(obj)
/**
* 测试Session.update(obj)
* 凡是删除或修改,都先查询在操作
*/
@Test
public void TestUpdate(){ // 创建session对象
Session session = HibernateUtils.openSession(); // 开启事务
Transaction tr = session.beginTransaction(); //查询数据
Customer c = session.get(Customer.class, 2L); //修改数据
c.setCust_name("YYYY"); //删除数据
session.update(c); // 提交事务
tr.commit(); // 释放资源
session.close();
}
5.saveOrUpdate(obj)
/**
* 测试Session.saveOrUpdate(obj);
* 凡是删除或修改,都先查询在操作
*/
@Test
public void TestSaveOrUpdate(){ // 创建session对象
Session session = HibernateUtils.openSession(); // 开启事务
Transaction tr = session.beginTransaction(); //查询数据
Customer c = session.get(Customer.class, 2L); //修改数据
c.setCust_name("zzzz"); //删除数据
session.saveOrUpdate(c); // 提交事务
tr.commit(); // 释放资源
session.close();
}
6.CreateQuery();
/**
* 测试Session.createQuery();
* 查询表
*/
@Test
public void TestQuery(){ // 创建session对象
Session session = HibernateUtils.openSession(); // 开启事务
Transaction tr = session.beginTransaction(); //创建查询接口
Query qr = session.createQuery("from Customer"); List<Customer> list = qr.list();
for (Customer customer : list) {
System.out.println(customer.toString());
} // 提交事务
tr.commit(); // 释放资源
session.close();
}
07.Hibernate常用的接口和类---Session接口☆☆☆☆☆的更多相关文章
- JAVA面向对象-----接口与类、接口之间的关系
接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...
- 数据结构-List接口-LinkedList类-Set接口-HashSet类-Collection总结
一.数据结构:4种--<需补充> 1.堆栈结构: 特点:LIFO(后进先出);栈的入口/出口都在顶端位置;压栈就是存元素/弹栈就是取元素; 代表类:Stack; 其 ...
- 列举Java中常用的包、类和接口
常用的类: BufferedReader ,BufferedWriter FileReader ,FileWirter String ,Integer Date ,Cla ...
- java ee开发常用类和接口
1.javax.Validation接口,做mvc传入数据验证用 2.javax.servlet接口 3.javax.datasource接口 4.javax.session接口 5.javax.ht ...
- JavaWeb学习——Servlet相关的接口和类
JavaWeb学习——Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类. Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servle ...
- java类,接口浅谈
一般类,抽象类,接口的使用场景: 类;共同的特征和行为的抽取和封装 接口:标准,规范(功能的扩展) 需要对某个类进行功能的扩展,就让某个类实现这个接口,抽取出来称为接口 内部类: ...
- C# 为什么用接口实例化一个实现该接口的类?
这是多态的体现. 首先接口不能实例化的. 实现接口的类 实例 = new 实现接口的类()// 这样用不好吗? //这样已经不是好不好的问题了,这样的话,要接口有什么用?//用接口就是让实例和实现类的 ...
- Spring MVC学习------------核心类与接口
核心类与接口: 先来了解一下,几个重要的接口与类. 如今不知道他们是干什么的没关系,先混个脸熟,为以后认识他们打个基础. DispatcherServlet -- 前置控制器 HandlerMap ...
- Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案
多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...
随机推荐
- vagrant virtualbox 导入已导出的包和导出笔记
导入 安装好virtualbox,vagrant软件之后, 将预先打包的 box 镜像导入到 vagrant 中 命令格式 vagrant box add <name> <boxpa ...
- Hadoop配置lzo
编译: 0. 环境准备 maven(下载安装,配置环境变量,修改sitting.xml加阿里云镜像) gcc-c++ zlib-devel autoconf automake libtool 通过yu ...
- Sqlite多线程相关整理
Sqlite多线程相关整理 Sqlite With MultiThreads 什么是线程安全? 当多个线程访问某个方法时,不管你通过怎样的调用方式.或者说这些线程如何交替地执行,我们在主程序中不需要去 ...
- ThinkPHP角色控制时的错误
1.Table 'think.think_user' doesn't exist 等的原因是因为'DB_PREFIX' => 'think_', // 数据库表前缀没有配置好,在使用角色控制时 ...
- (1)python tkinter-窗体
1.导入自带的包名 import tkinter 2.创建一个窗体对象 form=Tkinter.Tk() 3.显示窗体(这句应该是所有的设置部署完最后执行的一句代码) form.mainloop() ...
- iOS开发JSON字符串和字典互转
1.相关属性简述 NSJSONReadingOptions读取属性: typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions) { NSJSONRead ...
- 4_8.springboot2.x嵌入式servlet容器启动原理解析
问题描述: 什么时候创建嵌入式的Servlet容器工厂? 什么时候获取嵌入式的Servlet容器并启动Tomcat? *获取嵌入式的Servlet容器工厂: 1).SpringBoot应用启动运行ru ...
- TIB、TEB 信息
https://en.wikipedia.org/wiki/Win32_Thread_Information_Block 这是重点 Position Length Windows Versions D ...
- windows10 家庭版 无法远程2012的解决
windows 10安装最新补丁后无法远程windows server 2008.2012服务器 报错信息如下:出现身份验证错误,要求的函数不受支持 可能是由于CredSSP加密Oracle修正. ...
- [JZOJ4639] 【NOIP2016提高组A组7.16】Angel Beats!
题目 描述 题目大意 给你一棵树,每次询问两个点,求出这两个点的子树的重心到其中每个点的距离和. 重心的定义是到其中每个点距离和最小的点(不一定在两棵子树内) 思考历程 想想以前我是怎么求重心的呢-- ...