00:00
诶,下边我们继续来看啊,我们刚才测试了select one这个方法啊,对通用map呢,其实已经有一定程度的了解了,下边呢,我们看后边几个方法啊,Select select all和select count,我们可以去看一下这几个方法的声明哈,呃,有了刚才我们select one的这个基础哈,其实再看这几个方法呢,就很简单了,你看select呢,通过试题类对象封装查询条件,它不再有只返回一个的这样一个约束了啊,它可以返回一个list史的集合。诶,然后呢,Select or相对于select方法啊,它连这个查询条件都没有了,直接返回历史的集合,返回全部的数据,Select count,那它就是进行一个count函数的一个技术是吧?哎,然后呢,呃,查询条件呢,一样也是使用我们的,哎,是这列去封装,所以这些呢,这几个方法啊,我们就不演示了,咱们节约大家的时间,咱们直接呢来看下一个方法,下一个方法是叫什么呢。
01:05
下一个呢,就是我们这个select by primary key这个方法,这个我们还是需要去说一下的,从方法名字本身的这个意思上来说哈,它是要去我们根据主键啊去进行一个查询,那主键呢,在数据库表里边儿,当然是不允许重复的,那么我们根据主键查询,它必然只能返回一个实体类对象,下边呢,咱们就针对这个方法呢来测试一下。啊,不是这是我们这个里面。哎,为了我们工作才干净啊,我们把别的都关掉,在这呢,我们去测试我们select by primary key这个方法,我们通过employee service去创建一个方法,这个叫做get employee by ID,哎,其实主键呢,在这儿就是我们的ID,它呢必须给我们返回一个引方预对象,然后呢,我们需要给它提供一个值作为它ID的值。
02:13
比如说呢,以PPID等于一个三,诶第二步呢,执行根据组件进行的查询,返回了这样一个结果,然后呢,我们来打印一下这个结果。那我们下边需要去employee service里边呢,把这个方法给它建出来。其实在我都是我的把这个键传进来,哎呦,我们刚才在这儿没有去传这个键哈,我们去把这个键传进来,Employ ID哈,得把这个值传进来。
03:16
Employee select ID根据这个去做查询,这个代码呢,写起来很简单哈,下面关键呢是我们测试啊,它会不会如我们所愿呢?会不会出现一些意外情况呢?我们跑一下看看。诶,在这儿我们看哈,他倒是没有抛异常,但是呢,返回的结果是闹,但是按照我们对数据库表的这个理解哈,呃,数据库表里边数据的实际情况,我们来看一下我们这个数据库里边呢,这个ID为三的这条记录是有的,它为什么返回的是一个闹呢?这个就让人很奇怪了,我们来看一下它生成的词口语句哈。
04:10
Select这儿不用说,From这也不用说,我们看这个where子句这我的天呐,呃,你说好了是根据主见来查,怎么怎么这些阿猫阿狗的都跑过来了啊,难道他们也是主见吗?诶,我们就就发现哈,这个问题哈,确实是出在这儿了啊,问题呢,它确实是出在这儿,嗯,那么大家想啊,呃,这个地方你看perters哈,我们给这个词语句呢,传了四个参数。呃,你在这儿呢,这四个问号的这个地方呢,都传的是三这个参数啊,然后呢,根据这个三呢,作为参数的话啊,这呃在匹配这些查询条件,肯定呢,它啥也查不着,所以说呢,它返回的值哈,返回的记记录的数量就是这个零啊,我们知道这个问题所在了哈,关键就是这个威尔子句哈,它生成的V尔子句不符合我们的要求,或者说跟我们想的不一样。
05:08
我们先解释一下啊,这个通用map呢,它为什么会生成这样一个啊,这个奇怪的威尔词句。C在这哈,我们这个其实我们要解决刚才说的问题呢,还是需要用到我们一个注解啊,这是我们这个ID的一个注解,我们去跟大家说一下我们当前发生的这个情况。呃,就是说,嗯,我们通用map在执行这个什么什么by primary key这样的方法时,当然这个这个方法是有参数的哈,他在执行这样的方法的时候。
06:04
哎,有两种情况,呃,情况一就是我们刚才这种没有使用ID注解明确指定主键字段。那么你没有明确指定的话,它生成的soq语句呢,就是这个情况,哎,我们把这个恶子句的部分哈,我们给它标一个颜色,呃,这种情况下,它为什么生成的这个恶尔子句怎么这么奇怪呢?在这儿跟大家说哈,它其实是把我们这每一个字段都当成了主见,这么说也不准确哈,它准确的说是把我们所有这里边所有的字段哈。集合起来当成了一个联合组件。把当前试题类里边所有的字段哈放在一起作为了联合组件。
07:04
之所以会生成上面这样的哎为子区,是因为我们通用哎map哈,它将实体类中的所有字段都拿来。放在一起做联合主键,啥叫联合主键呢?就是我们平平常的主键啊,就一个字,就一个字段。你看我们现在其实就是这种情况,就这一个字段是主键,别的字段呢不是主键,但其实呢,数据库呢,它还支持这样一种操作哈,就是你可以多个字段呢,哎,多个字段两个或者三个或者更多哈,它们整合在一起,它们一起作为一个主键,这个时候呢,联合主件哈,其中参与联合主件的每一个字段,单个字段的值呢,都可以重复,但是呢,多个字段参与联合组建的多个字段整合在一起以后哈,他们这个整合起来的值是不能重复的。
08:13
啊,这这这就是这个联合主件哈,现在呢,它就是给当做联合组件来处理了,但其实呢,我们根本就不想让它当做联合组件来处理是吧?所以说呢,这个时候我们就需要使用ID这个注解,明确的告诉通用map,我们到底哪一个实体类里边的字段啊,和数据库表的组件的字段呢是对应的。哎,所以这个时候我们需要使用ID组件明确标记和数据库表中主键字段对应的。实体类字段,哎,我们看看啊,我们把这个给它标记上。找到我们的师弟类哈。
09:01
我们在这个EPID这好了,加上这个ID的这个注解啊,就加这么一点点啊,就只有这么一点点小的变化,我们再重新的去跑它一下。哎,你看这就没问题了,准确的把我们IDV3的这条记录查询出来,封装为employee对象给我们返回,再看一下SQL语句。确实这个word词句里边呢,就非常准确的就是我们em PID这个字段,这样的话呢,它就能够非常好的把我们试题类的字段和数据库表里边组建的字段呢给对应起来,这就是ID这个字段啊,它非常的重要。我们也是截一个图放在笔记里。这个注解不需要什么属性哈,它不需要设置什么属性,就我们就拿这个注解本身呢,去标记一下就好了。
10:00
这就是我们去看了一下这个ID这个注解,同时我们也跟大家去说一下啊,这个在我们这些通用map所有的方法里边呢,你但凡是遇到了这个primary key。你但凡是遇到了这样的字眼哈,哎,你都需要去注意,他们都需要使用这个ID这个注解啊,来明确的指定到底哪一个字段啊,跟数据库表里边的主键字段是对应的,哎,需要使用ID注解明确标记和。嗯,数据库表主键字段对应的实体类这个,那否则我们通用map会将所有。尸体类字段作为联合主建啊,所以说以后在后边咱们再看到这个by pro这个方法的话,咱们就不不再刻意的去强调这一点了。
我来说两句