00:00
好,那下面我们来看一下买威的各种查询功能啊,这个增删改呢,咱们带着大家已经实现过了啊,然后虽然说我们在讲这个获取参数值的两种方式的时候,然后只给大家实现了一个这个添加功能,但是呢,大家可以下去自己去测试一下这个动态拼接的一个修改和删除功能啊,但是查询的不一样,因为咱们的查询的每一次查询出来的结果呢,它是不一样的,五花八门,各种各样,对吧?咱们可以查询出来一条数据,也可以查询多条数据,我们也可以查询一个单行单列的数据,有的时候如果咱们查询出来的数据没有相对应的实体类,然后我们又应该如何来处理这个问题呢?好,OK,那下面咱们先来看第一个问题,查询一个实体类对象,这个其实咱们已经跟大家写过了啊,还有一个呢,就是查询一个list的集合。好,下面我们在这就把这两个呢一块给大家实现一下啊,因为咱们在这儿呢,这个特别是查询功能啊,对吧,之前咱们也跟大家说过,你一定要想清楚你查询出来的数据是什么,就比如说如果你查询出来的数据只有一条,你应该如何去设置它的返回值,如果说咱们查询出来的数据有多条,那我们又该如何来设置呢?那大家都知道,一般查询出来一条数据的时候,咱们一般都是一个实体类对象,然后我们查询出来的数据有多条的时候,那我们一般设置的都是一个类似的集合。
01:28
那大家有没有想过,如果你查询的是多条数据,你能把返回值设置为实体类对象吗?如果说你查询出来的只有一条数据,那你能把它设置为list集合吗?好,下面咱们就来看一下啊。首先呢,咱们在这,咱们再来创建一个咱们的map接口啊,比如说这个map呀,咱们就不以我们当前的实体类,然后再加上咱们的map命名了,咱们以功能命名叫select map select map。好,然后下面咱们再来创建它所对应的映射文件啊,叫my be-map,叫select map.xl那我们直接把它的命名空间设置一下,com.at硅谷点my bet map select map,然后下面咱们再来创建一个测试类,比如说就叫做select map test OK,那我们现在咱们要做什么呀?比如说我们现在要来实现的是两个查询功能,之前呢,跟大家已经写过了,那我们在这咱们再来看一下它需要注意的问题。
02:33
也就是说第一个功能,然后咱们来查询一个user对象,然后叫get user by ID,那咱们通过ID来查询用户信息,咱们查询出来的肯定只有一条,所以说它的返回值啊,我们可以直接设置为一个user类型的返回值啊,这里面咱们是不是可以来写一个ID叫做in t类型的ID。好,那这个是不是就是我们现在咱们这个map接口的方法有参数了,那我们在映射文件中是不是就要获取这个参数,那咱们说过如果只有一个参数的话,一个字面量类型的参数我们最好啊,在这也给它加上AP,对吧,就是因为它可以通过任意的内容来获取参数值,咱们在这最好是给他规定一下,对吧,就通过ID来获取啊。
03:20
好,杠星星回车这个是干啥的?是根据ID来查询用户信息,OK,下面咱们再来写一个,然后方法的返回值是list集合,这个大家都知道吧,咱们来查询所有的用户信息,叫做get or user,我们之前写过啊好,下面大家看它没有参数,然后它的功能是用来查询所有的用户信息,OK啊好,那我们先来写第一个来。好,我们在这咱们把这个S口尾句呢给它写出来,先写注释,然后再写the select的标签,ID要跟方法名一致,Result type的话,咱们要来设置为user,因为咱们要把数据查询为一个user对象,Select星from t_user t_user然后加上一个条件,ID等于井号大括号ID。
04:14
好,设置完之后啊,我们再来写咱们的第二个方法,然后是我们查询所有用户信息的一个功能,然后咱们把映射文件中的这个搜口语句啊,然后也写一下啊好,当然咱们以后写的时候最好是一个方法一个circle口,一个方法一个circle,只不过这个功能咱们之前实现过,所以说咱们在这呢,就直接把它一块写了啊do type呢,同样是user,好,下面select星from t_user OK啊。好。那我们现在可以把这两个功能来测试一下,来大家看,首先呢,先来写一个it test注解,然后下面来创建一个方法,比如说叫做get user by ID,然后第一步先来获取circle session对象点。
05:06
好,然后点get circle session,然后下面通过circle session来获取我们当前map接口的一个代理实现类对象。好,再来调用我们当前的方法,比如说先测试get u by ID,然后里面咱们写个一,那咱们所获取的是不是应该就是ID为一的用户信息,OK,咱们在这来写个U的就可以啊,好,然后设置完之后,咱们直接把咱们的第二个方法呢也给它写出来,这个叫做get or user。对吧,然后我们当前咱们要调用的方法是map.get or user方法,然后它的返回值是一个历史的集合,咱们在这直接通过点for each,然后把它进行循环就可以啊,system.out。然后print LN,咱们先来测试我们当前咱们的这个根据ID查询用户信息,大家看没有问题啊,之前咱们都已经写过了,大家看没有问题,那下面呢,我们再来测试咱们查询所有的人,所有的用户信息。
06:12
然后这个时候大家来看一下啊。它也是没有问题的,对吧。好,那为什么咱们要把这两个功能再重新去讲一遍呢?大家注意,大家来看我们当前这个方法的返回值啊,我们当前方法的返回值是user,那我们当前咱们的方法名叫get user by ID,咱们都知道这个功能呢是什么意思,那如果我现在我把这个circleq语句啊,不小心写错了,或者说咱们就来测试一下,我把条件给删了,那这个时候大家说我们查询出来的数据是不是有多条啊,那查询出来的数据有多条,但是我们最终这个方法的返回值就是一个user,那这个时候我们这个功能能正常执行吗?如果能正常执行的话,我们当前所返回的这个U对象到底是我们的第一条数据还是第二条数据还是第三条数据呢?对吧?大家注意,特别是遇到这种情况的时候啊,咱们拿不准框架,肯定也拿不准,所以说遇到这种情况的时候,框架是直接报错的,再说了,从原理上来说,它确实是有问题的,为什么大家看好我们现在呢?咱们重新来执行我们的get user by ID。
07:22
大家来看他给我们报的这个错啊。好,这个错呢,非常的简单,我们看这个circle查询出来的结果,一共有三条报的错,叫too many results exception,也就是有太多的结果异常。好,然后为什么会报这样的一个错呢?大家注意,那是因为我们之前跟大家讲过呀,其实我们在去调用咱们的map接口中的方法的时候,它在底层调用的是咱们的circle session里面一个具体的方法,就比如说circle session点咱们的select开头的方法,Insert开除的方法,还有update开出的方法,还有delete开除的方法。好,然后特别是咱们的查询的方法呢,有很多,你比如说有select one,然后有select,然后还有select course,有select list,有select map,那我们现在的它到它在底层中到底用的是哪个呢?它会去根据我们当前这个方法的返回值,然后来决定我们所使用的方法,就比如说我们当前方法的返回值是个U。
08:26
那所以说呀,它是调用的方法呢,就是我们当前的select one方法,大家来看一下啊。然后这里面有一个select one方法,然后这个select one呢,顾名思义就是来查询一条数据,然后所以说我们当前的S去最多只能查询出来一个结果,如果你查询的结果比较多的话,它是会直接抛出异常的,大家来看,那我们当前呢,然后咱们抛出来的异常,它的描述是什么?我们当前需要来获取一个结果,或者说一个难的结果,然后tobe returned by selectone,大家看是不是selectone呢?
09:03
对吧,Select one,它只能获取一个结果,然后或者是一个难为结果,但是我们现在咱们所查询出来的几条三条,所以说这个时候就给我们报了一个错,叫做too many results exception,所以这个错还是非常简单的,非常容易理解的啊好,这个大家一定要注意,所以说我再三跟大家强调了,我说大家再去写查询方法的时候,一定要想好它方法的返回值是什么,你要查的结果一共有几个,咱们再去设置这个方法的返回值,那当然呢,咱们现在呢,咱们查询出来多条,那我们肯定是要通过一个类似的集合来获取的,因为一条数据对应一个用户对象,那咱们的多条数据咱们就得用一个容器来进行接收。好,那大家再来想一个相关的问题啊,我们查询多条,你不能用实体类作为返回值,那如果我查询出来的数据只有一条的话,我能用集合来作为返回值吗?就比如说下面这个S口语句,咱们在这给它加上一个while ID,然后等于一,这个时候咱们查询出来的数据只有一条,那我们却以list集合作为返回值,它有问题没有呢?没有问题。
10:14
对吧,大家想想就能够想明白的,我现在就只有一条数据,那我把这一条数据放在集合里面。有问题吗?没有任何问题啊,大家来看一下报错了没有啊,没有报错。好,那所以咱们在这呢,把它给还原一下,然后把这个注意事项呢,然后给大家写到咱们的这个map接口里面啊,大家注意,然后我们在查询的时候,大家特别需要注意的问题就是若咱们的circleq语句,若circleq语句,然后查询的结果为多条时,为多条为多条时,对吧,然后咱们一定不能怎么样啊,不能以实体类类型,然后来作为方法的返回值,为什么?然后否则否则会抛出异常。
11:07
否则会抛出异常,什么异常,Too many result exception,大家还记得不?然后咱们在这儿呢,给大家写的有,咱们直接把这个异常呢复制过来就行。好,然后,但是咱们如果查询出来的数据有一条只有一条的时候,那我们是可以以实体类型作为返回值,也可以以类似的集合类型作为返回值的。OK吧,好,咱们再写一个,若咱们的SQL语句,然后查询的结果为一条十,然后为一条一条时,对吧?好,然后此时可以使用实体类类型然后或list list,然后集合类型来作为方法的返回值。方法的返回值OK啊,行,那咱们主要来说的就是这个问题,大家一定要看好,所以大家一定要想好你查询的结果是啥,再把当前方法的返回值给设置好,要不然的话,大家就会发现我们当前的这个异常,To many results exception,当然大家如果以后你要看到了这个异常,大家也要知道是什么原因,就有可能是你当前你方法的返回值呀,然后设置的返回值跟我们当前查询出来的数据,它的条数不匹配,然后才会出现这个问题的啊好OK。
我来说两句