Hibernate常见的方法使用教程

Hibernate提供了几种常见的方法,如何使用,之间有什么差异,本章进行探讨,有问题欢迎大家指出;如果大家对Hihernate基本三种状态不了解对可以参考另一篇博客https://mp.csdn.net/postedit/85334737

 

准备工作:创建一个Test类,主要代码在test中进行编写;

package com.study.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class HibernateTest {

	Session session = null;
	Transaction transaction = null;
	SessionFactory sessionFactory = null;

	@Before
	public void init() {
		// 初始化 第一次比较繁琐 但是我们可以经过封装,以后就不用编写了
		Configuration configuration = new Configuration().configure();
		ServiceRegistry serviceRegistry = configuration.getStandardServiceRegistryBuilder().build();
		sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
		session = sessionFactory.openSession();
		transaction = session.beginTransaction();

	}

	@Test
	public void test() {

		Student s = new Student("王麻子", "男");// 临时状态
		session.save(s);// 临时状态转变为游离状态

	}
	
	@After
	public void onDestory() {
		transaction.commit();
		session.close();
		sessionFactory.close();
	}
}

save:保存操作,将对象从临时状态转变为持久状态

Hibernate常见的方法使用教程_第1张图片

在保存save操作之前我们进行setId不会报错,但是没有作用,在save()方法后进行setID方法报错;

Hibernate常见的方法使用教程_第2张图片

Hibernate常见的方法使用教程_第3张图片

总结:1)执行save方法会执行Insert语句,对象会从临时状态转变为持久状态

2)在save()前执行setId没有任何作用,但是不报错;之后执行报错;给对象设置Id,我们称之为OID,他和数据库的id是一致的;

3) 在save()之后,对对象进行修改,不用在操作updata()方法,只有在Transaction.commit()阶段,才会通过比较判断是否需要updata()

Presist:和Save()方法的作用一样,但是有细微差别

Presist和Save之间的区别:

一方面:照顾JPA的用法习惯

另外一方面:session.save()返回的是该方法返回该持久化对象的标识属性值(即对应记录的主键值),而presist是无返回的;

Hibernate常见的方法使用教程_第4张图片

给出源码

 

Serializable save(Object object);
void persist(Object object);

 

get/Load   通过id值加载对象,参数1是对象的类型,参数2是id值

Hibernate常见的方法使用教程_第5张图片

区别1:get正常加载,load是懒加载;

Hibernate常见的方法使用教程_第6张图片

区别2:当对象id不存在的时候,get返回为null,load返回为报错;

Hibernate常见的方法使用教程_第7张图片

区别3:get得到是其本身,而load得到的是代理对象

总结Load和Get区别:

  1. get正常加载,load是懒加载;

  2. 当对象id不存在的时候,get返回为null,load返回为报错;

  3. get得到是其本身,而load得到的是代理对象

 

SaveOrUpdata:是save和updata的结合体,根据当前对象的状态不同执行不同的操作;具体是如果当前对象是临时态,执行save()操作,如果当前对象是游离态,执行Updata()操作

Hibernate常见的方法使用教程_第8张图片

 

Update:a:更新一个对象在数据库中的情况,使其从游离态转换为持久态

b:若是更新一个持久层对象,不需要在现实update方法,因为在commit已经flush过了,自动发起update方法;

c:若是关闭一个session,打开一个新的session,那么前一个session对象相对于新的session就是离散的对象了;

Hibernate常见的方法使用教程_第9张图片

 

evict:将一个对象从持久态转变为游离态

Hibernate常见的方法使用教程_第10张图片

dowork:主要是用来得到原生态的connection

Hibernate常见的方法使用教程_第11张图片

你可能感兴趣的:(HIbernate)