🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Hibernate建立数据库连接的时序图如下: ![](https://box.kancloud.cn/04768a345b93e642ac337f55b348110a_772x576.png) 我们简单解释以下几点: * 1,2,3,4,5,6,7,8的目的在于获取一个用于可以制造session(会话)的工厂,即sessionFactory。可以认为这是固有的写法。 * 每个数据库都对应一个sessionFactory。所以在一般的程序中,如果只涉及到对一个数据表进行操作,那么仅仅需要一个sessionFactory. * 通过sessionFactory可以获取到用于连接数据库信息的session(会话)。一个sessionFactory可以制造N个session。每个session都可以起到与数据库进行会话的作用。 * 往往我们通过sessionFactory只获取一个(session)对话。 * 数据的提交采用的是事务。什么是事务呢?简单的理解为,事务是一系列的数据表操作。即一个事务,对应着先后执行N条SQL语句。采用事务的好处就是,如果多条语句中,有一条没有成功执行,事务会自动的进行回滚操作。 * 比如在银行转账时,张三转钱给李四,那么我们需要增加李四的钱的同时减少张三的钱。 * 我们把这样两条SQL语句放到事务中,由事务进行提交执行。 * 假设增加李四的钱的操作被正常的执行了,而执行减少张三的钱的时候,恰恰发生了错误。 * 这时,事务监测到了这个错误,从而回滚增加李四钱的操作。 * 最终达到了:发生错误时,李四的钱不增多,张三的钱不减少。 * Hibernate进行了惰性连接处理。在开启事务时,才会尝试对数据库进行连接。 > 想测试配置信息是否正确,则必须执行至开启事务。 # 测试 ``` package hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.Test; import java.util.List; import java.util.Properties; public class TestCfgXml { @Test public void TestConfig() { try { // 实例化 Configuration configuration = new Configuration(); // 加载数据库配置文件 configuration.configure(); // 读取数据库配置信息 Properties configs = configuration.getProperties(); // 实例化服务注册对象构造器(用于构造服务对象) ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder(); // 传入数据库配置信息 serviceRegistryBuilder.applySettings(configs); // 构造服务注册对象 ServiceRegistry serviceRegistry = serviceRegistryBuilder .buildServiceRegistry(); // 创建会话工厂(session factory)) SessionFactory sessionFactory = configuration .buildSessionFactory(serviceRegistry); // 创建会话(这里的session也是会话的意思,我们以前接触的http中的session,处理的是用户与服务器的对话) Session session = sessionFactory.getCurrentSession(); // 开启事务(使用缓冲池进行数据库的连接) session.beginTransaction(); // 关闭session session.close(); } catch (Exception e) { System.out.println("发生错误:"); System.out.println(e); } } } ``` 此时,我们在hibrenate.cfg.xml中将数据库名javaee更改为javaee1,再进行测试。将得到如下错误: ``` ERROR: Unknown database 'javaee1' 发生错误: org.hibernate.exception.SQLGrammarException: Could not open connection ``` 提示我们数据库未找到。当然了,我们还可以更改其它的配置选项,来查看具体的配置信息错误时的出错信息. ## 参考资料: sesssion与sessionFactory: [http://blog.csdn.net/jiangxindu1/article/details/48037731](http://blog.csdn.net/jiangxindu1/article/details/48037731) [https://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/transactions.html](https://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/transactions.html) 事务: [http://www.jianshu.com/p/eb150b4f7ce0](http://www.jianshu.com/p/eb150b4f7ce0)