Hibernate5-课程笔记2

单表的增删改查操作:

  (1)定义获取Session和SessionFactory的工具类:

 1 package com.tongji.utils;
 2
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.cfg.Configuration;
 6
 7 public class HbnUtils {
 8     private static SessionFactory sessionFactory;
 9     public static Session getSession() {
10          return getSessionFactory().getCurrentSession();
11     }
12
13     public static SessionFactory getSessionFactory() {
14         if (sessionFactory == null || sessionFactory.isClosed()) {
15             sessionFactory = new Configuration().configure().buildSessionFactory();
16         }
17         return sessionFactory;
18     }
19 }

  (2) 增加操作:

 1 @Test
 2 public void testSave() {
 3     //1. 获取Session
 4     Session session = HbnUtils.getSession();
 5     try {
 6         //2. 开启事务
 7         session.beginTransaction();
 8         //session.getTransaction().begin();  同样
 9         //3. 操作
10         Student student = new Student("张三", 23, 93.5);
11         session.save(student);
12         //4. 事务提交
13         session.getTransaction().commit();
14     } catch (Exception e) {
15         e.printStackTrace();
16         //5. 事务回滚
17         session.getTransaction().rollback();
18     }
19 }
20
21 @Test
22 public void testPersist() {
23     //1. 获取Session
24     Session session = HbnUtils.getSession();
25     try {
26         //2. 开启事务
27         session.beginTransaction();
28         //session.getTransaction().begin();  同样
29         //3. 操作
30         Student student = new Student("张三", 23, 93.5);
31         session.persist(student);    //JPA接口的API,效果同save
32         //4. 事务提交
33         session.getTransaction().commit();
34     } catch (Exception e) {
35         e.printStackTrace();
36         //5. 事务回滚
37         session.getTransaction().rollback();
38     }
39 }

  (3)删除操作:

 1 @Test
 2 public void testDelete() {
 3     //1. 获取Session
 4     Session session = HbnUtils.getSession();
 5     try {
 6         //2. 开启事务
 7         session.beginTransaction();
 8         //3. 操作
 9         Student student = new Student();
10         student.setId(6);
11         session.delete(student);  //删除是根据对象的id,进行删除的
12         //4. 事务提交
13         session.getTransaction().commit();
14     } catch (Exception e) {
15         e.printStackTrace();
16         //5. 事务回滚
17         session.getTransaction().rollback();
18     }
19 }

  (4) 更新操作:

 1 @Test
 2 public void testUpdate() {
 3     //1. 获取Session
 4     Session session = HbnUtils.getSession();
 5     try {
 6         //2. 开启事务
 7         session.beginTransaction();
 8         //3. 操作
 9         Student student = new Student("李四", 24, 94.5);
10         student.setId(5);
11         session.update(student);  //修改是根据对象的id,进行修改的
12         //4. 事务提交
13         session.getTransaction().commit();
14     } catch (Exception e) {
15         e.printStackTrace();
16         //5. 事务回滚
17         session.getTransaction().rollback();
18     }
19 }
20
21 @Test
22 public void testUpdate2() {
23     //1. 获取Session
24     Session session = HbnUtils.getSession();
25     try {
26         //2. 开启事务
27         session.beginTransaction();
28         //3. 操作
29         Student student = new Student("李四", 24, 94.5);
30         student.setId(3);
31         session.saveOrUpdate(student);  //执行save还是uodate的判断依据是,操作对象是否存在id
32         //4. 事务提交
33         session.getTransaction().commit();
34     } catch (Exception e) {
35         e.printStackTrace();
36         //5. 事务回滚
37         session.getTransaction().rollback();
38     }
39 }

  (5) 查询操作:

 1 @Test
 2 public void testGet() {
 3     //1. 获取Session
 4     Session session = HbnUtils.getSession();
 5     try {
 6         //2. 开启事务
 7         session.beginTransaction();
 8         //3. 操作
 9         //若查询的对象不存在,get返回null
10         Student student = session.get(Student.class, 5);
11         System.out.println(student);
12         //4. 事务提交
13         session.getTransaction().commit();
14     } catch (Exception e) {
15         e.printStackTrace();
16         //5. 事务回滚
17         session.getTransaction().rollback();
18     }
19 }
20
21 @Test
22 public void testLoad() {
23     //1. 获取Session
24     Session session = HbnUtils.getSession();
25     try {
26         //2. 开启事务
27         session.beginTransaction();
28         //3. 操作
29         //若查询的对象不存在,load抛出异常
30         Student student = session.load(Student.class, 5);
31         System.out.println(student);
32         //4. 事务提交
33         session.getTransaction().commit();
34     } catch (Exception e) {
35         e.printStackTrace();
36         //5. 事务回滚
37         session.getTransaction().rollback();
38     }
39 }
40
41 @Test
42 public void testLoad2() {
43     //1. 获取Session
44     Session session = HbnUtils.getSession();
45     //Session必须在事务环境下运行,无论是增、删、改,还是查询
46     Student student = session.load(Student.class, 5);
47     System.out.println(student);
48 }

  (6) 增删改的底层执行顺序:

 1 @Test
 2 public void testSDU() {
 3     //1. 获取Session
 4     Session session = HbnUtils.getSession();
 5     try {
 6         //2. 开启事务
 7         session.beginTransaction();
 8         //3. 操作
 9         //删除
10         Student student = session.get(Student.class, 2);
11         session.delete(student);
12         session.flush();  //添加一个刷新点
13         //修改
14         Student student2 = session.get(Student.class, 7);
15         student2.setName("王小五");
16         session.update(student2);
17         //添加
18         Student student3 = new Student("赵晓刘", 26, 96.5);
19         session.save(student3);
20         //4. 事务提交
21         session.getTransaction().commit();
22     } catch (Exception e) {
23         e.printStackTrace();
24         //5. 事务回滚
25         session.getTransaction().rollback();
26     }
27 }

    注意:底层执行的顺序是,先执行两次查询操作,再依次执行增、改、删。(忽略代码中的sessio.flush())

       如果加入了sessio.flush(),则刷新点之前的操作先执行完,再执行刷新点之后的操作。

时间: 2024-08-11 16:36:59

Hibernate5-课程笔记2的相关文章

《nodejs+gulp+webpack基础实战篇》课程笔记(四)-- 实战演练

一.用gulp 构建前端页面(1)---静态构建 npm install gulp-template --save-dev 通过这个插件,我们可以像写后台模板(譬如PHP)一样写前端页面.我们首先学习一下写法. 现在我们创建一个新任务:创建一个裸的index.html文件,然后在body里面写上 ,我的年龄是:<%= age %> 下载好gulp-template,我们引用并配置 var gulp_tpl = require("gulp-template"); gp.tas

Linux操作系统及应用课程笔记 索引

第0部分  软件的安装与配置 Linux下软件的安装与配置 第1部分*   绪论 第2部分*  Linux的安装过程 第3部分   系统Shell和常用命令 Shell文件相关常用命令及参数总结 Linux下常用命令 第4部分  VI编辑器 Linux下vi编辑器的使用 <<学习vi和vim编辑器>>1 <<学习vi和vim编辑器>>2 第5部分  Shell脚本 Shell入门之脚本管理 Shell入门之测试操作 Shell入门之条件循环 Shell入门之

Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.html 前言 学习了Andrew Ng课程,开始写了一些笔记,现在写完第5章了,先把这5章的内容放在博客中,后面的内容会陆续更新! 这篇博客主要记录了Andrew Ng课程第五章应用机器学习的建议,主要介绍了在测试新数据出现较大误差该怎么处理,这期间讲到了数据集的分类,偏差,方差,学习曲线等概念,帮

JAVA课程笔记_1

一 课程内容 set path查看路径信息:当编译一个程序或命令时,先从当前目录查找,如果没有,按path中的路径按顺序查找,先找到后就不查找后面的路径了. 可以将目录加入环境变量,set path="复制的路径" 可以在.java程序中编写多个类,当编译时,每个类生成各自的字节码文件. 由于多个类的字节码文件不利于管理,使用bin目录下的jar命令可以将多个字节码文件打包成jar包发布给其他程序员使用. 使用方法:先在命令提示符下输入jar,会出现使用方法和实例.Jar打包两个cla

Django开发BBS---51网络课程笔记(目录)

这是51cto中bbs课程中的一个项目,这里写一下每节的目录: Django开发BBS---51网络课程笔记(1) 这部分主要介绍了数据库的搭建及站点管理 http://4440271.blog.51cto.com/4430271/1663863 Bootstrap开发 这不分主要讲前端的设计 http://4440271.blog.51cto.com/4430271/1663934 Django开发BBS---51网络课程笔记(2) 这部分主要讲view与前端的衔接部分 http://4440

跟我学《JavaScript高程3》第三讲,课程笔记

跟我学<JavaScript高程3> 第三讲:第4章 课程制作:bling,兴哥,5年Java,3年前端 课程知识:JavaScript.Html.Css 课程目标:前端体系课程,逐步深入,找到一份前端工作    课程大纲:本书目录结构 适合人群:前端初学者,可以0基础,但要认真,踏实 课程回顾 1.数据类型:5种基本类型,1中复杂类型. 2.操作符:需要注意运算优先级,算关逻条赋逗. 3.语句:if-else.for.for-in.while 4.函数:函数定义,目前的两种方法 补充:变量在

【课程笔记】需求挖掘与分析

*…* 产品定位与分析有三部分内容:需求分析.用户调研.市场分析. 下面是前两部分内容的课程笔记,整理成思维导图.

(转)妙味课堂—JavaScrip中级课程笔记

DOM基础概念.操作 DOM的概念及节点类型 childNodes children nodeType attributes 子节点和兄弟节点的操作 firstChild firstElementChild lastChild.lastElementChild nextSibling.previousSibling 父节点 parentNode offsetParent 元素位置宽高 offsetLeft.offsetTop offsetWidth.offsetHeight getPos() 操

Android网络项目课程笔记-----Volley框架

Volley 问题原因: Android4.x版本和2.x对AsyncTask的机制不同 2.x之中,同时执行5个,4.x同时只有一个 解决思路: 1) 使用Thread + Handler 注意: 使用线程池 2) 定制AsyncTask线程池 3) 开源框架Volley 1. 检查网络 2. 退出 3. 总结 有待改进 做的比较好的 商业级项目: 1) 稳定性   不要轻易FC    运行时异常 2) 用户体验:流畅(性能)/美观 3) 可扩展性 4) 可读性 5) 异常流程:提示 + 指导

Android网络项目课程笔记-----计划

目标:好用 充分:1) 角色完整 产品经理   灵魂 美工  交互设计师 开发   架构师 开发者 测试 小部分用户 2) 运营推广 基础:能用 必须: 1) API   框架 2) 模块(一个功能集合) * 3) 业务流程 4) bug 具备解决大部分中等难度bug的能力 5) 自学新技术的能力 6) 阅读代码 不合格:1) 做不了,有难度.需要很长时间 2) 只是做了,对过程负责.对结果不负责 3) 只是掌握了某个功能的基本实现方法,一旦出了bug, 解决效率很低 4) 没做过,没把握 合格