Hibernate 是一个优秀的ORM框架体现在:

1. 面向对象设计的软件内部运行过程可以理解成就是在不断创建各种新对象、建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管程序运行的过程和操作怎么样,本质上都是要得到一个结果,程序上一个时刻和下一个时刻的运行结果的差异就表现在内存中的对象状态发生了变化。

2.为了在关机和内存空间不够的状况下,保持程序的运行状态,需要将内存中的对象状态保存到持久化设备和从持久化设备中恢复出对象的状态,通常都是保存到关系数据库来保存大量对象信息。从Java程序的运行功能上来讲,保存对象状态的功能相比系统运行的其他功能来说,应该是一个很不起眼的附属功能,java采用jdbc来实现这个功能,这个不起眼的功能却要编写大量的代码,而做的事情仅仅是保存对象和恢复对象,并且那些大量的jdbc代码并没有什么技术含量,基本上是采用一套例行公事的标准代码模板来编写,是一种苦活和重复性的工作。

3.通过数据库保存java程序运行时产生的对象和恢复对象,其实就是实现了java对象与关系数据库记录的映射关系,称为ORM(即Object Relation Mapping),人们可以通过封装JDBC代码来实现了这种功能,封装出来的产品称之为ORM框架,Hibernate就是其中的一种流行ORM框架。使用Hibernate框架,不用写JDBC代码,仅仅是调用一个save方法,就可以将对象保存到关系数据库中,仅仅是调用一个get方法,就可以从数据库中加载出一个对象。

4.使用Hibernate的基本流程是:配置Configuration对象、产生SessionFactory、创建session对象,启动事务,完成CRUD操作,提交事务,关闭session。

5.使用Hibernate时,先要配置hibernate.cfg.xml文件,其中配置数据库连接信息和方言等,还要为每个实体配置相应的hbm.xml文件,hibernate.cfg.xml文件中需要登记每个hbm.xml文件。

6.在应用Hibernate时,重点要了解Session的缓存原理,级联,延迟加载和hql查询。

首先确保Spring集成进去了,在上一篇博客中详细介绍了如何集成,以及常用的三种方式

  1. @Test
  2. public void handle(){
  3. Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
  4. SessionFactory sessionFactory = configuration.buildSessionFactory();
  5. Session session = sessionFactory.openSession();
  6. System.out.print(session);
  7. }

上面这一个例子用来测试是否集成成功,打印一个地址则成功了

  1. package hibernate;
  2.  
  3. import java.util.List;
  4.  
  5. import org.hibernate.HibernateException;
  6. import org.hibernate.Session;
  7. import org.hibernate.SessionFactory;
  8. import org.hibernate.Transaction;
  9. import org.junit.Test;
  10. import org.junit.runner.RunWith;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.test.context.ContextConfiguration;
  13. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  14.  
  15. import com.tz.entity.Student;
  16.  
  17. @RunWith(SpringJUnit4ClassRunner.class)
  18. @ContextConfiguration(locations="classpath:config/applicationContext.xml")
  19. public class TestSpringHibernate {
  20.  
  21. @Autowired
  22. private SessionFactory sessionFactory; //获取SessionFactory
  23. @Test//查找数据
  24. public void handle2(){
  25. Session session = sessionFactory.openSession(); //获取Session
  26. List<Student> students = session.createSQLQuery("select * from student").addEntity(Student.class).list();
  27. for(Student student:students){
  28. System.out.println(student.getName());
  29. System.out.println("=========");
  30. }
  31.  
  32. }
  33. @Test//插入数据
  34. public void handle3(){
  35. Session session = sessionFactory.openSession();
  36. Transaction ts = session.beginTransaction(); //开启事物
  37. Student stu = new Student();
  38. stu.setName("zd");
  39. stu.setMale(1);
  40. stu.setAge(12);
  41. try{
  42. session.save(stu);
  43. ts.commit();//事物提交
  44. }catch(HibernateException e){
  45. e.printStackTrace();
  46. ts.rollback();//事物回滚
  47. }finally{
  48. session.close();
  49.  
  50. }
  51. }
  52. @Test///删除数据
  53. public void handle4(){
  54. Session session = sessionFactory.openSession();
  55. Transaction ts = session.beginTransaction();
  56. Student st = new Student();
  57. st.setId(1);
  58.  
  59. try{
  60. session.delete(st);
  61. ts.commit();
  62. }catch(Exception e){
  63. e.printStackTrace();
  64. ts.rollback();
  65. }finally{
  66. session.close();
  67. }
  68. }
  69. @Test //修改数据
  70. public void handle5(){
  71. Session session = sessionFactory.openSession();
  72. Transaction ts = session.beginTransaction();
  73. Student st = new Student();
  74. st.setId(2);
  75. st.setName("zengda");
  76. try{
  77. session.update(st);
  78. ts.commit();
  79. }catch(HibernateException e){
  80. e.printStackTrace();
  81. ts.rollback();
  82. }finally{
  83. session.close();
  84. }
  85. }
  86. }

Hibernate 的事物简单的增删查改的更多相关文章

  1. nodejs连接mysql并进行简单的增删查改

    最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs ...

  2. Java连接MySQL数据库及简单的增删查改操作

    主要摘自 https://www.cnblogs.com/town123/p/8336244.html https://www.runoob.com/java/java-mysql-connect.h ...

  3. mybatis实现简单的增删查改

    接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的.这样学习起来,方向性也会更强一些.我对于mybatis的理解是,它是一个封装了JDBC的java框架.所能实现的功能是对数据库进行增 ...

  4. EF简单的增删查改

    Add /// <summary> /// /// </summary> public void Add() { TestDBEntities2 testdb = new Te ...

  5. asp.net MVC最简单的增删查改!(详)

    折腾了两天搞出来,但原理性的东西还不是很懂,废话不多说上图上代码 然后右键models,新建一个数据模型 注意我添加命名为lianxi 添加后如上 接下来在controllers添加控制器还有在Vie ...

  6. jdbc 可处理数据库事物的通用增删查改函数

    首先弄清四种隔离级别的和三种数据并发 之间的关系 通用查询函数 //使用PreparedStatement实现对不同表的通用的返回一个对象的查询操作 //使用泛型机制,参数里先传入一个类的类型 pub ...

  7. 一般处理程序+htm C#l简单的增删查改

    首先引用两个文件一个dll: 数据库表已创建 首先编写数据读取部分 /// <summary> /// 查询 /// </summary> /// <param name ...

  8. RavenDb学习(二)简单的增删查改

    在上一节当中已经介绍了RavenDb的文档设计模式,这一节我们要具体讲一讲如何使用api去访问RavenDb .连接RavenDb var documentStore = new DocumentSt ...

  9. django与mysql实现简单的增删查改

    模型定义 from django.db import models class Grades(models.Model): g_name = models.CharField(max_length=2 ...

随机推荐

  1. 用Qstring给char[]数组赋值(转)

    tree_data.Desc  //Desc是char[80]类型的数据 Qstring newDescStr; strcpy(tree_data.Desc , newDescStr.toLocal8 ...

  2. 从windows到linux的shell脚本编码和格式问题

    从windows到linux的shell脚本编码和格式问题   从windows到Linux的shell脚本编码和格式问题 1.异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh s ...

  3. make dep

    在配置好内核后就是编译内核了,在编译之前首先应该执行make dep命令建立好依赖关系,该命令将会修改linux中每个子目录下的.depend文件,该文件包含了该目录下每个目标文件所需要的头文件(绝对 ...

  4. JavaScript-Tool:Moment.js

    ylbtech-JavaScript-Tool:Moment.js Parse, validate, manipulate, and display dates and times in JavaSc ...

  5. ZeroClipboard插件,复制到剪切板

    发现一个复制到剪切板的插件:ZeroClipboard插件.挺好用,用法如下: 头部引用: <script type="text/javascript" src=" ...

  6. table边框

    border-collapse 语法 border-collapse:separate | collapse | inherit 默认值:separate 取值 separate: 默认值.边框会被分 ...

  7. Splunk 交流

    1. 初识splunk Splunk Enterprise Splunk Free Splunk Universal Forwarder,通用转发器

  8. [UE4]C++ string的用法和例子

    使用场合: string是C++标准库的一个重要的部分,主要用于字符串处理.可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作.同时C++的算法库对string也有着很好的支持,而且st ...

  9. PHP PDO prepare()、execute()和bindParam()方法详解

    每次将查询发送给MySQL服务器时,都必须解析该查询的语法,确保结构正确并能够执行.这是这个过程中必要的步骤,但也确实带来了一些开销.做一次是必要的,但如果反复地执行相同的查询,批量插入多行并只改变列 ...

  10. Web API 源码剖析之全局配置

    Web API 源码剖析之全局配置 Web API  均指Asp.net Web API .本节讲述的是基于Web API 系统在寄宿于IIS. 本节主要讲述Web API全局配置.它是如何优雅的实现 ...