00:00
下面我们来学习SQL查询的四个小细节,分别是分页查询、命名查询、投影查询和报表查询。我们先来看这个分页查询,在实际开发中,分页用的还是比较多的。但是不同的数据库。有不同的分音语句,比方说Oracle里边我们只有number my里边我们只用limit。我们在使用JDBC作为底层的时候啊。我们写的那个DAO不能实现完全的跨平台,因为这两个数据库思考就是不一样。用harmont就完全可以解决这个问题了。harmon提供了两个方法,第一个叫set first result,设定从哪一个对象开始检索。这个呢,从零开始。Set mark results设定一次最多检索出多条,多多少条数目,那qua criteria都有这样的方法,OK,试一下。
01:02
分页查询。创建一个HQL等于from employee,我要查询之后的员工一个query。下边呢,环境分页age number等于。第五页age size等于。五那我们这个我们写成第三页吧。好了。Page number是第三,第三页page size每页显示五条记录,现在的话呢,我想查出第三页对应的那个list。
02:05
怎么查呀?直接来挑一个方法。That first result。第一条记录从零开始,所以说第一页应该是零到四。第二页呢是五到九,第三页是。十到14怎么写?这么写的话,应该是h number减一。彭野。配置size吧,对吧。再来。点marks results,每页显示五条。记录list结果吗?Employ DPS等于。
03:04
我们重写employee的不同方法。只写ID就可以了。好看一看对不对。我们看从一百一开始,110 111 112,一直到114。数据库select星from g g employee。每页显示五条记录,我显示第三页看着哈。第一页。第二页从一百一开始,一直到114,对吧。
04:02
这块一百一到114没问题,那我一共是107条记录。我现在的话呢,我把这个配置单改一下,107条记录应该是对应着。多少页啊?22页吧,最后一页应该只有两条。包一下。啊,205跟206看一下对不对。哎,没问题。所以说我们这个分页呢是OK的。以上就是我们的。分页查询主要对应两个方法,一个是set for result跟set marks results对应的API解释呢,我们PPT上写的很清楚,大家可以来参考一下。第二个我们来说一下,这个叫。命名查询就是说这哈里边啊允许把啊允许在映射文件中定义字符串形式的查询语句,我这个查询语句可以不写死,而放在这个配置文件里边。
05:14
具体呢,是用这样的一个宽元素,这个宽元素跟class元素是。并列的,然后我们可以来调session get name的query方法来获取对应的宽RY对象,进而进行查询。我们找到我们的employee hbm.xml。这里边儿我们来写一个命名查询。Hurry。运查询,比方说我按三来查询employee。我在查询的时候呢,我有可能会包含大于号跟小于号,对吧,你写来你不要。
06:00
一点大于。They。And。1.fair小鱼。Max,大家看我这里边啊,包含了这个大于号小于号,而我整个是一个。XML文档这个时候的话呢,就容易发生歧义,所以说我应该把这个放在那个C里边,对吧。在里边怎么写?这么写吧。个C推塔。这样放欧了。哎,这里边我们放的就是这样的一个SQL语句,你放在这个里边的话呢,就不会出现歧义了哈,测试一下。过来。
07:00
Public world k named query。At t。Quary等于。三点,That named Perry。这个名呢,Sa employees。这个名吗?Fair。Employees。得到一个list employee employee等于。我现在来设置那个。第一个mean。Fair。这个值呢,我们写为5000。哎,叫in sir,或者这叫mark。回来。
08:03
点赛。这叫B。我设为。一万点欧了,第EPS点再有一个。零条记录。哦,1万。这种。没问题,一共是39条,我们这块的话呢,也看到了这个外二语句对吧。这种方式呢,我们称之为命名查询。其特点是。可以把HPL语句配置在我们的。Hbi文件里面。哎,这样的话呢,当我进行修改的时候啊,当我去修改这个HQL语句的时候呢,我们就不用打开我们这个源代码,更加便于。
09:08
维护。第二个细节,第三个我们来说一下这个投影查询。什么叫投影查询呢?呃,查询结果仅包含实体的部分属性,这个呢,需要通过select关键字来实现,那默认情况下返回的是一个list,这个list里边是放的那一条记录,里边查的一个一个字段,就是list的一个数组。如果你觉得那个宿主不爽的话,我们可以搞一个构造器来包装返回的一个一个字段值。找一个。投影查询,我们说查询部分属性吧,是吧。Is property。
10:00
Property field。At get的一段更确切一点哈。写上一个string啊,等于比方说black秒。1.email 1.from。Employees。E pd等于e pd。创建对应的跨对象。票说进来。得到这个list,默认情况下呢,是一个up数组。数组什么意思啊,你看我每一条记录的话,能返回的是什么呀?我返回的是email跟三吧这两个构成一个数组,那你多条记录不是多条数组吗?所以说是数组的list。
11:18
快点,That entity,我需要一个department。点。Beast。EP搞出来的。That。Ad,我们做80后门的。嗯。反一下不循环。Object。O GS result。Greens there as east OB GS。
12:05
通过这个论这个静态方法的话呢,我们这样,我们看这个感应结果会更加直观,这里边就不用对这个object的数组再进行便利了,找一个瞧瞧。有问题,他说什么呢?Employee。没有S。这种。没问题啊,前面是email,后边是。工资。OK的。而且都是。80号部门的。我们这样,我们把这1.epd也查出来。Ept也查出来,我重写一下这个的储存方法。肚子痛。
13:03
那种。后边是什么呀,都是。80号部门的看到了吧,80号部门的部门名称呢,叫sales。词后语句。没问题。最后又搞了一个什么呀,搞了一个内链接,因为我要查employee,我还要查department,可不是得链接一下吗,那链接。回来。这种方子搞的这个结果呢,是不是一个数组啊。啊,操作数组挺别扭的。是吧,这里边的话呢,我们是直接打了一个结果跟操作数组,你是不是还得数组,然后完了下这个这个下标0123,那去引用是吧,所以说操作数组有点麻烦,有简单的方式吗。CTRLC,然后来我们写一个。
14:01
如果这个email department要是能放在那个employee对象里面就好了,对吧。怎么写呢?我创建一个employee。能这样写的话,返回一个一个employee,然后你再get email get get department,是不是很爽啊,但前提是。你这么写的话,是不是好像是employee里边得有这么一个构造器呀?于是。写一个代餐的。口罩器。只有什么呀。Email跟department前面那没有哈,这样写。我写代餐的,当然要写午餐。来这个时候呢,这个结果就是一个一个的employee了。
15:08
Employee MP results。MP点。ID我打印一下ID是空吧,因为我没查过ID。先P点盖子,我查过。Email。我还查过。SY。当然,我还查过department。在哪儿呢?住在这儿啊?找一个瞧瞧。
16:01
对,有错误。看看什么错误。没有赋值是吧。下拉按一下。哎,这个怕赋值了呀,这不dept吗?Where?这里边儿的话也有空格,看一下什么问题。详细看一下说什么呢?说不能够解析这个构造,这样看吧。不能够解析那个构造器,我们看这构造器的顺序啊,我这么写的,Email sir d PT。哎哟,这个数据反了是吧?Email sir e PT。大姐。带走。
17:00
亏吧?最前面的是ID,我没查,这是email,这是sir,后边是DPT,对吧?哎,这就叫投影查询。这投影查询这块呢。正常要是查的话啊,查部分属性,我需要用到select的关键词,然后一个一个的。属性名。正常返回的应该是一个object的一个list,能想明白吧?因为我会返回多条记录,一条记录好几个字段,那么一条记录好几个字段就构成了一个。阿,数组,那你多条记录不是一个list吗?这种方式呢,处理起来不方便,我们希望它返回的是一个对象的集合,于是呢,我们就把这三个属性给它。封装成一个对象。但前提是我们。
18:01
我们在那个。这九花类里边确实是得提供这样的一个过潮期,要不的话怎么办呢?嗯,后边这个就比较正常了。具体信息呢,大家也可以来看我这个。呃,PPT写的也很详细。最后一个我们来说一下,这个叫报表查询。说白了就是我们可以用group by having和这些聚集函数。搞一搞。To taste group。At guest。我们来查一下各个部门的最高工资和最低工资真的等于?Like。一点。
19:02
Max。1.b。Employee。Group by。1.dpt。来写一个大运,我们说呀,这个最低工资。大于一个in。搞一个。等于。Create。你把值附上吧。Set。那是个什么节嘛。对吧,最低工资嘛,IN3比方说最低工资是5000。
20:07
结果是什么呀?啊,不是个数主吧。Result等于二点。后循环反应一下。Object。Osor。第点X例笔记S找一个。Rise。哎哟,又出问题了,什么问题?说。参数节点是空啥意思嘞。Select。这种。还不行怎么的?
21:01
Employees习惯了是吧,Employee。再来。没问题,看一下结果对吧。前面是最低工资,后边是最高工资,而且这个工资是大于5000的,往上大于1万。看。大约1万呢,只有一家哈,你可以大于8000。大于8000呢,有三家。这就是我们所谓的报表查询,我们在HQL里边可以利用,可以用BY。Having还可以用我们的聚集函数看到了吧?好,注意一个小结。
22:00
刚才呢,我们一共讲了四个点。第一个点我们讲了一个分页查询,里边有两个核心方法,分别是set first result跟set mark results,有这样的两个方法的话,我们再进行分页查询,我就不用管底层数据库是什么了,直接走。刚才呢,我没有看那个色口啊,进来看一眼。看是不是number啊。相当的这个贴心。如果要是。买circle的话,底下就是limit。好,然后我们说了。命名查询这个命名查询这个特点呢,我可以把那HKL宇宙给它外置化,放到配置文件里边,这样配。在这,然后具体这个HKL啊,需要放在这个c data塔区里边,因为什么呀,这句话是不是可能会有大于号小于号啊,哎,防止它对我们整个这个文档,整个这个文档产生影响。
23:04
具体使用的话,调用session get name的query方法啊,把这个值传进来,这个值是什么呀?就是这个name的query的这个名字,Quary的这个名字复制过来。后边的用法跟我们做一般的HQL查询是一样的。然后呢,我们说到了这个叫投影查询,就只查部分属性,那默认情况下它返回的是。数组组成的list。你要觉得这个不爽的话,你可以搞一个,嗯,在对应的持久化类里边搞一个对应的构造器,然后的话,它返回的就是。对象的数组。错了啊,对象的集合就是这个什么呀。Employee list,我们对它进行处理就可以了,最后一个,哎,我们说到了这个。
24:05
在HQL里边可以用。主函数可以用group跟having,那这个返回值你要是多个的话呢,这个没这个没有什么好办法是吧,返回的就是一个。对象数组,你把这个min跟max这个字封装的话,这个就有点太牵强了是吧。
我来说两句