




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章 Hibernate基础,8.1 ORM简介,8.2 第一个Hibernate程序,8.3 Hibernate各种文件的作用,8.4 Hibernate工作流程,8.5 Hibernate核心接口,8.1 ORM简介,对象关系映射,其实从字面上就可以理解其含义,就是把关系与对象映射起来,关系指的是关系数据库,而对象指的是程序中的类对象。例如,在数据库中有一个用户表userTable,该表中有id、username、password三个字段(其中id是标识),这样一个表就可以在程序中映射成类“UserTable. java”,该类中定义3个属性,对应表中3个字段,如图8.1所示。,8.2
2、第一个Hibernate程序,【实例8.1】开发一个简单的Hibernate程序,演示Hibernate框架的基本使用方法。 1创建数据库及表 开发之前要做好相关的准备工作,首先要建立数据库及表,在SQL Server 2008/2012中建立数据库“TEST”,在该库中建立表“userTable”,表的结构如表8.1所示。,8.2 第一个Hibernate程序,2创建Java项目 在MyEclipse 2014中,选择主菜单“File”“New”“Java Project”,出现如图8.2所示的“New Java Project”窗口,填写“Project Name”栏(项目名)为Hiber
3、nateDemo。,8.2 第一个Hibernate程序,3添加Hibernate开发能力 在项目src目录下创建一个名为org.util的包,用于放置马上要生成的HibernateSession Factory.java文件。 右击项目名,选择菜单“MyEclipse”“Project FacetsCapabilities”“Install Hibernate Facet”,在弹出的对话框中点“Yes”按钮启动向导,出现如图8.3所示的窗口,选择Hibernate版本为4.1。,8.2 第一个Hibernate程序,单击“Next”按钮,进入如图8.4所示的界面,用于创建Hibernate配
4、置文件,同时创建SessionFactory类,类名默认HibernateSessionFactory,存放于org.util包中。,8.2 第一个Hibernate程序,单击“Next”按钮,进入如图8.5所示的界面,指定Hibernate所用数据库连接的细节。由于在本书【实例1.1】第(2)步已经建好了一个名为sqlsrv的连接,所以这里只要选择DB Driver为sqlsrv即可。,8.2 第一个Hibernate程序,单击“Next”按钮,选择Hibernate框架所需要的类库(这里仅取必需的Core库),如图8.6所示。,8.2 第一个Hibernate程序,单击“Finish”按钮
5、完成添加。经过以上一系列步骤,项目中新增了一个Hibernate库目录、一个hibernate.cfg.xml配置文件、一个HibernateSessionFactory.java类,另外,数据库驱动(sqljdbc4.jar)也被自动载入进来,此时项目的目录树呈现如图8.7所示的状态。,8.2 第一个Hibernate程序,4生成POJO类和映射文件 在项目src下创建一个名为org.vo的包,用来存放与数据库userTable表对应的POJO类和映射文件。 选择主菜单“Window”“Open Perspective”“MyEclipse Database Explorer”,打开MyEc
6、lipse Database Explorer视图。打开sqlsrv连接,选中userTable表,右击,选择菜单“Hibernate Reverse Engineering”,如图8.8所示。,8.2 第一个Hibernate程序,首先,如图8.9所示,选择生成的类及映射文件所在的位置。,8.2 第一个Hibernate程序,单击“Next”按钮,进入如图8.10所示的界面,配置映射文件的细节。单击“Next”,进入如图8.11所示的界面,主要用于配置反向工程的细节,这里保持默认配置即可。,8.2 第一个Hibernate程序,5编写测试类 在src下创建包org.test,在该包下建立测试
7、类,命名为HibernateTest.java,其代码为。 6运行 可以发现,该测试类是包含主函数的类,故可以直接按“Java Application”程序运行,运行后,控制台输出结果如图8.12所示。,8.3 Hibernate各种文件的作用,8.3.1 POJO类及其映射文件 本例的POJO类为UserTable,其源码位于org.vo包的UserTable.java中,代码为。 该类是一个典型的POJO类,定义了3个属性并自动生成了它们的get和set方法,可以发现,类中的属性与表的字段是一一对应的。那么通过什么方法把它们相互关联起来呢?正是*.hbm.xml映射文件!其中“*”一般定义
8、为要映射的类名,该文件在项目中的位置一般与POJO类处于同一目录,故在该包下生成的映射文件就是UserTable.hbm.xml,代码所示。,8.3.2 Hibernate核心配置文件,应用Hibernate就要配置它,系统在添加Hibernate能力时会自动创建Hibernate核心配置文件hibernate.cfg.xml。【实例8.1】生成的该文件的内容为。,8.3.3 HibernateSessionFactory类,HibernateSessionFactory类是自定义的SessionFactory,名字可以根据自己的喜好来决定。这里用的是HibernateSessionFacto
9、ry,其内容及解释为。 从该文件源码可以看出,Session对象的创建大致需要以下3个步骤: (1)初始化Hibernate配置管理类Configuration。 (2)通过Configuration类实例创建Session的工厂类SessionFactory。 (3)通过SessionFactory得到Session实例。,8.4 Hibernate工作流程,Hibernate获取Session对象的主要流程可分为以下4个步骤(相关代码语句都在上面HibernateSessionFactory类的源码中): (1)创建一个Configuration类实例。 该类是整个Hibernate程序的
10、启动类,创建语句如下: private static Configuration configuration = new Configuration(); (2)加载Hibernate核心配置文件。 应用Configuration类实例调用其configure函数,读入指定的配置文件(也就是Hibernate的核心配置文件hibernate.cfg.xml,代码如下: configuration.configure(); 其实该函数中可以带入参数,参数值就是指定配置文件的路径,但如果该配置文件放在classes下则会被自动加载。通过该步的操作,需要连接的数据库及其属性都设置完成了。,8.4 H
11、ibernate工作流程,(3)创建SessionFactory对象。 通过Configuration对象读取到的配置文件信息创建SessionFactory对象,代码如下: serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties().buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); (4)获取Session对象。 SessionFacto
12、ry是获得Session对象的工厂,得到该类对象后,就可以很容易地得到Session对象,用如下语句: session = (sessionFactory != null) ? sessionFactory.openSession(): null; 最后就可以应用Session对象来操作数据库了。,8.4 Hibernate工作流程,有关Session的一些操作及事务的处理会在后面的章节中详细讲解。纵观上例,可从总体上得出Hibernate大致的体系结构,如图8.13所示。,8.5 Hibernate核心接口,8.5.1 Configuration接口 Configuration负责管理Hib
13、ernate的配置信息。Hibernate运行时需要一些底层实现的基本信息,这些信息包括:数据库URL、数据库用户名、数据库用户密码、数据库JDBC驱动类、数据库dialect。 使用Hibernate必须首先提供这些基础信息以完成初始化工作,为后续操作做好准备。这些属性在Hibernate配置文件hibernate.cfg.xml中加以设定,当调用: Configuration cfg = new Configuration().configure(); 时,Hibernate会自动在根目录(即classes)下搜索hibernate.cfg.xml文件,并将其读取到内存中作为后续操作的基础
14、配置。,8.5.2 SessionFactory接口,SessionFactory负责创建Session实例,由Configuration实例构建SessionFactory: Configuration cfg = new Configuration().configure(); SessionFactory sessionFactory = cfg.buildSessionFactory(); Configuration实例cfg会根据当前的数据库配置信息,构造SessionFacory实例并返回。SessionFactory一旦构造完毕,即被赋予特定的配置信息,也就是说,cfg的任何变更
15、将不会影响到已经创建的SessionFactory实例。如果需要使用基于变更后的cfg实例的SessionFactory,需要从cfg重新构建一个SessionFactory实例。,8.5.3 Session接口,Session是Hibernate持久化操作的基础,提供了众多持久化方法,如save、update、delete、query等。通过这些方法,透明地完成对象的增、删、改、查等操作。 同时,值得注意的是,Hibernate框架中Session的设计是非线程安全的,即一个Session实例只可由一个线程使用,对同一个Session实例的多线程并发调用将导致难以预知的错误。Session实
16、例由SessionFactory构建,代码如下: SessionFactory sessionFactory = cfg.buldSessionFactory(); Session session = sessionFactory.openSession(); 之后,就可调用Session提供的save、get、delete、query等方法完成持久层操作。,8.5.4 Transaction接口,Transaction是Hibernate中进行事务操作的接口,Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction,甚至可
17、以是CORBA 事务。之所以这样设计是为了让开发者能够使用一个统一的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。事务对象通过Session创建,用如下语句: Transaction ts = session.beginTransaction(); 关于事务的具体应用将在后面章节中讲解。,8.5.5 Query接口,Query接口是Hibernate的查询接口,用于向数据库中查询对象,在它里面包装了一种HQL(Hibernate Query Language)查询语言,采用了新的面向对象的查询方式,是Hibernate官方推荐使用的标准数据库查询语言。Query和HQL是分不开
18、的,写出的查询语句形如: Query query = session.createQuery(from UserTable where id=1); 上面的语句中查询条件id的值“1”是直接给出的,如果没有给出,而是设为参数就要用Query接口中的方法来完成。例如以下语句: Query query = session.createQuery(from UserTable where id=?); 就要在后面设置其值: query.setInt(0, 要设置的值); 上面的方法是通过“?”来设置参数的,还可以用“:”后跟变量的方法来设置参数,如上例可以改为: Query query = session.createQuery(from UserTable where id=:idValue); query.setInt(idValue,要设置的id值);,8.5.5 Query接口,由于上例中的id为int类型,所以设置的时候用setInt(),如果是String类型就要用setString()。还有一种通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45210-2025增材制造标准测试件增材制造系统几何成形能力评估
- 离婚协议与财产分割合同范本
- 地铁建设项目施工及设备安装合同
- 新车购销合同书
- 施工合同安全责任书:版
- 客户预收款退款合同担保
- 4感官帮助我 教学设计-2024-2025学年科学一年级上册冀人版
- 人力资源服务合同(二)
- 7 不甘屈辱奋勇抗争 第一课时 教学设计-2023-2024学年道德与法治五年级下册统编版
- 度员工派遣合同范本
- 四年级数学(四则混合运算带括号)计算题专项练习与答案
- 2024年中考语文(云南卷)真题详细解读及评析
- 电梯消防安全与维护
- 夜景照明吊绳施工方案
- 2025借款合同范本个人向公司借款
- 文化差异下的家庭教育与亲子关系探讨
- 2025年中国棕榈粕行业市场现状、前景分析研究报告(智研咨询发布)
- 【大学课件】工程伦理与社会
- 2025届江苏省南京市、盐城市高三语文一模调研作文题目解析及范文:直路、陡坡、弯道
- 幼儿教育专业国家技能人才培养工学一体化课程设置方案
- 货物学 课件全套 孔月红 项目1-8:货物与货物学概述-集装箱货物
评论
0/150
提交评论