00:01
各位大家好,我们继续来开发数据自定模块,刚才呢,咱们把后端接口的这个项目已经搭建出来了,并且完成了配置文件以及相关类和接口的创建,那我们下面先来开发里面的第一个功能,就是数据字典列表显示功能。那咱们看这个该怎么做。首先在里边呢,比如我现在我就先来编写这个CTRL了,在CTRL里边呢,我们来写上这个方法,因为这个方法中大家注意我们要查询里边的这个数据字典的数据,但是数据中等,因为它有多层数据,所以咱为了就是能显示,也为了用到我们这个I的UI中的组件,所以咱们来做第一个接口,什么接口呢?那就是。根据我们这个ID查询ID下边这个数据中的子分类或者子数据到底有哪些,什么意思呢?比如我现在查这个就是1万的这个ID值,那我们查什么,就查1万下边有哪些子数据,比如说这个医院等级下边是不是有这个三级、二级、一级把这个查出来,所以咱就来做这个事情,查询ID下边那个子数据,或者他那个子分类。
01:19
那我们下面就来做这么一个内容,比如说根据上级ID获取子节点数据的列表,这为了咱一会儿显示做个使用,那咱们看这个该怎么做,首先在里边呢,我们想这个方法。根据我们这个数据的ID查询下面它的子数据。这么一个列表。那我们写方法,首先我写个提交方式,我们就来一个盖提交,然后在里边起个名字,就叫饭的这个。比如说叫find tired。查询子数据,然后里边传入我们这个就是负节点的ID,传完之后下面写方法,Public,各位应该知道,咱之前返回统一结果是这个。
02:06
Result,所以现在咱们也是返回result,然后里边写上方法的名字,写上名字之后在里边把这值取到,这个值取的方式咱用pass注解加上一个long ID,这样的话就取到了。去掉之后,其实我们在方法上可以加个注解,为了咱后面测试方面就这个A片啊,Wait这个应该记得啊,里边有个Y表,我们给它起一个这个中文的名字。那不就是。呃,就是这个名字啊,根据数据ID获取它的子数据列表,就是这么一个名字,然后这个写完之后啊,包括咱们在这上面是不是也有一个注解。各位是否记得啊,干姜12国中曾经用过,是这个A片。然后API中我们有个Y,给它起个名字,它就是数据字典的这么一个接口,把这些都加上,在咱后面测试方便,然后加上之后,咱下面就根据ID是不是它下边的子数据列表,那我们现在就调service中的方法做查询,这个方法我在中,然后后面肯定要做一些操作,所以我在service里边写个方法,我就叫犯的这个。
03:19
写个名字啊,叫child。这个date。比如说我们叫这个find child date就叫这个名字,然后里边呢,传入这个ID,最终呢,大家注意,当我查询就是我的ID下边的子数据里边是不是可能没有可能有一条,是不是有多条,所以咱返回到是不是应该是一个例子题号。然后例子中的泛型就是这个D口。这个是。List的,所以咱们现在把这个做一个创建,然后这个做到之后,最终呢,咱们把这结果就后返回,咱们就是return result,点上这个OK里边传入是不是意思这些数据最终返回就是以一个Jason形式返回。
04:09
所以现在ctrler它就完成了,在里边就根据ID查询下面的子数据的列表,这个我们就写完了ctrler,然后写完CTRL之后,下面呢,咱们来写这个service。那我在中把这方法去创建,我点out,比如说先创建这个方法。方法就是刚才我们做的根据ID查询子数据,然后创建之后在它的实现类中把这个实现的方法,咱们最终做个实现,就是里边的这个,然后这个选完之后,咱在这里边就来调用my pro中的方法做个实现,因为咱之前没这么写过,现在我们这么来写一下,这怎么做呢?问各位,Service中怎么叫map?你说怎么做,按照原始方式,咱把map是不是要给它也是凹注进来呀,但是目前呢,因为咱们继承这个service的实现类,这里边不需要继承,我之前说过大家看一遍啊,大家看这两行代码。
05:09
你发现他帮咱们把map是不是已经住进来了,所以我们怎么做直接去调这个。Base map里边的方法就可以了,这是它帮我们注入的,那么调base map中咱们找一个可以进行查询的方法,我们找一下。大家看是哪个方法。你儿用哪个?Select是不是意思,因为咱有条件嘛,然后在里边呢,我们传入一个条件,那这条件我在上面new一个条件的构造器,就是query rap d。什么叫rapper等于上一个?Query rapper,然后new完之后在rapper中设置它的条件值,里边肯定是传咱到ID。但是条件值怎么设置?问各位,大家可以考虑一下,我现在的功能就是根据ID查询下面的子数据,那你说这个条件我们该怎么写?
06:05
比如说我们写个语句,咱先看一下哈,肯定是select星from,我们叫这个。然后加什么是不是来一个where条件,Where中写什么,是不是你的parent ID等于你的ID值啊,因为根据ID查它下面的子数据,是不是要根据这个做个比对。所以咱们现在要传的这个字段是不是应该就是。ID根据它查里面的子数据,然后写完之后咱们把rapper传进去,最终大家看。它返回的是不是就是一个历次集合。所以这样的话,这数据我们就得到了,得到之后最终咱们做个re退就可以了,这样的话咱们现在把维就完成了这么一个结构,但是完成之后呢。给各位特别强调,咱们刚才提到过,在D里边呢,它除了我们表里边对应的这些字段之外,还有一个属性,这个东西叫哈希丘准,这个在表里边没有吧,所以这个值咱是不是需要自己判断一下,就判断你节点下面是否有子节点,如果有的话,这个值就改成数,没有的话这个值就改成false,所以这个值需要咱们手动做个处理,因为它默认没有这个字段,所以咱们来处理一下。
07:24
那怎么处理,比如说我这么做啊,我就单独写个方法,判断你这个ID下边是否有子节点,或者说子数据。那我们来写一个方法,咱一块来做调用,因为在这个里边,我只是这里边用这方法,别的地方不需要,所以我就来一个private,然后让他就返回一个布尔类型,就是判断是否有这个子节点。就是意思children啊,就要这个名字,然后在里边呢,我们传入那个ID值,因为根据它我们要做一个判断,就来一个ID,然后下面我们调方法,这个方法肯定也是调贝麦中的方法,看下面有没有直接点。
08:10
那各位说用哪个方法?首先第一个我们用此来的例子是不是可以啊,没有问题,但是因为咱们现在的目的都要明确,咱们并不想查出它的这些点,只想看它下边有没有直接点,是不是就可以了,所以这里边还有一个方法。咱再换一个方法用。大家看这个方法。Select count里边是不是加条件,它就得到你这里边有没有那个数据反映你的数量,如果这个值是零就没有,如果这个值大于零或者说大于等于一就是有数据,所以用它也可以实现。然后里边传条件,条件应该就是这个条件,看你的节点下边有没有子节点,然后咱们把rapper直接传进去,最终它返回到就是一个int类型,比如我们要count。然后反应镜合内形之后,咱可以做个判断,如果这个值,比如这个值它是零,那里边就没有数据,这值就是POS,如果这个值是大于等于一,是不是有数据用它可以做到,但是这里边我们做个判断,那怎么判断呢?我来写一下,就是咱就来一个瑞吞。
09:19
Count大于零是不是就可以了?这些法要各位能看懂啊,什么意思呢?看大于零,我们快速分析一下啊,应该不难理解,你注意,如果说我这里边没有数据,看的是不是就零了,你说零大于零会返回什么。是不是就false,如果说有数据,那这个值是不是一或者是二,比如说我们这个一大于零会返回什么,是不是就是处,所以咱直接count大于零,是不是就根据你的值返回数,或者返回false,是不是这个结果,所以咱就不需要再加个if或者S判断了,用这个直接就返回true false。
10:00
这样的话,这方法就完成了,然后完成之后咱在这里边来做个操作,怎么操作呢?给各位强调,因为现在例子中呢,有很多的第对象,而在每个地对象中呢,又都有这个字段,所以咱们要向字段中分别设它的值。要么是处,要么是false,咱们需要做的事情,那大家说我们下面咱该怎么做呢?我写一下啊,就是像我们这个。例子结合中的每个地考对象中。来设置我们这个哈希children的这个值,这个值要么是处,要么是false。那各位说怎么做?你说怎么集合中设这个值?给个位强调,这个呢,应该没有特别好的方式集合嘛,咱是不是要便利,便利之后得到里边的每个对象,然后咱调方法判断,如果是处往里设置,如果false往里设置是不是就可以了,那咱下面来做一下,我就把这个集合咱们来做一个便利。
11:06
比如现在啊,我就写一个这个。普通的这个后循环便利了啊,咱就写一个人里边是一个D口。什么叫D,然后它是d list,咱就来一个这么一个增强后循环,然后这个便利之后,我们得到每个D中的那个那种,因为它要根据ID是不是要插曲,所以我们就得到D中这个。ID值把这个先得到。这是一个ID啊,比如这个值我们就要这个。D口ID。然后得到ID之后,咱是不是要调刚才这个方法,那我来调一下啊,咱就来一个这点意思,Children准传这个D和ID,它返回的就这个true或者false,我们就叫意思。Child,然后这个true和false,咱们都设置到这个地和对象中,是不是可以了,这个哈children,我们是is child,这样的话这过程就完成了,我再说一遍啊,这个过程咱们后面会经常这么做。
12:11
它的做法就是把例子集合电力得到里边的每个对象,然后每个对象中咱根据它的ID值去查下面有没有子节点或者子数据,如果有或者没有,它反应说false,咱们把它的反应值就直接塞到这个哈希children里面去就可以了。最终把集合带返回这个,再返回D中,就会有这个true和false的这个值。所以咱们现在就把service就完成了,然后完成之后咱们这个接口也就完成了开发,根据ID查询下边有没有这个子数据,或者说子节点数据,这个过程我们就做到了,所以各位按照我刚才的开发能把这过程给它快速做到,就是根据拍D查下面有没有子节点,包括里边有这个哈希修正这个值需要咱们手动做设置,我这里边是做了一个判断。
13:08
然后里边就一个设置。这就是关于接口的开发,然后开发之后,咱们下面把这个服务器启动,咱就把这个接口我们做一个测试,看一下效果能不能出来。因为之前呢,我们在common里边各位应该记得啊,咱是不是整合了那个swa。通过swag是不是能做这个接口测试,就是我们应该在这位置有一个swag,是不是咱整合过了,而现在我在型类上边还加这个叫康的态,是不是能扫描到这个swa那个配置类,所以现在用SWG应该是能进行测试。这个啊是咱们的开发过程,那我下面把这个呼吸启动,咱们来做个测试。启动一下啊,我们来看一下,首先大家看一下,我们现在项目的端口号是这个8202,咱通过这个用swa做一个访问,那我们先等它启用起来,先看能不能启用成功,如果能成功,那我们就马上测试。
14:14
啊,各位看现在是不是可以了,进入成功了,然后下面我在浏览器中打开我们那个swa。我打开一下啊。Local house的8202加上S。ui.html,然后we回扣。大家看目前这里边我们找到我们这个分类外个A片我们看到啊,这里边这个值。啊,就是这个啊,就是它啊,现在这个是不是就出来了,就是我们写的这么一个接口。就是这个啊,然后这个接口有之后呢,咱们下面在里边找到我们这个方法,就刚才我们写的这个方法。然后方法中我们现在传入一个ID,就看里边能不能查出它的子分类,比如说咱们找一个啊,我就找这个1万的这个ID。
15:05
然后把这ID给他复制过来,在里边我们点这个try out。大家看效果提示咱们是失败,那我们看为什么咱先看一下我们这里边大家看啊。这里边呢,他报了一个错,咱看报什么错啊。这错误应该很明显,大家看怎么错?他说叫这个circle是问题,说你circle不对,然后其实我们说这个table在这里边是不存在呀,那我们看一下啊,看一下是我哪里写的不对。各位看啊,现在数据库叫预约挂号hospital,然后咱们看过这个表。应该不在这数据库中吧,咱是不是在这个CMN的数据库中啊,最后数据库是写错了,因为咱们建立一个新的库,所以把这库改一下,预约挂号CMN这样的话就可以了,改完之后咱把服务器重新启动一下,然后我们再做个测试。
16:03
我给它重新启动一下啊。咱们给他再试一下啊。好,现在启动,启动之后我到里边刷新。刷新之后呢,这里边我还是用这个1万,然后再点try it out,大家看现在数据是不是就出来了,就是里边查出了那个1万下边的子数据,或者说子这个节点,然后大家看啊,在数据中咱就重点看一个数据,这个数据。哈西丘准,你看它下边,因为目前它下边没有子分类,这只是false,如果有子类啊,它只就是一个处,所以这样的话呢,咱们现在就完成这个数据字典列表接口开发,咱把这个接口部分就完成了,各位能把这过程按照我刚才写的流程能给它快速完成出来。
我来说两句