00:01
下面我们来看一下harmlet的检索方式,什么叫检索方式啊?说白了就是如何去查询数据。检索查询页。哈提供了以下几种检索对象的方式。第一种。导航对象图检索方式。就是根据已经获取的对象,然后通过get方法导航到其他对象,这个就叫导航对象图检索方式。比方说我搞到了一个order order里边有一个点get customer,诶,我通过这个order获取到了customer。这就是导航对象图介绍方式,这个我们前面已经搞过了。第二个OI检测方式。按照对象的OID来介绍,对象主要指的是三身的get方法跟漏的方法。后三个没说过,我们来重点的学习。
01:00
HQL检索方式,使用面向对象的HQL查询语言来做。这是我们这节课的重点。QBC使用criteria。使用query criteria API来检索对象。这种API封装了基于字符串形式的查询语句,提供了更加面向对象的查询接口,那这个呢,我们在做第一个象的时候,我们会写一个那基于QBC跟HQL的一个积累,那个时候我们会更加深刻的来了解这个QBC,那这节课的话呢,我们也会说一下这个QBC。还有一个本地circle的建设方式,即使用本地数据库的circle口来查询对象。就是说我们这上面那个查询里边啊,我还可以写上本地的circle。比方说。买色里边的limit or龙口里边的number可以的。我们先来看这个HQL的检测方式。
02:00
HQL叫harmlet qua language叫hale查询语言,它是面向对象的查询语言。它跟circleq语言呢有些相似,我们前面已经讲过circleq了啊,所以说这块我们说这个HQL呢并不难,它跟circleq有很大的这个类似的地方。在harmlet提供的各种检索方式中,HKL是使用最广的一种检索方式,它有如下功能,我们一个一个过一下啊,看一看哪些是我们能够想到的,这个功能大致上会是什么样子。第一个啊。设定各种查询语句G加那个where。第二个,检索出对象的部分属性,我不是把这个对象全弄出来,而只是获取其部分属性,那这个也叫投影查询。分页查询表跟表之间连接。
03:00
分组啊,可以使用having跟group,可以使用内置的聚合函数,比方说some m max。A,这些是吧。支持子查询,支持动态绑定参数,能够使用用户自定义的SQ函数或标准的搜函数。那四个Q具备的大部分功能我都可以用,当然我们这个只能是查询哈。看一看如何来用HKL进行检索吧。第一个,我们需要通过session create query方法创建一个query对象,那我在创建这个query对象的时候,我需要传入一个HQL语句。这个HQL语句里边是可以带那个站位符的。第二个动态绑定参数,就像那个prepare statement一样,是吧,去啊,给一个一个参数赋值,第三个调用宽相关方法执行查询。
04:02
Quary接口支持方法链的变成方式啥意思呢?就是说有可能我需要为宽RY去附好需要为query。创建query那个HKR语句。对好几个位置去赋值对吧,所以说我可能要多次调这个S的方法那。宽这块有有一个好处,就是我在调这个set方法之后啊,返回的不是word,而是宽实力本身,于是的话呢,我还可以接着来调set方法,就调一个set,点再set,点再set,因为这个set方法返回的是这个query接口的实现的那个对象。这个我们一会儿的话呢,通过这个编程的方式的话呢,我们可以看得到。HKL跟circle,那HQL呢是。面向对象的harm,姆,他负责解析HQL语句,而且负责把它翻译成对应的circle口。那HQL查询的主体是域模型中的类以及类的属性。
05:04
而circle口是跟关系关系数据库绑定在一起的,SQ查询语句中主要是表跟表的字段。这样的区别,其实我能想得到啊。再看一点,我们再写看如何绑定参数。绑定参数呢有两种方式,一种是我们熟知的按位置绑定,就是加这个问号的方式,还有一种是按参数名绑定,参数名呢需要以这个冒号开头。相关方法括号接口呢,也提供了set in呀,Set float呀,Set string啊,Set data呀这样的set叉叉叉方法,那还需要注意这样的两个,比方说set entity。那我们在。绑定这个参数的时候啊,这个参数也可以是一个实体类的对象,如果你不知道。
06:00
这个纯的参数是什么类型的话,你还可以来用这个setter。好,HKL还支持order by对查询结果进行排序,OK,以上的话呢,就是我们说的HKL的这个基础,但后边我们还有什么关于这个,呃。关于。关于翻页啊,关于这个命名查询呢,这个的话呢,我们后边就慢慢说,那现在的话呢,我们把这个HQL这个hello word先搞起来。新建一个hale。工程。环境的话直接复制了。Lucy。Wait。然后呢,Harm配置文件。
07:00
G。哎哟,不是力哈,是那个什么呀。Harmony配置文件。Proceed。好的。这个力吧,我们简单的改一下,我们这把的话呢,我们来选择连接Oracle,因为我们Oracle。里边我们有现成的数据是吧,我们前面讲。这个奥运口腔circle口的时候的话呢,我们有一个employees,还有一个departments,这里边呢,有很多数据可以供我直接使用。因为我们这个时候再用买circle,就用几条数据的话呢,没有那个感觉。所以说我来连接Oracle,既然连接Oracle的话呢,我们需要把Oracle的驱动搞进来,MYSQL这个驱动就不要了。
08:05
Oracle的驱动。地盘。Oracle。DB找到JDBC。Lib o jdbc14就是。整个放到。Past。看配置文件。基本信息方言需要改,需要改成Oracle Oracle实例的。一盘。Java open source找到。Hat4.2.4。Project ETC。The properties。
09:02
走。关掉。是。CTRLF。Oracle。20G。Lucy。色卖。0AUTO。隔离级别。是ID之空删除的时候啊,C3P0我们去掉。因为我们现在毕竟不是项目是吧,我们是一个这个测试,测试的时候的话呢,C3B0。每一次都需要初始化一个资源。数据源那。Says says。删掉。
10:01
先看看这个奥运数据库能不能连这块还没改呢,是吧?刷。驱动的名字在这。Lucy。再看这个URL。帮测试一下。车之内直接复制一个。No。
11:01
导入UNIT4。直接搞一个。这个可以拿掉了,后边都不要。提醒一下,没有异常的话就OK了。OK,没问题,这样的话呢,这个数据库就连上了。我们来创建对应的实体类。Bob。I will it。爱的硅谷结束了,大家看到了吧,硅谷。保存这个的话也需要改一下。现在的话呢,我们来创建对应的实体类说有两个,一个叫department部门。
12:01
文里边有员工也叫。一门和员工之间是双向一对多的关联关系。Private in ID private name private类型的类型的private department类型的DPT。对应的方法。Parliament。Private形的,ID形的name private。部门里边可能会有很多的员工。EPS等于用哈希。对应的拜赛方法。
13:06
由harmon插件生成对应的文件finish。文件需要改一下。数据表,我们说以硅谷开头。为什么不写departments啊?我们刚才建那个数据表里边我们有employees跟。Department有这两个是吧,我们一会儿那个数据呢,就是从这两个数据表里边直接导入,所以说你这个表面不能重复了吧。ID。Native。一对多供应社。硅谷。
14:01
Two。表示住是吧。Ad应该叫什么呀?叫e pd。ID当前这个department在employee这边有个外店,你不能叫ID啊,叫第一批的ID,这个没问题。再看我们的。Employee。Employee。硅谷。这个值呢,也不对,那叫ID,就是因为先前见过一次啊,有缓存的原因是吧。一种ID吧。叫name里边我们也叫。Live。Email是没问题的e pd。Department。DEPTD是吧,这个DEPTD需要跟谁对啊跟。
15:05
对里面的它来对应。然后呢,我数据表叫g employee。应该跟这个相。没问题。这是双向一对多关联关系,我们一边前面的话呢,已经详细的跟大家阐述过了,所以说这块的速度就快一点。He thought ARM。看看硅谷下边的下边N下边的。以点h emm.XL再来。这叫。Employee。测试一下,看一看能不能生成对应的数据表。
16:08
OK,没问题。对应的数据表。DS c g employees。这个表不存在。刷新。有啊。哦,没有S是吧,D department。下面呢,我们把这个employees跟departments。Department这个信息呢,直接插进来,手工插入,写个insert inTo Gd department。星星不行是吧,星的话呢,是案例来案例来查department。
17:07
ID,然后是department name,就是说这个值啊插到这,这个值啊插到这。From department。再来into d employee。Select。Employee ID last name email department ID from employees,走,再看select from g g employee。107条没问题,这个是department。
18:03
27条,那我们下面的查询呢,就可以使我们这个数据了,是吧。这个时候查询起来才有感觉,下面我们来搞这个HKL的hello。刚才我们看到啊,每个Q号查询呢,需要分为这样的三个步骤,第一步创建。他对象。第二步,绑定参数第三步。执行。查询。写个的HPL等于找着哈,不要查我的。Employ e点通过where来看条件。ID写ID了。Fair。
19:01
大于问号。1.1秒,Like问号。建宽对象等于三点。Hurry。动态绑定参数,而且支持方法的连缀set。第一个应该是个类型。从零开始大于网络大于6000。啊,这个返回值呢,还是一个carry,所以说我还可以再点一个再。一一个我们说啊。Email里面含含A的。执行查询,我们要得到一个例子。Employeeps等于list employees。
20:09
宝宝睡不着。好,换一个。没有任何数据啊。那我把这个去掉啊,把这个去掉是不是就因为我全出了呀。这种。还是有好多的是吧,我们说size。没问题,那我写个韩韩币的。韩币的也没有啊。看,看来。没有,我们可以看看这个结果哈。往后翻。
21:01
哦哦,这个A是大写的是吧。我这样来写。你看。没问题,是31条记录。这就是我们。HQL的一个hello word。然后呢,我们刚才我们还说过我这个参数啊,除了可以使用这个占位符以外,我们还可以使用命名参数。瞧瞧,什么叫命名参数呢?Claimed per。这个位置写命名参数冒号开头这个al。这个是,哎哟。哦,开头这叫一秒这样写,这个时候我在这个赋值的时候呢,我是根据这个名字来写。而不是根据比例来解,那第一个叫al。第二个就叫。
22:00
Email我们写的7000要求结果。诶,23条,这就是我们所谓的这个叫呃,命名参数。低于命名参数,而这个呢,是基于位置的参数。低于位置的探索。他要做的就是这个对象。奥赛的方法支持方法链的风格,Query对象。盗用S叉叉叉方法支持。方法链。编程。风格看到了吧,就是到一个set方法,这个返回值还是二,于是的话呢,你可以一直set下去。
23:08
这是一种让人看上去写上去很舒服的编程风格。那这样一个的话呢,其实我们还可以来用这用一下这个order by来写一个啊order by。一点来看一看circle就知道了。这个色口是带那个。是不带领bed找一个。哦,带了这个奥对吧。还有一个点需要说。就是我们在。绑定这个参数的时候啊,这个参数实际上也可以是实体类的类型。再写一个吧,And一点。Ept等于问号。
24:00
ED等于问号,再点一个N。二我需要一个弟弟。去哪搞啊?这个时候需要这个dept呢,其实就是需要一个ID,别的不用,一方面你可以查一个,另外一方面你也可以直接另一个,只要把这个ID附上就可以了。那我来搞一个apartment e pd等于六。d.site。Ad,我们说。部门。ID80部门啥问题啊?哦。我这个ID给设了一个string形。Employer。Employee,这个没问题哈,这应该是性,我改一下吧。
25:03
但是这么改的话都改了应该。C。保存。配置文件也需要简单的改一下,改成。什么呀?看这个。你可。好。再来就是这个方法。这个时候的话呢,我们绑定了一个80部门瞧一下。看这个口是不是。Employee department等于什么呀?我把这个复制上来。我们可以可以自己来答一下,就这一个取值哈。呃,六千百分号ADPT。
26:05
看这个是6000。这个是百分号A。大写的哈,这个是80。最后一个。17条记录我们这个呢。没问题啊,这就是我们初步体会到HQL。做一个小节。第一个就是我们使用HQL进行查询的三个基本步骤啊,创建块对象,绑定参数进行查询。第二个我们看到的就是我们在写这个占位符的时候,我们可以使用问号,也可以使用这个命名参数,那这个时候的话呢,我教这个set方法的时候怎么了?这个时候我是根据这个参数名来绑定这个参数名的前面需要加上一个。
27:05
冒号。第三个。Cor set方法支持方法链的编程风格。第四个诶,我们在写这个呃占位符,或者说写这个什么,写这个呃,参数的时候的话呢,还可以是实体类类型,那你这块的话呢,调到这个set entity就可以了。最后一个,我们还可以写一个奥德白。
我来说两句