Hibernate中Session增删改查操作代码详解

把三状态转换图放在这,方便分析方法的作用:

1.Session的save()方法

Session是Hibernate所有接口中最重要的接口,提供了对数据保存,更新,查询和删除的方法。

Session的save()方法可以使临时态或游离态转换为持久态。例如,保存一个Customer对象:

SessionFactory sessionFactory;
Configuration configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tr = session.beginTransaction();
//1.创建Customer对象
Customer c1 = new Customer();
c1.setId(new long(1));
c1.setName("test");
c1.setEmail("123456789@qq.com");
c1.setPassword("123456");
c1.setAddress("世外桃源");
//2.调用Session的save()方法,将Customer对象持久化
session.save(c1);
tr.commit();
session.close();

Save()方法主要做了以下三件事:

(1)将new创建的临时态的Customer对象放入缓存,使其持久化。

(2)同时根据对象关系映射文件中设置的OID生成器,即主键生成方式给该对象生成一个唯一的OID。

<!--设置主键-->
<idname="id"column="ID"type="long">
<!--主键生成方式-->
<generatorclass="increment"/>
</id>

在这个地方有一个疑问,创建对象时setId()方法是否是为该对象持久化生成主键,其实不是,setId并没有按照我们设定的那样生成主键,而是靠对象关系映射文件配置的主键生成方式生成主键,可以多运行几次,主键自增长,从数据库可以看到多条数据,主键从1开始,所以可以知道setId()

没有设置主键,否则数据库主键唯一性校验都过不去。

我们也可以手动设置主键值,必须重载save()方法,使用重载方法save(c1,newLong(1)),每次手动设置。

(3)计划执行insert语句。注意,insert语句并没有立刻执行,只有当Session清理缓存时,才会执行insert语句。tr.commit()事务提交。

2.Session的update()方法

使游离态对象变成持久态对象。例如:

SessionFactory sessionFactory;
Configuration configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
Session session1 = sessionFactory.openSession();
Transaction tr1 = session1.beginTransaction();
//1.创建Customer对象
Customer c1 = new Customer();
c1.setId(new Long(1));
c1.setName("test");
c1.setEmail("123456789@qq.com");
c1.setPassword("123456");
c1.setAddress("世外桃源");
//2.调用Session的save()方法,将Customer对象持久化
session1.save(c1);
tr1.commit();
session1.close();
//3.将游离态的对象更新,发现改变,执行update语句
Session session2 = sessionFactory.openSession();
Transaction tr2 = session2.beginTransaction();
c1.setAddress("测试update");
session2.update(c1);
tr2.commit();
session2.close();

Session的update()注意做以下事:

(1)把游离态的Customer对象从新加入Session缓存中,使其变成持久化对象。

(2)执行update语句。跟save()执行insert语句一样,并不是立刻执行update语句,需要等缓存清空时,把Customer对象组装成update语句,

然后再执行。

注意,即使Customer没有改变,默认情况下,缓存清除时也会组装Update语句,如果需要设置成改变成才执行update语句,需要设置对象关系映射文件。

3.Session的saveOrUpdate()方法

saveOrUpdate()方法包含save()和update()方法的功能,根据传入参数状态,调用不同方法。传入临时态对象调用save()方法,如果传入游离态对象调用

update()方法。传入持久态对象返回。所以,每次我们只需传入对象,saveOrUpdate()方法,自动判断传入对象状态的状态,动态调用处理方法。

该方法如何判断传入对象的状态?当满足以下任意一个条件时,就是临时态:

(1)java对象的OID为null,说明该对象没有别实例化,即使被实例化,也是游离态被删除后变成临时态的对象,这种情况下的对象为临时态。

(2)如果java对象具有版本控制(version),版本号为null的,也就是没有该对象的版本号。

(3)自定义拦截器,调用isUnsaved()返回值为true。

4.Session的load()和get()方法

这两个方法都是根据OID,从数据库中加载一个持久化对象。持久化对象放在Session缓存中,可以根据不同的需要操作该持久化对象。

两者区别:

当数据库中OID没有对应记录时,load()抛异常,get()返回null。

5.Session的delete()方法

delete()顾名思义删除,用于从数据库中删除java对象对应的记录。

delete()如果传入持久化对象,组装delete语句,执行删除;如果传入游离态对象,hibernate先把游离态关联到session,变成持久态,再生成delete语句,

执行删除。

都是只有当session缓存清空时,才执行。

以上执行都是一个对象,对应一条记录。

可以用session.delete("fromCustomerwhere....");后面加上条件删除多条数据。

SessionFactory sessionFactory;
Configuration configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
Session session1 = sessionFactory.openSession();
Transaction tr1 = session1.beginTransaction();
//1.创建Customer对象
Customer c1 = new Customer();
c1.setId(new Long(1));
c1.setName("test");
c1.setEmail("123456789@qq.com");
c1.setPassword("123456");
c1.setAddress("世外桃源");
//2.调用Session的save()方法,将Customer对象持久化
session1.save(c1);
tr1.commit();
session1.close();
//3.将游离态的对象关联到session,持久化后清除缓存,执行delete语句;放入持久态的直接删除;
Session session2 = sessionFactory.openSession();
Transaction tr2 = session2.beginTransaction();
session2.delete(c1);
tr2.commit();
session2.close(); 

执行结果,控制台输出:

Hibernate: select max(ID) from CUSTOMERS
Hibernate: insert into CUSTOMERS (NAME, EMAIL, PASSWORD, PHONE, ADDRESS, SEX, IS_MARRIED, DESCRIPTION, IMAGE, BIRTHDAY, REGISTERED_TIME, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: delete from CUSTOMERS where ID=?

总结

以上就是本文关于Hibernate中Session增删改查操作代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • hibernate通过session实现增删改查操作实例解析

    今天学习了一下如何通过hibernate来实现对数据库的增删改查,下面来简单介绍一下: 首先创建个Student类: package com.hibernate.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.T

  • SSH整合中 hibernate托管给Spring得到SessionFactory

    <prop key="hibernate.current_session_context_class">thread</prop> 然后 Resource resource=new ClassPathResource("/WEB-INF/applicationContext.xml"); BeanFactory factory=new XmlBeanFactory(resource); SessionFactory sessionFactor

  • 简介Java的Hibernate框架中的Session和持久化类

    Session Session对象用于获取与数据库的物理连接. Session对象是重量轻,设计了一个互动是需要与数据库每次被实例化.持久化对象被保存,并通过一个Session对象中检索. 会话中的对象不应该保持开放很长一段时间,因为他们通常不被线程安全的,他们应该被创建并根据需要摧毁他们.这次会议的主要功能是提供创建,读取和删除操作映射的实体类的实例.实例中可能存在以下三种状态之一在给定时间点: 短暂性: 持久化类的未与会话相关联,并在数据库中没有代表性,没有标识值的新实例被Hibernate

  • 快速了解Hibernate中的Session

    Hibernate中的Session是一级缓存,可以理解为进程级(是线程吧)的缓存,在进程(是线程吧)运行期间一直存在. session可以理解为一个可以操作数据库的对象,该对象中有操作数据库的方法. 在Java里面,缓存通常是指Java对象的属性占用的内存空间,通常是一些集合类型的属性.在Session接口的实现类SessionImpl中定义了一系列的Java集合,这些Java集合就构成了Session的缓存. 总的来说(我对Session的理解):Session是Hibernate和DB的中

  • Hibernate管理Session和批量操作分析

    本文详细分析了Hibernate管理Session和批量操作的用法.分享给大家供大家参考.具体分析如下: Hibernate管理Session Hibernate自身提供了三种管理Session对象的方法 ① Session对象的生命周期与本地线程绑定 ② Session对象的生命周期与JTA事务绑定 ③ Hibernate委托程序管理Session对象的生命周期 在Hibernate的配置文件中,hibernate.current_session_context_class属性用于指定Sess

  • Hibernate中获取Session的两种方式代码示例

    Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础.对象的生命周期/事务的管理/数据库的存取都与Session息息相关. Session对象是通过SessionFactory构建的,下面举个例子来介绍Hibernate两种获取session的方式. 日志,是编程中很常见的一个关注点.用户在对数据库进行操作的过程需要将这一系列操作记录,以便跟踪数据库的动态.那么一个用户在向数据库插入一条记录的时候,就要向日志文件中记录一条记录,用户的一系列操作都要在

  • Hibernate三种状态和Session常用的方法

    我们知道hibernate的核心就是对数据库的操作,里面的核心接口就是org.hibernate.Session接口.要想对数据库操作我们就要理清楚对象在整个操作中的所属的状态(Transient,Persistent,Detached).就像马士兵老师在视频中所说的,我们并不必死抠这些字眼,我们通过自己编写测试类就可以他们之间不同的区别. 其实三种状态各自的不必总结那么多,只是一个重要的地方就是Transient状态里面的对象是没有id的. session中常用的方法是save(),updat

  • Hibernate中Session增删改查操作代码详解

    把三状态转换图放在这,方便分析方法的作用: 1.Session的save()方法 Session是Hibernate所有接口中最重要的接口,提供了对数据保存,更新,查询和删除的方法. Session的save()方法可以使临时态或游离态转换为持久态.例如,保存一个Customer对象: SessionFactory sessionFactory; Configuration configuration = new Configuration().configure(); sessionFacto

  • Hibernate中实现增删改查的步骤详解

    1.首先我们要知道什么是Hibernate Hibernate是一个轻量级的ORMapping对象.主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获取的方法, 可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间,解放编程人员95%的任务. 2.什么是ORM  Object-Relational-Mapping对象关系映射 ORM:是通过java对象映射到数据库表,通过操作Java对象可以完成对数据表的操作.(假如你用的是Dbutils那么还需要在Java类中写sq

  • Java中SSM框架实现增删改查功能代码详解

    记录一下自己第一次整合smm框架的步骤. 参考博客和网站有:我没有三颗心脏 How2J学习网站 1.数据库使用的是mySql,首先创建数据库ssm1,并创建表student create database ssm1; use ssm1; CREATE TABLE student( id int(11) NOT NULL AUTO_INCREMENT, student_id int(11) NOT NULL UNIQUE, name varchar(255) NOT NULL, age int(1

  • java连接mongoDB并进行增删改查操作实例详解

    本文实例讲述了java连接mongoDB并进行增删改查操作.分享给大家供大家参考,具体如下: 1.安装 MongoDB JDBC驱动程序 在java中使用mongoDB之前,首先需要拥有java连接mongoDB的第三方驱动包(jar包) 1)maven项目可通过在pom.xml中添加依赖 <dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-ja

  • java 数据库连接与增删改查操作实例详解

    本文实例讲述了java 数据库连接与增删改查操作.分享给大家供大家参考,具体如下: 1.设置数据库的基本配置信息 package mysql; //数据库配置资源连接 public final class DbConfig { //数据库资源 指定所使用的数据库类型 地址 端口 数据库名称 编码格式 public final static String dbUrl = "jdbc:mysql://localhost:3306/database_name?useUnicode=true&c

  • hibernate中的增删改查实现代码

    第一个我们首先看看增,增在SQL里面就是insert,也就是插入,在hibernate中,我们只需要,操纵一个对象进行sava,然后再commit事务,就能实现插入功能,下面给大家具体看看代码,持久类我就不再写了,里面也就是与数据库中的字段要一一对应的东西,要有set,get方法,我直接就写的怎么调用save方法. //导入所需的包 import org.hibernate.HibernateException; import org.hibernate.Session; import org.

  • hibernate增删改查操作代码

    Hibernate对数据删除操作 删除User表中个一条数据,是需要更具User表的主键id值来删除的.首先根据id值向数据库中查询出来对应的对象.可以采用两种方式一是session的get方法,一个是session的load方法. Session的Get方法:调用这个方法会返回一个Object对象.然后我们对其强制转换.Useruser = (User)session.get(User.class," 402881e5441c035e01441c0360510003"); 当我们传递

  • java中JDBC增删改查操作详解

    目录 前言 一.增删改操作 1.1 PreparedStatement介绍  1.2 增删改操作   1.3 测试 二.查操作 2.1 通用对不同表进行一条数据查询操作 2.2 通用对不同表进行多条数据查询操作 总结 前言         在上一篇博客我们介绍了JDBC的概念以及连接数据库的五种方式JDBC概述及数据库连接方式(数据库连接方式推荐使用第五种),那么我们既然连接上数据库了,那就要对数据进行操作了,那么这一篇我们就来介绍常规的增删改 查操作.       我们先看一遍步骤:    

  • node.js中 mysql 增删改查操作及async,await处理实例分析

    本文实例讲述了node.js中 mysql 增删改查操作及async,await处理.分享给大家供大家参考,具体如下: 要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = require('mysql'); //创建数据库连接 let conn = mysql.createConnection({ //主机地址 host: '127.0.0.1', //用户

  • 编写Java代码对HDFS进行增删改查操作代码实例

    本文实例为大家分享了Java代码对HDFS进行增删改查操作的具体代码,供大家参考,具体内容如下 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import org.apache.commons.compress.utils.IOUtils; import org.apache.hadoop.conf.Configuration; impo

随机推荐