热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hibernate核心API

configuration第一步:加载hibernate核心配置文件在hibernate内封装对象ConfigurationcfgnewConfiguration()

configuration

//第一步:加载hibernate核心配置文件// 在hibernate内封装对象Configuration cfg = new Configuration();cfg.configure();

这一步的操作会使得程序找到src下面的hibernate.cfg.xml文件,创建对象,吧配置文件放到对象里面,实际上就是加载核心配置文件

SessionFactory(重点)

1、使用configuration对象创建sessionFactory对象

1)创建SessionFactory对象的过程中所做的事情:根据核心配置文件的数据库配置、映射文件配置部分到数据库中根据映射文件创建对应的表,此项功能的前提条件是在hibernate的核心配置文件hibernate.cfg.xml中配置如下语句:

<property name&#61;"hibernate.hbm2ddl.auto">updateproperty>

比较重要的一点就是&#xff0c;sessionFactory对象的创建很耗资源&#xff1a;

如果采用如上的语句&#xff0c;并且我们在主程序里面加载SessionFactory的时候&#xff0c;每一次的运行都需要加载一次配置文件。导致程序运行的效率比较低。因为我们在创建sessionFactory过程中都要去检查是否已经创建了对应的表。

解决的办法是什么呢&#xff1f;

就是一般在一个hibernate操作中&#xff0c;一个项目只创建一个sessionFactory对象&#xff0c;就类似于ServletContext对象&#xff0c;一次创建就“存活”在整个程序运行的过程中。

具体的实现

1&#xff09;编写一个工具类&#xff0c;用静态的代码块实现&#xff0c;这是因为静态代码块在类加载的时候创建&#xff0c;而且只创建一次

package cn.lzb.utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class SessionFactoryUtils static SessionFactory seFactory &#61; null;static Configuration cfg &#61; null;static {//1、加载核心配置文件cfg &#61; new Configuration();cfg.configure();//2、创建sessionFactoryseFactory &#61; cfg.buildSessionFactory();}//构造方法返回sessionFactorypublic static SessionFactory getSessionFactory() {return seFactory;}
}

运行类测试由本人原来示例中的 超简易版hibernate第一个程序实现 的HibernateDemo.java 更改为如下内容

package cn.lzb.hibernatetest;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;import cn.lzb.entity.User2;
import cn.lzb.utils.SessionFactoryUtils;public class HibernateDemo {&#64;Testpublic void testAdd() {//第一步&#xff1a;加载hibernate核心配置文件// 在hibernate内封装对象//Configuration cfg &#61; new Configuration();//cfg.configure();//第二步&#xff1a;创建SessionFactory对象// 读取核心配置文件内容&#xff0c;根据映射关系在数据库中创建对应的表//SessionFactory seFactory &#61; cfg.buildSessionFactory();SessionFactory seFactory &#61; SessionFactoryUtils.getSessionFactory();//第三步&#xff1a;使用SessionFactory工具类创建session对象Session session &#61; seFactory.openSession();//第四步&#xff1a;开启事务Transaction tx &#61; session.beginTransaction();//第五步&#xff1a;写具体的crud操作User2 user &#61; new User2();user.setUname("zs");user.setPassword("lzb");user.setAddress("CQ");//调用session的方法进行添加session.save(user);//第六步&#xff1a;提交事务tx.commit();//第七步&#xff1a;关闭事务session.close();seFactory.close();}
}

值得注意的是&#xff1a;如果是在一个web项目中&#xff0c;SessionFactory是不需要像实例中的那样关闭的。采用本文 示例中的方式&#xff0c;当第一次使用完毕之后就关闭的话&#xff0c;第二次在调用的时候就无法再调用了&#xff0c;因为静态的代码块只执行一次


session(重点)

1、类似与于jdbc中的connection。对数据库的操作都是通过sesion里面的不同方法来实现crud操作

1&#xff09;添加&#xff1a;save方法
2&#xff09;修改&#xff1a;update
3&#xff09;删除&#xff1a;delete方法
4&#xff09;根据主键查询&#xff1a;load方法和get方法
5&#xff09;用于数据库操作对象&#xff1a;createQuery()和createSQLQuery()
6&#xff09;条件查询&#xff1a;createCriteria方法
等等

2、session对象是一个单线程对象&#xff0c;具体的含义是什么呢&#xff0c;就是不能共享使用。最简单的解释就是&#xff0c;我们手中的钱只能够让我们自己使用。在程序中的理解就是&#xff0c;类似于web中的session对象&#xff0c;当用户访问一个网站的时候&#xff0c;后台会创建一个session对象来跟踪一个用户&#xff0c;但是这个对象仅代表当前用户&#xff0c;其他的用户登录时依然需要重新创建session对象。在hibernate中的session对象虽然是与web的session是两个不同的概念&#xff0c;但是借此来解释也是很不错的例子。总结来说&#xff0c;hibernate的session对象有什么特点呢&#xff1f;

1&#xff09;session对象不能共用&#xff0c;只能够自己使用

Traansaction事务对象

Transaction tx &#61; session.beginTransaction();

在事务对象的操作过程中&#xff0c;必须要有两个事务的操作方法&#xff1a;

1)commit方法:事务的提交
2)rollback方法:事务的回滚

在以上的实例中&#xff0c;代码内容并不是很规范&#xff0c;例如没有异常的处理&#xff0c;但考虑到作为演示的目的&#xff0c;觉得已经达到了这样一个目标&#xff0c;故不作多余的赘述

在此对事务以及事务的四个特性进行简要的介绍

事务&#xff1a;就是应用程序中一系列的操作

事务的四大特性&#xff1a;

1&#xff09;原子性&#xff1a;事务包含的一系列的操作中要么都完成&#xff0c;要么都不被成功执行。2&#xff09;一致性&#xff1a;事务执行的结果必须使得数据库从一个状态变成为另一个一致的状态。3&#xff09;隔离性&#xff1a;一个事务的执行不能收到其他事务执行的干扰&#xff0c;也就是说&#xff0c;一个事务执行的数据对象&#xff0c;对其他的事务而言是被隔离起来不可操作的。4&#xff09;持续性&#xff1a;一个事务一旦提交&#xff0c;那么其对数据库中数据的改变是永久有效的&#xff0c;接下来的其他事务的操作都对该事务的结果有任何的影响

推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
author-avatar
书友58612107_778
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有