收藏 分享(赏)

第6章Hibernate核心组件详解.ppt

上传人:ysd1539 文档编号:7983684 上传时间:2019-06-02 格式:PPT 页数:107 大小:687KB
下载 相关 举报
第6章Hibernate核心组件详解.ppt_第1页
第1页 / 共107页
第6章Hibernate核心组件详解.ppt_第2页
第2页 / 共107页
第6章Hibernate核心组件详解.ppt_第3页
第3页 / 共107页
第6章Hibernate核心组件详解.ppt_第4页
第4页 / 共107页
第6章Hibernate核心组件详解.ppt_第5页
第5页 / 共107页
点击查看更多>>
资源描述

1、2019/6/2,1,梅花香自苦寒来!,2019/6/2,2,| 海 有 | 壁 无 |一份耕耘。 | 纳 容 | 立 欲 |一分收获。| 百 乃 | 千 则 |岂能事事如意,但求无愧于心。| 川 大 | 仞 刚 |把微笑留给世界,让世界因你微笑!,3,温故而知新!,4,5.1 Hibernate基础知识,5.1.1 Hibernate的发展与特点 5.1.2 Hibernate软件包的下载和配置 5.1.3 Hibernate的工作原理,5,第5章Hibernate框架技术入门,5.1 Hibernate基础知识 5.2 Hibernate的核心组件 5.3 基于Struts2+Hibern

2、ate的应用实例,6,5.1.3 Hibernate的工作原理,7,第6章Hibernate核心组件详解,6.1 Hibernate的配置文件 6.2 Hibernate的PO对象 6.3 Hibernate的映射文件 6.4 Hibernate的Configuration类 6.5 Hibernate的SessionFactory接口 6.6 Hibernate的Session接口 6.7 Hibernate的Transaction接口 6.8 Hibernate的Query 接口 6.9 Hibernate的应用实例,8,6.1 Hibernate的配置文件,6.1.1 hibernate

3、.cfg.xml 6.1.2 hibernate.properties,9,6.1.1 hibernate.cfg.xml,Hibernate框架的配置文件用来为程序配置连接数据库的参数,例如,数据库的驱动程序名、URL、用户名和密码等等。Hibernate的基本配置文件有两种形式:hibernate.cfg.xml和hibernate.properties。前者包含了Hibernate与数据库的基本连接信息,在Hibernate工作的初始阶段,这些信息被先后加载到Configuration和SessionFactory实例中;前者还包含了Hibernate的基本映射信息,即系统中每一个类与其

4、对应的数据库表之间的关联信息,在Hibernate工作的初始阶段,这些信息通过hibernate.cfg.xml的mapping元素被加载到Configuration和SessionFactory实例中。这两种文件信息包含了Hibernate的所有运行期间用到的参数。两者的配置内容基本相同,但前者的使用稍微方便一些,例如,在hibernate.cfg.xml 中可以定义要用到的xxx.hbm.xml 映射文件,而使用hibernate. properties 则需要在程序中以编码方式指明映射文件。hibernate.cfg.xml是Hibernate的默认配置文件。,10,【例6-1】hibe

5、rnate.cfg.xml配置文件的基本结构(hibernate.cfg.xml)com.mysql.jdbc.Driverjdbc:mysql:/localhost/testrootroot20,11,org.hibernate.dialect.MySQLInnoDBDialectupdate15000,12,truetrue org.hibernate.cache.EhCacheProvidertrue 305,13,14,6.1 Hibernate的配置文件,6.1.1 hibernate.cfg.xml 6.1.2 hibernate.properties,15,6.1.2 hiber

6、nate.properties,hibernate.properties配置文件是Hibernate框架的另外一种配置数据库参数的形式,文件使用“#”为注释,去掉“#”就可以使用里面的设置,该文件给出了配置数据库的方法和对常用数据库的配置。【例6-2】是Hibernate3.6.0文件夹“projectetc”下的Hibernate框架提供的模板。,16,【例6-2】Hibernate的hibernate.properties配置文件模板(hibernate.properties),17,第6章Hibernate核心组件详解,6.1 Hibernate的配置文件 6.2 Hibernate的P

7、O对象 6.3 Hibernate的映射文件 6.4 Hibernate的Configuration类 6.5 Hibernate的SessionFactory接口 6.6 Hibernate的Session接口 6.7 Hibernate的Transaction接口 6.8 Hibernate的Query 接口 6.9 Hibernate的应用实例,18,6.2 Hibernate的PO对象,6.2.1 Hibernate的PO对象的基础知识 6.2.2 Hibernate的PO对象的状态,19,6.2.1 Hibernate的PO对象的基础知识,在Hibernate的应用程序中,每一个数据

8、库的表都对应一个持久化对象PO。PO可以看成是与数据库中的表相映射的Java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。 PO其实就是一个普通JavaBean,只要声明时遵循一定的规则就是一个PO。【例6-3】就是一个持久化类。,20,【例6-3】持久化类(UserInfoPO.java) package PO; public class UserInfoPO private int id;private String userName;private String password;,21,public int getI

9、d() return this.id; public void setId(int id) this.id = id;public String getUserName() return this.userName; public void setUserName(String userName) this.userName = userName;public String getPassword() return this.password; public void setPassword(String password) this.password = password; ,22,该PO

10、对应数据库的info表。该表有3个字段:id(int类型),userName(varchar类型),password(varchar类型)。,23,6.2 Hibernate的PO对象,6.2.1 Hibernate的PO对象的基础知识 6.2.2 Hibernate的PO对象的状态,24,6.2.2 Hibernate的PO对象的状态,Hibernate的PO对象有三种状态:临时状态又称临时态、持久状态又称持久态和托管状态又称脱管态。处于持久态的对象也称为PO,临时对象和脱管对象也称为VO(Value Object)。,25,1.临时态 由new命令开辟内存空间时刚生成的Java对象就处于临

11、时态。 例如: UserInfoPO ui=new UserInfoPO(); 临时对象在内存中是孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将临时对象与数据库相关联,并将数据对应的插入数据库中,此时该临时对象转变成持久化对象。,26,2.持久态 处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果是用Hibernate的delete()方法,对应的持久对象就变成临时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。 当一个session执行close(

12、)或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在Hibernate持久层的管理之下。 持久对象具有如下特点: 和session实例关联。 在数据库中有与之关联的记录。,27,3.脱管态 当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。 脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象。 脱管对象具有如下特点: 本质上与临时对象相同,在没有任何变量引用它时,JVM会在适当的时

13、候将它回收。 比临时对象多了一个数据库记录标识值。,28,4.Session中常用方法对PO对象状态变化 当通过get()或load()方法得到的PO对象它们都处于持久态,但如果执行delete(po)时(但不能执行事务),该PO状态就处于linshi态(表示和session脱离关联);因delete而变成临时可以通过save()或saveOrUpdate()变成持久态;当把session关闭时,session缓存中的持久态的PO对象也变成托管态;因关闭session而变成托管态的可以通过lock()、save()、update()变成持久态;持久态实例可以通过调用delete()变成临时状态

14、。,29,5.save()和update()区别 save()的作用是把一个新的对象保存;update()是把一个脱管状态的对象(一定要和一个记录对应)更新到数据库 。,30,6.update()和saveOrUpdate()区别 saveOrUpdate()基本上就是合成了save()和update(),而update()只是update()。 通常下面的场景会使用update()或saveOrUpdate(): 程序在第一个session中加载对象,接着把session关闭。 该对象被传递到表现层。 对象发生了一些改动。 该对象被返回到业务逻辑层最终到持久层。 程序创建第二session调

15、用第二个session的update()方法持久这些改动。,31,第6章Hibernate核心组件详解,6.1 Hibernate的配置文件 6.2 Hibernate的PO对象 6.3 Hibernate的映射文件 6.4 Hibernate的Configuration类 6.5 Hibernate的SessionFactory接口 6.6 Hibernate的Session接口 6.7 Hibernate的Transaction接口 6.8 Hibernate的Query 接口 6.9 Hibernate的应用实例,32,6.3 Hibernate的映射文件,Hibernate的映射文件把

16、一个PO对象与一个数据表映射起来。每一个表对应一个扩展名为.hbm.xml的映射文件。映射文件也称映射文档,用于向Hibernate提供关于将对象持久化到关系型数据库表中的信息。 持久化对象的映射定义可全部存储在同一个映射文件中,也可将每个对象的映射定义存储在独立的文件中。后一种方法较好,因为将大量持久化类的映射定义存储在一个文件中比较麻烦,建议采用每个类一个文件的方法来组织映射文档。使用多个映射文件还有一个优点:如果将所有映射定义都存储到一个文件中,将难以调试和隔离特定类的映射定义错误。,33,映射文件的命名规则是,使用持久化类的类名,并使用扩展名hbm.xml。 映射文件需要在hibern

17、ate.cfg.xml中注册,最好与功能相关对象类放在同一目录中,这样修改起来很方便。【例6-4】是一个UserInfoPO类对应的映射文件。 【例6-4】PO对象的映射文件(UserInfoPO. hbm.xml),34,35,36,第6章Hibernate核心组件详解,6.1 Hibernate的配置文件 6.2 Hibernate的PO对象 6.3 Hibernate的映射文件 6.4 Hibernate的Configuration类 6.5 Hibernate的SessionFactory接口 6.6 Hibernate的Session接口 6.7 Hibernate的Transact

18、ion接口 6.8 Hibernate的Query 接口 6.9 Hibernate的应用实例,37,5.1.3 Hibernate的工作原理,38,6.4 Hibernate的Configuration类,Configuration类的主要作用是解析Hibernate的配置文件和映射文件中的信息,即负责管理Hibernate的配置信息。Hibernate运行时需要获取一些底层实现的基本信息,如数据库驱动程序类、数据库的URL、数据库登录名、数据库登录密码等等。这些信息定义在Hibernate的配置文件中。然后通过Configuration对象的buildSessionFactory()方法创

19、建SessionFactory对象,所以Configuration对象一般只有在获取SessionFactory对象时需要使用。当获取了SessionFactory对象之后,由于配置信息已经由Hibernate维护并绑定在返回的SessionFactory中,因此该Configuration已无使用价值。,39,当执行Configuartion conf=new Configuration().configure( )语句时,Hibernate会自动在classpath中搜寻Hibernate配置文件;在Java Web应用中,Hibernate会自动在WEB-INF/classes目录下搜寻

20、Hibernate配置文件。,40,以下代码可以说是最常见的使用Configuration的方式: Configuration cfg=new Configuration().configure(); 或者 Configuration cfg=new Configuration().configure(“hibernate.cfg.xml“);,41,第6章Hibernate核心组件详解,6.1 Hibernate的配置文件 6.2 Hibernate的PO对象 6.3 Hibernate的映射文件 6.4 Hibernate的Configuration类 6.5 Hibernate的Sess

21、ionFactory接口 6.6 Hibernate的Session接口 6.7 Hibernate的Transaction接口 6.8 Hibernate的Query 接口 6.9 Hibernate的应用实例,42,6.5 Hibernate的SessionFactory接口,SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。可以通过Configuration实例构建SessionFactory对象。 例如: Configuration cfg=new Configuration().configure(); Session

22、Factory sf=cfg.buildSessionFactory();,43,Configuration对象会根据当前的配置信息,生成SessionFactory对象。SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息,即以后配置的改变不会影响到创建的SessionFactory对象。如果要把改动后的配置信息赋给SessionFactory对象,需要从新的Configuration对象生成新的SessionFactory对象。 SessionFactory是线程安全的,可以被多个线程调用。因构造SessionFactory很消耗资源,所以多数情况下一个应用中只初始化一个

23、SessionFactory,为不同的线程提供Session。 当客户端发送一个请求线程时,SessionFactory生成一个Session 对象来处理客户请求。,44,第6章Hibernate核心组件详解,6.1 Hibernate的配置文件 6.2 Hibernate的PO对象 6.3 Hibernate的映射文件 6.4 Hibernate的Configuration类 6.5 Hibernate的SessionFactory接口 6.6 Hibernate的Session接口 6.7 Hibernate的Transaction接口 6.8 Hibernate的Query 接口 6.9

24、 Hibernate的应用实例,45,6.6 Hibernate的Session接口,6.6.1 Session接口的基础知识 6.6.2 通过方法获取持久化对象(PO) 6.6.3 操作持久化对象(PO)的常用方法,46,6.6.1 Session接口的基础知识,Session对象是Hibernate技术的核心,持久化对象的生命周期、事务的管理和持久化对象的查询、更新和删除都是通过Session对象来完成的。Hibernate在操作数据库之前必须先取得Session对象,相当于JDBC在操作数据库之前必须先取得Connection对象一样。Session对象不是线程安全的,一个Session

25、对象最好只由一个单一线程来使用。同时该对象的生命周期要比SessionFactory要短,一个应用系统中可以自始至终只使用一个SessionFactory对象,其生命通常在完成数据库的一个短暂的系列操作之后结束。Session对象通过SessionFactory对象的getCurrentSession()或者openSession()方法获取,代码如下:,47,Configuration cfg= new Configuration().configure(); SessionFactory sf= cfg.buildSessionFactory(); Session session=sf.o

26、penSession();,48,一个持久化类从定义上与普通的JavaBean类没有任何区别,但是它与Session关联起来后,就具有了持久化的能力。当然,这种持久化操作是受Session控制的,即通过Session对象装载、保存、创建或查询持久化对象(PO)。Session类有save(),delete(),update()和load()等方法,来分别完成对持久化对象的保存、删除、修改、加载等操作。 Session 类方法的用途可分为以下5类:,49,获取持久化对象:get()和load()等方法。 持久化对象的保存、更新和删除:save(),update(),saveOrUpdate()和

27、delete()等方法。 createQuery()方法:用来从Session生成Query对象,此方法将在讲解Query接口的章节中介绍。 beginTransaction()方法:用来从Session生成Transaction对象,此方法将在讲解Transaction接口的章节中介绍。 管理Session的方法:isOpen(),flush(),clear(),evict()和close()等方法,其中isOpen()方法用来检查Session是否仍然打开;flush()方法用来清理Session缓存,并把缓存中的SQL 语句发送出去;clear()方法用来清除Session 中的所有缓存

28、对象;evict()方法用于清除Session缓存中的某个对象;close()方法用来关闭Session。,50,6.6 Hibernate的Session接口,6.6.1 Session接口的基础知识 6.6.2 通过方法获取持久化对象(PO) 6.6.3 操作持久化对象(PO)的常用方法,51,6.6.2 通过方法获取持久化对象(PO),获取持久化对象(PO)的方法主要有两种:get()方法和load()方法,它们都是通过主键id来获取PO对象。,52,1.使用get()方法获取PO对象 通常可以使用的get()方法获取PO对象。 例如: public Object get(Class c

29、lassName, Serializable id) className是类的类型,id是对象的主键值,如果id的类型是int,可通过new Integer(id)的方法生成一个Integer对象。 以下程序可取得主键id为66的UserInfoPO对象: UserInfoPO ui = (UserInfoPO)session.get(UserInfoPO.class, new Integer(66);,53,get()方法获取PO对象时执行顺序如下: (1)首先通过id在Session缓存中查找对象,如果存在与id主键值对应的对象,直接将其返回。 (2)如果在Session对象中没有查询到对

30、应的对象,则在二级缓存中查找,找到后将其返回。 (3)如果在前两步中都找不到该对象,则从数据库加载拥有此id的对象。 从以上步骤中可以看出,get()方法并不总是发送SQL语句,进行查询数据库,只有缓存中无此数据时,才向数据库发送SQL 语句以取得数据。,54,2.使用load()方法获取PO对象 load()方法和get()方法一样都可以通过主键id的值从数据库中加载一个持久化对象。 例如: UserInfoPO ui = (UserInfoPO)session.load(UserInfoPO.class, new Integer(66);,55,get()方法和load()方法的区别如下:

31、 在立即加载PO对象时(当Hibernate在从数据库中取得数据组装好一个对象后,会立即再从数据库取得数据组装此对象所关联的对象),如果对象存在,get()方法和load()方法没有区别,它们都可取得已初始化的对象;但如果当对象不存在且是立即加载时,使用get()方法则返回null,而使用load()方法则弹出一个异常。因此使用load()方法时,要确认查询的主键id一定是存在的,从这一点来讲,它没有get()方法方便。 在延迟加载对象时(在Hibernate从数据库中取得数据组装好一个对象后,不会立即再从数据库取得数据组装此对象所关联的对象,而是等到需要时,才会从数据库取得数据组装此关联对象

32、),get()方法仍然使用立即加载的方式发送SQL 语句,并得到已初始化的对象,而load()方法则根本不发送SQL语句,它返回一个代理对象,直到这个对象被访问使用时才被初始化。,56,6.6 Hibernate的Session接口,6.6.1 Session接口的基础知识 6.6.2 通过方法获取持久化对象(PO) 6.6.3 操作持久化对象(PO)的常用方法,57,6.6.3 操作持久化对象(PO)的常用方法,1.使用save()方法操作PO对象 Session中的save()方法是将一个PO对象的属性取出放入PreparedStatement(具有预编译功能的SQL类)语句中,然后向数据

33、库表中插入一条记录(或者多条记录,如有级联关系)。下面的代码是把一个新建UserInfoPO对象持久化到数据库中,即把一条记录插入到数据库表中。,58,例如: UserInfoPO ui= new UserInfoPO(); ui.setId(66);/为对象设定一个id值 Session session=sf.openSession();/打开Session Transaction tx = session.beginTransaction(); /开启事务 session.save(ui);/使用方法保存数据 mit()/提交事务 session.close();/关闭Session 上述

34、代码等价于: insert into info(id, userName, password) values(66,”李想”,”123456A”),59,在调用save()方法时,并不立即执行SQL语句,而是等到清理完缓存时才执行。如果在调用save()方法后又修改了UserInfoPO的属性,则Hibernate框架将会发送一条insert into语句和一条update语句来完成持久化操作。,60,例如: UserInfoPO ui= new UserInfoPO(); ui.setId(66);/为对象设定一个id ui.setUserName(“孟想“);/设定用户名的值 Sessio

35、n session=sf.openSession()/打开Session Transaction tx = session.beginTransaction(); /开启事务 session.save(ui); ui.setUserName(“李想“);/修改用户名的值 mit()/提交事务 session.close()/关闭Session 上述代码等价于: insert into info(id,userName, password) values(66,”李想”,”123456A”) update ui set userName=? password=? where id=?,61,2.

36、使用update( )方法操作PO对象 Session的update()方法可以用来更新脱管对象到持久化对象。 例如: UserInfoPO ui = new UserInfoPO(); Session session=sf.openSession();/打开Session Transaction tx = session.beginTransaction(); /开启事务 ui= (UserInfoPO)session.get(UserInfoPO.class, new Integer(66); ui.setUserName(“李想“); session.update(ui); /更新脱管对

37、象 mit();/提交事务 session.close()/关闭Session,62,使用update()方法时,Hibernate框架并不是不立即发送SQL语句,而是对对象的更新操作将积累起来,在事务提交时由flush()清理缓存,并将发送一条SQL语句完成全部的更新操作。,63,3.使用saveOrUpdate()方法操作PO对象 在实际Web项目应用中,Java Web程序员往往并不会注意一个对象是脱管对象还是临时对象,但是对脱管对象使用save()方法是不对的,对临时对象使用update()方法也是不对的。为了解决这个问题,便产生了saveOrUpdate()方法。 saveOrUpd

38、ate()方法兼具save()和update()方法的功能,对于传入的对象,saveOrUpdate()方法首先判断该对象是脱管对象还是临时对象,然后调用合适的方法。,64,saveOrUpdate()方法的应用如下: UserInfoPO ui=new UserInfoPO(); ui.setId(66);/为对象设定一个id值 Session session=sf.openSession();/打开Session Transaction tx = session.beginTransaction(); /开启事务 session. saveOrUpdate (ui);/使用方法保存数据 m

39、it();/提交事务 session.close();/关闭Session,65,那么,saveOrUpdate()方法如何判断一个对象是脱管对象还是临时对象呢?当满足以下情况之一时,Hibernate就认为它是临时对象。 在映射文件中为元素设置了unsaved-value属性,并且实体对象的id取值和unsaved-value匹配(默认为null)(注意:int 和long 型的主键id 的unsaved-value 默认值为0)。 在映射文件中为元素设置了unsaved-value 属性,并且实体对象的version 取值和unsaved-value 匹配(默认为null)。,66,4.使

40、用delete( )方法操作PO对象 Session的delete()方法负责删除一个对象(包括持久对象和脱管对象)。 例如: UserInfoPO ui = new UserInfoPO(); Session session=sf.openSession();/打开Session Transaction tx = session.beginTransaction(); /开启事务 ui = (UserInfoPO)session.get(UserInfoPO.class, new Integer(66); session.delete(ui); /删除持久对象 mit();/提交事务 ses

41、sion.close();/关闭Session 上述代码等价于: select u.* from ui u where u.id=66 delete from ui where id=66,67,使用delete()方法删除对象时,会有一些性能上的问题。例如从以上代码中可以看出,当删除一个对象时,先调用get()方法加载这个对象,然后调用delete()方法删除对象,但此方法发送了一条select语句和一条delete语句。实际上select语句是不必要的,这种情况在批量删除时尤其明显。为了解决批量删除的性能问题,常用的办法是使用批量删除操作。,68,例如: UserInfoPO ui= ne

42、w UserInfoPO(); Session session=sf.openSession();/打开Session Transaction tx = session.beginTransaction(); /开启事务 Query q=session.createQuery(“delete from UserInfoPO“);/使用HQL语句进行删除 q.executeUpdate(); /删除对象 mit();/提交事务 session.close();/关闭Session 上述代码等价于: delete from info,69,第6章Hibernate核心组件详解,6.1 Hibern

43、ate的配置文件 6.2 Hibernate的PO对象 6.3 Hibernate的映射文件 6.4 Hibernate的Configuration类 6.5 Hibernate的SessionFactory接口 6.6 Hibernate的Session接口 6.7 Hibernate的Transaction接口 6.8 Hibernate的Query 接口 6.9 Hibernate的应用实例,70,6.7 Hibernate的Transaction接口,Transaction接口是对实际事务实现的一个抽象,这些实现包括JDBC事务或者JTA等等。这样设计允许开发人员能够使用一个统一的事务

44、操作接口使得自己的项目可以在不同的环境和容器(Container)之间方便地迁移。 Hibernate框架中的事务是通过配置hibernate.cfg.xml文件选择使用JDBC或者是JTA事务控制。在Transaction接口中主要定义了commit()和rollback()两个方法,前者是提交事务的方法;后者是回滚事务的方法,还提供的有wasCommitted()方法。,71,Transaction的运行与Session接口相关,可调用Session的beginTransaction()方法生成一个Transanction实例。 例如: Transaction tx = session.b

45、eginTransaction();,72,第6章Hibernate核心组件详解,6.1 Hibernate的配置文件 6.2 Hibernate的PO对象 6.3 Hibernate的映射文件 6.4 Hibernate的Configuration类 6.5 Hibernate的SessionFactory接口 6.6 Hibernate的Session接口 6.7 Hibernate的Transaction接口 6.8 Hibernate的Query 接口 6.9 Hibernate的应用实例,73,6.8 Hibernate的Query 接口,6.8.1 Query接口的基本知识 6.8

46、.2 Query接口的常用方法,74,6.8.1 Query接口的基本知识,使用Query类型的对象可以方便查询数据库的数据,它主要使用HQL或者原生SQL(Native SQL)查询数据。Query对象不仅能查询数据,还可以绑定参数、限制查询记录数量,以及批量删除和批量更新等等。,75,例如: Configuration cfg=new Configuration().configure(); SessionFactory sf=cfg.buildSessionFactory(); Session session=sf.getCurrentSession(); Transaction tx

47、=session.beginTransaction(); Query query=session.createQuery(“from UserInfoPO“); List list = query.list(); mit();,76,上面代码表示Query对象通过Session对象的createQuery()方法创建,其中的方法参数值“from UserInfoPO“是HQL语句,表示要读取所有UserInfoPO类型的对象。即读取UserInfoPO表中的所有记录,把每条记录封装成UserInfoPO对象后保存到List对象中并返回List对象。 Query对象只在Session对象关闭之前

48、有效,否则就会抛出SessionException类型的违例。因为Session对象就像JDBC中的Connection对象,表示与数据库的一次连接。关闭Connection对象,Statement对象则不能使用。所以关闭Session对象,也就不能使用Query对象。,77,6.8 Hibernate的Query 接口,6.8.1 Query接口的基本知识 6.8.2 Query接口的常用方法,78,6.8.2 Query接口的常用方法,Query 接口的常用方法有: setXxx()方法:用于设置HQL中问号或变量的值。 list()方法:返回查询结果,并把查询结果转变成List 对象。

49、excuteUpdate()方法:执行更新或删除语句。,79,1.使用setXXX( )方法为HQL语句设置参数 Query接口中setXxx()方法主要用来为HQL中的问号“?”和变量设置参数,根据参数的数据类型,常用的setXxx()方法如下: setBinary():设置类型为binary的参数。 setBoolean( ):设置类型为boolean的参数。 setByte( ):设置类型为byte的参数。 setCharacter( ):设置类型为char的参数。 setDate( ):设置类型为Date的参数。 setDouble( ):设置类型为double的参数。 setFloa

50、t( ):设置类型为float的参数。 setInteger( ):设置类型为int的参数。 setLong( ):设置类型为long的参数。 setString( ):设置类型为String的参数。,80,上述方法都有两种使用方式: (1)setString(int position,String value):用于设置HQL 中“?”的值;其中position 代表“?”在HQL 中的位置,value 为“?”设置的值。 例如: Query query = session.createQuery(“from UserInfoPO u where u.age? and u.userName like ?“); query.setInteger(0,22); /设置第一个问号的值为22 query.setString(1,“%志%“);/设置第二个问号的值为“%志%“,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报