00:00
好,那我们刚才呢,咱们已经把删除修改还有添加,然后咱们都已经测试过了,然后下面咱们就来测试一个查询功能,那这个查询功能大家在写的时候一定要注意,因为它不像是咱们的增删改,增删改方法的返回值呢,它都是固定的,所以说呢,我们在写的时候呢,咱们就有两种返回值,你要么把它给设置成int,然后就可以获取受影响的行数,然后要么呢,我们就可以把方法的返回值设置成VO的,也就是说我们不获取返回值,但是咱们的查询的话,它必定是有返回值的,那这个返回值咱们应该来设置成什么呢?那所以说大家在查询的时候,你就一定要想好,我们当前的SQ尾句,它查询出来的结果是什么,比如说我们的查询,咱们可以查询一条数据,然后来作为一个实体类对象,我们也可以来查询所有数据,然后来获取一个实体类对象的集合。当然咱们也有一些情况,咱们查询出来的数据是单行单列的,那这个时候大家就需要知道,你查询出来的结果需要来转换成咱们Java中的什么类型,这个大家注意啊。
01:13
比如说呢,那我们先来写一个简单的,因为在咱们的笔记里面呢,然后咱们下面有这个买杯体中的各种查询功能,所以说在这咱们先给大家写两个,一个是来查询一个实体类对象,一个是来查询一个list集合啊。啊,比如说查询实体类对象的时候是什么情况,是不是应该是我们根据一个条件查询出来的数据是一条的时候,咱们可以转换为一个实体类对象,对不对?好啊,想让大家来看杠星星回车,然后咱们是根据。叫做根据ID,然后来查询咱们的用户信息,来大家看啊,那它的返回值应该是一个user吧,方法名咱们就叫做get user by ID括号OK,然后咱们把这个方法呢,然后来进行复制,然后放到我们当前咱们的映射文件的注释中,然后咱们就可以来写这个查询功能了,然后ID要跟方法名啊,保持一致,对不对?好,然后下面咱们的查询语句select from t_user,然后加上一个条件welld等于三。
02:25
能看懂吧,大家注意,这个就是我们当前的一个查询语句,那我们就可以来进行一个测试,比如说然后大家看咱们还在这来测试啊,然后叫做map点,叫做get user by ID,它的返回值是一个user对象,那我们现在把user给它输出来,大家看好啊,行,那我们现在咱们这样去写了之后,它到底对不对呢?来我们来一个直行之后大家会发现。他就报错了。对吧,为什么会报错,然后咱们的SQL语句大家看是这样的,没问题,那说明我们的SQL语句咱们没有写错,然后下面咱们的参数呢,也没有问题,因为咱们没有参数,对不对,那再往下的话,他报错,那说明什么?那是不是说明我们在执行circleq的时候出现了问题,那我们的circleq语句既然没有报错,然后我们当前的circlel语句也一定是能够执行的,那所以说现在问题出到哪儿呢?大家说是不是应该是my be在执行了circleql之后,然后才报的错对不对?然后咱们来看这个错误的信息,大家看啊,他说我们当前一个查询在执行的过程中,然后他没有一个result maps result叫结果,Maps叫映射,它没有去找到一个结果映射,然后对于谁呢?对于我们当前咱们的这个S口语,哪个S口语句大家在这呢。
03:55
也要好好的看一下我们当前的circle是怎么来进行表示的,大家来看啊,是com.at硅谷点MY.map.user map.get user by ID什么意思呀?
04:10
大家说这前面这个不是咱们map接口的全类名嘛,后边这个不是我们当前咱们的这个方法名嘛,对不对?所以说大家注意,在我们的myab中,咱们的每一个circle区都有一个唯一标识,而这个唯一标识大家可以认为是map接口的全类名,点点方法名,大家也可以认为是什么?大家说这不就是咱们映射文件的name space吗?这不就是我们当前S口语句的ID吗?对不对?因为咱们的面向接口编程,这个是要跟咱们的命名空间保持一致的,然后方法名是要跟咱们SQL语句的ID保持一致的,所以说我们再去执行一个circleq的时候,它是怎么去找到这个circleq的,就是通过我们当前命名空间来找到,通过咱们的map接口的全类名,找到咱们的映射文件,然后通过我们当前咱们的方法名去找到咱们的SQL语句,哎,这个大家一定要看好啊,行,然后后面还有半句话说的是什么?说的是it's likely,它好像呢,也没有一个result type,也没有一个result map,然后被声明被定义。
05:26
那所以说大家想想,你看这不就是给咱们的解决方案吗?对不对,他说了我们当前没有一个result type,也没有一个result map,那说明咱们只要如果要想让这个circle去在执行的过程中没有问题,咱们要想来解决这个问题,那我们是不是只需要去设置一个result type或result map就行,对不对?那在哪来设置呢?大家想想。啊,是不是应该是在我们的映射文件中来进行设置,大家看啊。好在这有一个result type,然后这里面呢,还有一个叫什么result map,那result type叫什么?Result map叫什么?Result type指的是结果类型,Result map指的是结果映射,那为什么我们要来设置这两个呢?因为我们在之前咱们讲my be的这个特性的时候,咱们就说了它这个避免了大部分GDBC的代码以及参数的手工设置,还有结果集的一个处理,但是呢,它也仅仅是帮助我们来处理了结果题,但是大家想它在处理结果集的时候,咱们是不是必须要来给他指定我们当前查询出来的数据所对应的实体类对象是谁,对不对?所以说为什么他会报错,就是因为我们没有去设置它的一个结果类型,我们当前咱们的my be体执行完circleql语句之后,并不知道要将它转换成什么样的一个实体类对象。
07:00
所以说在这他就报错了,刘涛老师他不会自己找吗?他怎么去找?大家说两个实体类中的属性有可能是一样的呀,那他应该找谁呢?所以说咱们在这必须要来进行设置,然后当我们设置出来我们的result type,也就是结果类型之后,它就可以将我们查询出来的结果转换成咱们所设置的结果类型,然后再把我们最终的结果然后作为返回值返回给我们当前的这个方法。这个大家注意啊,行,那下面呢,我们在这咱们应该写谁啊,大家说咱们查询出来的用户信息是不是应该转换成U实体类对象,所以说在这是com.at硅谷点my be.pogo.user。能看懂吧?好,那我们现在用的是result type,那我们为什么不用result map呢?给大家写一下啊,好,然后咱们的查询功能必须设置查询功能的标签对吧?必须来设置咱们的result type,然后或result map,好那它们两个有什么区别?Result type来设置的是我们默认的映射关系,来设置默认的映射关系,好然后咱们的result map,然后来设置的是什么?大家注意来设置自定义的映射关系。
08:34
映射关系,那什么叫做默认的映射关系?也就是说当我们把这个实体的类型设置出来之后,它就会自动的把我们当前查询出来的结果的字段名来作为属性名,来为当前这个类型中的属性进行赋值,如果能匹配到属性则负值,如果匹配不到就不负值上好。所以说在我们默认的映射关系中,我们尽量要来保证我们当前的实体类类型,实体类中的属性名要跟我们数据库中这张表中的字段名保持一致。而result map叫自定义映射,那大家说什么叫自定义映射?如果字段名跟属性名不一致的情况,我们才需要用到result map,比如说咱们的。
09:23
字段名跟属性名真的不一样,还有呢,就是我们的多对一的关系和一对多的关系,咱们都要通过map来实现。OK吧,但是如果字段名跟属性名一致的情况的话,那这个大家也都知道,我们之前咱们在封装GDBC的过程中,对吧,然后我们也要来遵循这个规则,所以说如果是默认的映射关系,我们就只需要来设置的态度就可以了。OK吧,这个大家注意啊,行,下面呢,我们在这咱们再来一个执行,大家来看啊,来大家看查询出来了没有。查询出来吧,没有任何问题啊好,所以说这个大家注意啊,是咱们的查询功能必须要设置result type或result map啊行,然后呢,我们下面咱们再来写一个查询所有数据的啊来看行行。
10:19
好,来查询所有的用户信息。好,它的返回值应该是一个list的集合吧,咱们已经写了这么多的功能了,对不对?大家也不是第一天学习GDBC了,然后咱们肯定知道我查询一条数据对应的就是咱们的实体类对象,我查询多条数据的话,咱们对应的应该就是一个list息的集合,这是我们原来用的最多的两种方式,对不对?好,然后下面咱们叫做get or user OK,好,把它复制一下,然后呢,放到我们当前咱们的映射文件中,大家来看啊,好,然后呢,咱们的circle口L语句ID要跟方法名一致,然后写完之后咱们是不是还要再加上咱们的的type来写的是我们当前查询出来的数据所需要转换成的实体类对象的类型。com.ADD硅谷点买be.pu.user OK,好,然后circle语句的话,简单select from t。
11:24
下划线user就完事了啊行,那我们来测试一下这个功能,咱们把这两行也注释掉,然后呢,调用咱们的map点叫做get or user,返回一个list集合,然后咱们list.for一起方法对不对,咱们就叫做user so,然后把咱们的user输出就可以啊,拉姆的表达式。是不是好,下面我们再来一个执行,大家看一下啊。好,大家看咱们当前的这两条数据是不是就有了,因为我们刚才咱们删除了一条啊,所以说现在呢,就只剩下两条了。
12:03
OK吧,好,那大家看这个就是我们的查询功能,所以说查询功能咱们要比较着增删改,我们需要来考虑的问题就多了,首先第一个问题就是我们的增删改方法的返回值固定,所以说你可以设置为int,你也可以设置成result,但是我们在查询的时候,我们每一个S扣去查询出来的结果可能都不一样,所以说你一定要想好,我们当前咱们查询出来的结果应该是什么,如果你查询出来的是一条,那我是不是就可以用实体类对象,而如果我查询出来的是多条,咱们就可以来用list的集合,当然呢,My be还为我们提供了查询map集合的这个功能啊,这个咱们等到讲到查询功能的时候再说啊,行,嗯,然后还有就是我们在查询的标签里面,我们还需要再多设置一个属性,叫做result type或result map。那目前呢,我们只需要用。
13:04
Type就行,什么时候用type,字段名跟属性名一致的情况,我们就可以用type,而如果字段名跟属性名不一致,又或者说我们要来处理多对一及一对多的关系,那我们就必须得用result map,这个大家注意啊,好,这个是我们的查询功能,好,那我们的增删改查的功能呢,咱们就已经测试完了啊好。
我来说两句