一.特点

  • 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接口☆☆☆☆☆的更多相关文章

  1. JAVA面向对象-----接口与类、接口之间的关系

    接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...

  2. 数据结构-List接口-LinkedList类-Set接口-HashSet类-Collection总结

    一.数据结构:4种--<需补充> 1.堆栈结构:     特点:LIFO(后进先出);栈的入口/出口都在顶端位置;压栈就是存元素/弹栈就是取元素;     代表类:Stack;     其 ...

  3. 列举Java中常用的包、类和接口

    常用的类: BufferedReader ,BufferedWriter FileReader    ,FileWirter String      ,Integer Date        ,Cla ...

  4. java ee开发常用类和接口

    1.javax.Validation接口,做mvc传入数据验证用 2.javax.servlet接口 3.javax.datasource接口 4.javax.session接口 5.javax.ht ...

  5. JavaWeb学习——Servlet相关的接口和类

    JavaWeb学习——Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类. Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servle ...

  6. java类,接口浅谈

    一般类,抽象类,接口的使用场景: 类;共同的特征和行为的抽取和封装 接口:标准,规范(功能的扩展)         需要对某个类进行功能的扩展,就让某个类实现这个接口,抽取出来称为接口   内部类: ...

  7. C# 为什么用接口实例化一个实现该接口的类?

    这是多态的体现. 首先接口不能实例化的. 实现接口的类 实例 = new 实现接口的类()// 这样用不好吗? //这样已经不是好不好的问题了,这样的话,要接口有什么用?//用接口就是让实例和实现类的 ...

  8. Spring MVC学习------------核心类与接口

    核心类与接口: 先来了解一下,几个重要的接口与类. 如今不知道他们是干什么的没关系,先混个脸熟,为以后认识他们打个基础. DispatcherServlet   -- 前置控制器 HandlerMap ...

  9. Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...

随机推荐

  1. Java int和Integer包装类的区别和比较

    区别:                                                                                                  ...

  2. 一个切图仔的 CSS 笔记

    1,flexbox~注意,设为 Flex 布局以后,子元素的float.clear和vertical-align属性将失效. 在ios8上要加上前缀 display: -webkit-box; dis ...

  3. 期望dp+高斯消元——bzoj3143

    比较经典的题,题解看网上的..https://www.cnblogs.com/GXZlegend/p/7054536.html 自己sort弄错了..还以为是高斯消元写歪了.. #include< ...

  4. Android_Gallery(画廊)

    转:http://blog.csdn.net/tianjf0514/article/details/7521398 Gallery是画廊的意思,可以实现图片的浏览功能. 主要内容 Gallery控件的 ...

  5. class.forname & classloader

    From https://www.cnblogs.com/gaojing/archive/2012/03/15/2413638.html 传统的使用jdbc来访问数据库的流程为: Class.forN ...

  6. LightOJ-1007-Mathematically Hard-欧拉函数打表+前缀和+预处理

    Mathematically some problems look hard. But with the help of the computer, some problems can be easi ...

  7. pip install mysql-python报错1. Unable to find vcvarsall.bat 2 fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory 3.error: command 'mt.exe' failed with exit statu

    最近在安装mysql -python 时报错折腾了半天,通过以下方法解决: 1. pip install mysql-python报错 Unable to find vcvarsall.bat (参考 ...

  8. 4_9.springboot2.x之使用外置servlet容器原理解析

    问题概述 嵌入式Servlet容器: 应用打成可执行的jar 优点:简单.便携: **缺点:**默认不支持JSP.优化定制比较复杂(使用定制器[ServerProperties.自定义WebServe ...

  9. 牛客集训第七场J /// DP

    题目大意: 在矩阵(只有52种字符)中找出所有不包含重复字符的子矩阵个数 #include <bits/stdc++.h> #define ll long long using names ...

  10. UASCO Cow Pedigrees /// oj10140

    题目大意: 输入n,m :二叉树 输出 n个点分为m层 的方案数: 每个点的分支要么是0要么是2 Sample Input 5 3 Sample Output 2 即 两个方案为          O ...