00:00
啊,我们接下来讲这个自定义映射啊呃,自定义映射呢,那说白了,那肯定就得我们手动的对吧,一点一点的把这个映射的给它做出来了,好吧,我们先来看一下,呃,这个自定义映射呢,它是来实现这个高级的结果及映射的,明白吧?诶,高级的结果定映射的啊,那么简单来讲的话就是什么呀,这个查询比较复杂的时候,就是比如说我要从多个表去查,对吧?那么结果机里面呢,有多个表的数据,像这种情况我们几乎都要去使用这个哎自定义映射,那么对于自动义自定义映射来讲呢,我们使用的是一个result map区分开了啊,刚刚呢是叫做result type,而这个家伙叫做result map,明白了吧?诶,而且它是一个什么标签的属性,而这个家伙呢,它是一个标签。啊,这也是不一样的啊,OK,那么对于这个自定义上来讲的话,我们主要是学它里面的一个ID,一个result,一个是association,一个是我们的collection啊,主要是学这么几个东西,听懂了吧,那么这个位置呢,哎,有对这个每一个啊,这个属性的一个介绍啊,我就不再挨个带着你去看了,我们直接上代码,好吧,来回到我们的开发工具中,现在呢,我先给你简单的去演示一下这个自定义映射啊,那我们就注意哈,我就不在我们的这个map里面去加了,我们再去写一个接口,我们叫做employee map,叫做result map能看明白吗?OK,我再去写一个这样的接口啊好,这个是来演示我们的自定义映射的,那么同样的道理,我们需要给它加上一个映射文件吧,好,一定要保证名字是一样的哈,同学们来映射文件,然后在映射文件里面呢,把这个之前写的一些东西呢,都给它干掉,我们。
01:51
都不要了啊,我们重新来写好这个地方,我们要改成result map,这样是不是可以了,OK,好,然后这里面呢,我们就先写一个啊,我们先来演示一个基本的自定义映射啊,那我们还是去查一个对象,明白吧,Get,引页by ID,我还是查一个对象,那么这个方式的话,我们其实可以直接通过自动映射来完成的,但是呢,现在我教会你如何通过自定义映射来去完成它,好吧,来,我们把这个查回来,来,CTRLC。
02:21
好,写到这个位置啊,OK,呃,这个查询的话呢,我们来写一下,它是一个select,注意ID呢,就是我们的方法的名字,这里面我们写的是select ID last_name email,真的from TB employee v ID等于一个井号大括号ID没问题吧,以前的话我们怎么写啊,直接在这写一个result tab是不是可以了,没题懂吧?哎,但是现在的话呢,我不想使用自动映射了,我想自定义来映射怎么做呢?那我们要指定的是一个re加map,但这个家构怎么指定啊,你来想哈,自定义自定义,那你是不是得手动的去把这个映射规则给它写出来啊,因此我们需要有一个诶映射规则的定义就是通过map来去写的,就是我要通过这个re map来去定义一下你这个查询到的结果机是怎么封装的,那么比如说我把我的这个封装呢,给大家写了个ID叫做MYP,好,那我就。
03:21
告诉他将来你的这个查询是要通过我的这个映射规则来去映射的,因此把这个MYEP就给他指定到这个位置,能联系上了吗?OK,好,那么这个东西我们来分析啊,这是我们的自定义定义社,那么在这个自定义社里面,我们要想哈,最终我查到的这个结果是要封装成一个什么类型啊,这个我们是明确的吧,是不是要封装成一个引号一对象吧,那也就意味着我的这个自定义设我将来要把这个结果呢,给你映射成一个employ对象,因此注意它里面的这个ta就是我们要什么呀,最终映射的一种类型,好,就最终结果集,然后什么啊,这个这个封装的类型能听懂吧,这个位置那我们写什么呀?是不是依旧要去写我们的哎,Employee了吧,好,是不是大家都来跟上哈,这个其实也比较简单啊。
04:18
好,那我们就把它写到这,那么接下来在这里面的话,我们就要去完成我们自定义的一个映射规则,大家注意这里面我们主要关心的是两个,一个是ID,一个是result,给大家讲,嗯,这个ID呢,它主要是来完成什么呀,它来完成组件列的映射,就是对,因为组件比较特殊啊,所以它有一个特殊的待遇,就是有一个专门的标签来去完成组件列的映射,然后像这个result呢,它就是来完成什么呀?哎,一些什么普通列的映射,就除了组件之外,剩下的都是通过它来做的啊,完成普通列的映射,普通列啊,普通列的一个映射,能明白这个意思吧,OK,好,那么怎么做呢?注意哈,在这里面呢,我们有一个列,然后呢,有一个property,好给大家去讲一下,好,这个指定什么呀,就是指定结果。
05:18
级的啊,指定什么结果级的列名啊,然后这个property呢?啊,指定一个什么呀,好,指定我们对象的一个属性表,那就是什么意思呢,你看好了哈,呃,我先回到这个位置,Select from这个表,然后呢,V,比如说ID呢,等于1005吧,还是来查它。好,选中查一下,这就是我们的结果集吧,你看我把这个结果集天给它copy出来哈,来copy出来CTRLC,好,我把它copy到这个位置,我们对照的这个呢,来去给它映射一下,注意哈,这是我的结果集啊,把中间这个去掉对应起来,对应起来了吧,这个其实我们不要了哈,这个我们不要了,我们没有查它吧,对吧?那么就这么几个结果,OK,那注意这是我们的结果级的列啊,听明白啊,是结果级的列名,为什么要强调它呢?因为结果级的列名不一定跟你表里面的列是一样的,因为我有可能会取别名对不对,所以说你一定要记清楚了,我这个column指定的是结果集的列名,就是我查完的结果集,它里面叫什么,我这个地方才能指定什么,那现在我就希望你把结果集里面的这个ID这一列所对应的这个值呢映射到我。
06:43
哦,这个对象的一个ID属性上指定到这儿。看明白了吗?那同样的道理,对于这个re resultte来讲,它里面也有一个列名,也有一个property,好,那我就告诉他,你把结果集里面的last name这个值映射到我对象的last name这个属性上,会写了吗?是把结果集里面的email映射到我对象的email数一下吧,来把结果集里面的真的。
07:18
好,映识到什么呀,映射到我对象的真点上面会写了吗?难吗?简吧,哎这个特别简单啊,就是你就相当于什么呀,我自己告诉他来这个东西要给到谁上面,这个东西要给到谁上面。看到了吧,OK,好,那么这个我就把它写好了,来吧,写好以后呢,我们就来做一个测试了啊好,我再去写一个测试啊,测试的话呢,我们也重新写一个类了啊,有一个结容的测试类,我们叫做TS,就我们的呃,My be的result,好来写到这,好,我们先来测试我们的一个叫做什么map啊,就简单的一个map OK啊,那这里面的话,我们还得去封装一个方法啊,那个封装的方法呢,我就不再手写了,我把它拷贝过来,行吧,找到我们封装好了这个方法啊,来,CTRLC啊,拷贝到这个位置依旧是用的它吧,好,然后这里面的话,我们就可以接着写了啊,So session factory s sf等于get so session factory,好,有个异常给它。
08:32
哎,我问你个问题哈,这个是啥。啊,我看你们答的对哈,这个是啥意思啊,这个干嘛呀,一场一场啊,再想想。往上跑,那你肯定往上抛,你还能往下抛,怎么着,啥意思呀?这是抛吗?这不叫抛啊,啥叫抛啊,这才叫抛啊,这啥呀啊,这叫做声明一常明白吗?还有我就知道你不知道是吧?啊,这叫做声异常,能听懂什么意思吧?这不叫做抛,抛是什么呀?我主动的从方法里面通过舌漏给他什么呀,往出扔的,这叫做抛异常,而这个家伙呢,我们严格意义上来讲叫做声明异常,他对谁有用吗?对我当前方法有用吗?其实没有太大的一个用处,对于方法的调用者来讲是有用的,就相当于这个东西是什么,告诉调用我这个方法的那个什么调用方,我这个方法是有异常的,你得去处理这个异常。
09:56
明白了吧,因为什么只要你这个东西声明的这个异常了,那么你在你看我把这个去掉哈,我在这个法,你看我是不是声明过这个异常的,那我再去调他这个方法的时候,他就告诉我了,这个方法是有异常了,你得必须处理,我想处理我就拆开说我不想处理呢,这不叫做往上抛,我接着把异常声明到这,我也不管将来谁叫我谁处理,理解吗?我就知道你不知道。
10:35
是吧,啊来吧,接着往后讲了哈,那么现在我们拿到我们这个employee map的result map啊map等于session get map啊employee map result map2class OK写到这,然后接下来我们就可以调方法了啊麦get它叉1005 OK,好,最后呢,帮我们返回一个你employ对象好,然后呢,我们C输出一下这个。
11:10
好,输出一下employ,这是不是写好了,来吧,测试一下了啊好,打个棒选中让案走一下,OK,大家来看这个结果成了没出来了吧,看到了吗?OK,好,那么其实这就是一个自定义的啊,一个映射,就是我们在这个过程中呢,我其实并没有使用那个什么tap,而是使用了一个map,手动的告诉他怎么去映射这个结果情。听懂了吧,OK,好,注意哈,这个只是我给大家做一个演示啊,如果说像对于这种查询来讲,我们没有必要去写这个自定义的,因为这种查询人家自动的是不是就能完成了,所以说接下来要给大家讲的才是我们真正的自定义映射要使用的,听明白了吧,OK。
我来说两句