“Hibernate源码分析:入门代码流程”的版本间差异

来自Wikioe
跳到导航 跳到搜索
(创建页面,内容为“category:Hibernate == 关于 == 对于入门的代码案例,分析其执行流程,有助于理解其设计并熟悉 API 的使用。 入门代码: : <syntaxhighlight lang="Java" highlight=""> class HibernateTest{ @Test public void testDemo() { // 加载 hibernate 核心配置文件 Configuration cfg = new Configuration(); cfg.configure(); // 根据 hibernate 核心配置文件内容,创建 sessionFactory SessionFactory sessionFacto…”)
 
第59行: 第59行:


== 加载核心配置文件 ==
== 加载核心配置文件 ==
对于:
: <syntaxhighlight lang="Java" highlight="">
Configuration cfg = new Configuration();
cfg.configure();
</syntaxhighlight>


其过程如下:
# 创建一个 Configuration 对象;
# 调用其 configure() 方法:
#: <syntaxhighlight lang="Java" highlight="">
public class Configuration {
...
public Configuration() {
this( new BootstrapServiceRegistryBuilder().build() );
}
public Configuration(BootstrapServiceRegistry serviceRegistry) {
this.bootstrapServiceRegistry = serviceRegistry;
this.metadataSources = new MetadataSources( serviceRegistry );
reset();
}
public Configuration(MetadataSources metadataSources) {
this.bootstrapServiceRegistry = getBootstrapRegistry( metadataSources.getServiceRegistry() );
this.metadataSources = metadataSources;
reset();
}
...
}
</syntaxhighlight>
#* 有多个重载的构造方法,用于不同加载方式。
#* 其实默认的无参构造函数,将创建一个 BootstrapServiceRegistryImpl 类(继承了 BootstrapServiceRegistryBuilder 类)的对象。
【待续……】


== 创建 sessionFactory ==
== 创建 sessionFactory ==

2022年6月13日 (一) 03:53的版本


关于

对于入门的代码案例,分析其执行流程,有助于理解其设计并熟悉 API 的使用。

入门代码:

class HibernateTest{
	@Test
	public void testDemo() {
		// 加载 hibernate 核心配置文件
		Configuration cfg = new Configuration();
		cfg.configure();
		
		// 根据 hibernate 核心配置文件内容,创建 sessionFactory
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		
		// 使用 SessionFactory 创建 session 对象
		Session session = sessionFactory.openSession();
		// Session session = sessionFactory.grtCurrentSession();
		
		
		// 使用事务
		Transaction tx = null;
		
		try{
			// 开启事务
			tx = session.beginTransaction();
			
			// 逻辑代码
			User user = new User();
			user.setUsername("Eijux");
			user.setPassword("123456");
			user.setAddress("成都");
			
			session.save(user);
			
			// 提交事务
			tx.commit();
		}catch(HibernateException e){
			if(tx != null){
				// 回滚事务
				tx.rollback();
			}
			throw e;
		}finally{
			if(session != null){
				// 关闭 session
				session.close();
			}
		}
		

		// 关闭 sessionFactory
		sessionFactory.close();
	}
}

加载核心配置文件

对于:

		Configuration cfg = new Configuration();
		cfg.configure();

其过程如下:

  1. 创建一个 Configuration 对象;
  2. 调用其 configure() 方法:
    public class Configuration {
    	...
    	
    	public Configuration() {
    		this( new BootstrapServiceRegistryBuilder().build() );
    	}
    
    	public Configuration(BootstrapServiceRegistry serviceRegistry) {
    		this.bootstrapServiceRegistry = serviceRegistry;
    		this.metadataSources = new MetadataSources( serviceRegistry );
    		reset();
    	}
    
    	public Configuration(MetadataSources metadataSources) {
    		this.bootstrapServiceRegistry = getBootstrapRegistry( metadataSources.getServiceRegistry() );
    		this.metadataSources = metadataSources;
    		reset();
    	}
    	
    	...
    }
    
    • 有多个重载的构造方法,用于不同加载方式。
    • 其实默认的无参构造函数,将创建一个 BootstrapServiceRegistryImpl 类(继承了 BootstrapServiceRegistryBuilder 类)的对象。

【待续……】

创建 sessionFactory

创建 session

事务