Hibernate 的事物简单的增删查改

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集成进去了,在上一篇博客中详细介绍了如何集成,以及常用的三种方式

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

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

package hibernate;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.tz.entity.Student;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:config/applicationContext.xml")
public class TestSpringHibernate {

     @Autowired
     private SessionFactory sessionFactory; //获取SessionFactory
     @Test//查找数据
     public void handle2(){
        Session session = sessionFactory.openSession(); //获取Session
        List<Student> students = session.createSQLQuery("select * from student").addEntity(Student.class).list();
        for(Student student:students){
            System.out.println(student.getName());
            System.out.println("=========");
        }

     }
     @Test//插入数据
     public void handle3(){
        Session session = sessionFactory.openSession();
        Transaction ts = session.beginTransaction(); //开启事物
        Student stu = new Student();
        stu.setName("zd");
        stu.setMale(1);
        stu.setAge(12);
        try{
            session.save(stu);
            ts.commit();//事物提交
        }catch(HibernateException e){
            e.printStackTrace();
            ts.rollback();//事物回滚
        }finally{
            session.close();

        }
     }
     @Test///删除数据
     public void handle4(){
         Session session = sessionFactory.openSession();
         Transaction ts = session.beginTransaction();
         Student st = new Student();
         st.setId(1);

         try{
            session.delete(st);
            ts.commit();
         }catch(Exception e){
             e.printStackTrace();
             ts.rollback();
         }finally{
             session.close();
         }
     }
     @Test //修改数据
     public void handle5(){
         Session session = sessionFactory.openSession();
         Transaction ts = session.beginTransaction();
         Student st = new Student();
         st.setId(2);
         st.setName("zengda");
         try{
            session.update(st);
            ts.commit();
         }catch(HibernateException e){
             e.printStackTrace();
             ts.rollback();
         }finally{
            session.close();
         }
     }
}
时间: 2024-11-05 12:12:47

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

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

折腾了两天搞出来,但原理性的东西还不是很懂,废话不多说上图上代码 然后右键models,新建一个数据模型 注意我添加命名为lianxi 添加后如上 接下来在controllers添加控制器还有在Views中添加视图 注意控制器lianxi和视图的名字要一致,然后视图我是添加了3个分别是Index,insert,Modify,在控制器里分别有三个对应的函数 每当用URL访问视图时,他就调用了controllers对应的方法,例如 jiaEntities 就是建立模式时那个数据链接的名字      

Spring-Ldap连接Ldap及简单的增删查改

了解了Ldap的基本概念之后就是Ldap的使用问题了,就像连接MySQL数据库,操作MySQL数据库中数据一样,我们怎么连接到Ldap呢?又是怎么操纵ldap中的数据呢? 我也是不断的在网上查找资料,最终选择使用Spring-ldap进行数据库的连接,因为我的项目使用SpringMVC+Spring开发,直接就利用Spring-ldap了,挺简单的. 步骤一:依赖(maven工程) <!-- 添加Spring 对LDAP的支持 --> <dependency> <groupI

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

最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs中的mysql模块 npm install mysql 在连接数据库之前,要先引入nodejs连接处理mysql的模块 var mysql = require('mysql'); 类似php连接mysql的方式,编写连接代码 //使用nodejs处理mysql的模块,使用创建连接方法,创建与mysq

mybatis实现简单的增删查改

接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的.这样学习起来,方向性也会更强一些.我对于mybatis的理解是,它是一个封装了JDBC的java框架.所能实现的功能是对数据库进行增删查改的功能. 首先,需要搭建一个demo,用于学习这个框架的使用方式.(1)在IDE上建立自己的工程目录,一个普通的java工程项目就好,我电脑本地的IDE是Myeclipse.(2)引入搭建框架需要的jar包,这个直接去网上搜索就好.(3)框架的核心实现都是基于配置的,引入jar包后,先配置my

Spring Boot集成ElasticSearch实现简单的增删查改接口

SpringBoot集成ElasticSearch pom.xml文件中,依赖的各jar包版本如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> &l

通过JDBC进行简单的增删查改

目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 (3)insert (4)update (5)select (6)delete 四.测试 五.代码分析 六.思考问题 前言:什么是JDBC 维基百科的简介: Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的

简单的增删查改

package com.pro.dao.impl; import java.sql.Date;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.Connection;import java.sql.Types;import java.util.Vector; import oracle.

java--easyUI+struts+JSP实现简单的增删查改

1.数据库工具类 package com.xiaoxiong.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnUtil { //定义连接数据库参数 private static String drivers = "com.mysql.jdbc.Driver"; private static String url

java--easyUI+struts+JSP实现简单的增删查改(增)

1.entity类 package com.xiaoxiong.entity; public class Dept { private Integer deptno; private String dname; public Integer getDeptno() { return deptno; } public void setDeptno(Integer deptno) { this.deptno = deptno; } public String getDname() { return