我们使用Hibernate的目的是什么?对数据库进行操作,所有接下来我们就用Hibernate来进行CURD。

前边我们已经分析过了Configuration,SessionFactory和Session,接下来我们就利用Session对象来进行增删改查:

在进行增删改查之前我们先对SessionFactory和Session进行一些简单的封装:

public class hbnUtil {private static SessionFactory factory;public static Session getSession() {return getSessionFactory().getCurrentSession();}public static SessionFactory getSessionFactory() {Configuration cfg = new Configuration().configure();//因为SessionFactory是重量级的,所以创建的时候要进行判断if(factory==null||factory.isClosed()) {factory = cfg.buildSessionFactory();}return factory;}
}

这样以后我们使用到Session实例对象的时候就能够进行直接获取了。

增加操作:

之前配置Hibernate的测试代码便是save操作,即增加一条记录。 
还有一个方法也能够增加,叫做persist。

  下面这段出自:http://blog.csdn.net/u010739551/article/details/47253881

  Hibernate 之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯。另一方面,save()和 persist()方法还有一个区别:使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);但使用 persist() 方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对象的标识属性,所以程序执行 save() 会立即将持久化对象对应的数据插入数据库;而 persist() 则保证当它在一个事物外部被调用时,并不立即转换成 insert 语句, 这个功能是很有用的,尤其当我们封装一个长会话流程的时候,persist() 方法就显得尤为重要了。

  主要内容区别:
1,persist把一个瞬态的实例持久化,但是并”不保证”标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。
2,save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert

删除操作:

public class TestDelete {public static void main(String[] args) {Session session  = hbnUtil.getSession();session.beginTransaction();Student student = new Student();student.setId(1);session.delete(student);session.getTransaction().commit();  }
}

因为我们指定的主键是id,所以进行删除的时候对主键为1的记录进行删除。

更新操作:

public class TestUpdate {public static void main(String[] args) {Session session  = hbnUtil.getSession();session.beginTransaction();Student student = new Student("李四",22,65);student.setId(2);session.update(student);session.getTransaction().commit();}
}

操作:

     Session session  = hbnUtil.getSession();session.beginTransaction();Student student = session.get(Student.class,2);System.out.println(student.toString());session.getTransaction().commit();

查询还有一个方法叫做load方法(延迟加载),get方法当检索不到时候返回null而load方法会抛出错误。这里我们只需要知道load这个方法存在并且查询不到时会抛出错误就好了,具体的细节我们后面慢慢讨论。

saveOrUpdate: 
这个操作当存在id时执行update,当不存在id时执行save。

注意:当增改删在同一个事务的时候,hibernate默认执行顺序是增改删但是可以通过刷新Session缓存来进行分割,对想要先执行的操作进行优先处理。
比如你想先执行删除操作:
session.delete(student);
session.flush();
session.save(“xxx”);
像上面的这种方法就实现了删除优先。

到这里我们的基本增删改查就结束了。

版权声明:本文为博主原创文章,如需转载请表明出处。 https://blog.csdn.net/qq_39266910/article/details/78565163

转载于:https://www.cnblogs.com/chengshun/p/9771446.html

hibernate学习---用Session实现CURD相关推荐

  1. Hibernate学习笔记Session.evict(user)方法

    @[TOC]Hibernate学习笔记Session.evict(user)方法 Hibernate学习笔记Session.evict(user)方法 首先我们要明白Session.flush(use ...

  2. hibernate学习笔记二

    上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...

  3. hibernate 学习笔记1

    今天开始学习hibernate,碰到的几个问题在这里记录一下. 1>导入hibernate5.2.10的hibernate-release-5.2.10.Final\hibernate-rele ...

  4. Hibernate学习笔记(二)

    Hibernate概述: 什么是Hibernate:是一个持久层的ORM的框架 什么是ORM: ORM:对象关系映射,指的是将一个java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可 ...

  5. Hibernate学习笔记(一)

    ####1.1Hibernate框架的学习路线 第一天:Hibernate的入门(Hibernate的环境搭建.Hibernate的API.Hibernate的CRUD) 第二天:Hibernat ...

  6. Hibernate学习汇总

    一.Hibernate的基本原理 1.什么是Hibernate Hibernate,翻译过来是冬眠的意思,正好现在已经进入秋季,世间万物开始准备冬眠了.其实对于对象来说就是持久化. Hibernate ...

  7. hibernate 学习之——hql 语句

    hibernate 学习之--hql 语句 hibernatre hql 语句:是对于hibernate的orm模式的一种类似于JDBC语句的面对对象的操作语句 特点 : 1.对于类名属性名区分大小写 ...

  8. hibernate学习笔记(总结)

    hibernate学习笔记 课程内容 6 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0/R框架(了解 ...

  9. Hibernate学习大全

    第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...

最新文章

  1. Python爬虫2-GET_POST与开发者工具
  2. Nginx 真实的 IP
  3. 第 1 章 容器生态系统 - 003 - 容器生态系统 (续)
  4. android主流开源自动化框架(monkeyrunner,robotium,uiautomator
  5. VBA经典常用语句400句
  6. 实现dmx512_LED灯具DMX512信号与普通TTL信号区别
  7. 第三届传智杯全国大学生IT技能大赛(决赛B组)【c++】
  8. 计算机科学在生物信息中的应用,生物信息学在基因组学中的应用
  9. GAD计算机辅助诊断,GAD-2和GAD-7在心血管门诊焦虑筛查中的信度与效度分析
  10. asp.net单一登录
  11. excel日期相关计算天数
  12. 基于Java毕业设计医院药品管理系统源码+系统+mysql+lw文档+部署软件
  13. Elixir Meetup 相关不相关的一些感触
  14. C# winform excel根据当前选中内容,自动插入/编辑批注
  15. centos 使用iptables实现只允许中国IP访问服务器或者禁止访问
  16. python工程师要求-高级Python开发工程师职位描述与岗位职责任职要求
  17. Android Wi-Fi Regulatory domain controlle the channel(以QCOM平台为例)
  18. 经方时方接轨之――茵陈蒿汤合甘露饮
  19. 《数据结构与算法分析》课程设计——贪吃蛇问题
  20. C语言:判断质数合数的代码

热门文章

  1. python批量执行多个py文件_Python实现批量执行同目录下的py文件方法
  2. java继承的作用_Java继承概述以及Java继承案例和继承的好处
  3. 现在学java的都是傻子?
  4. 女生在java开发和前端之间不知道选择哪个怎么办?
  5. 学习前端开发,可提高Web开发效率的15类工具
  6. thinkphp后台_前后端分离决方案|thinkphpvueadmin 后台接口
  7. python调用第三方接口获取数据_python调用接口,python接收post请求接口(附完整代码)...
  8. 隐藏窗口 java swing_Java简单实现贪吃蛇经典小游戏(附源代码)
  9. python新手入门到放弃_python萌新:从零基础入门到放弃
  10. mysql分组查询 having,MYSQL-分组查询-where和having的区别