00:01
各位大家好,下面呢,咱们来完成数据字典导入的功能。也就是说我在Excel表格中写入数据,然后咱们把它导入到我们的数据库里面去,下面咱就来开始做这功能,那这功能怎么做,给各位来写一下,首先第一个呢,如果说咱在页面中,大家说我们该怎么设计,首先第一个这里边是不是多一个按钮叫导入。当我点导入,咱是不是能上传一个Excel的文件呀,然后把文件是不是导入进去啊,所以咱们下面来做这个功能,就是做的就是一个上传操作,只说在上传过程中咱要读内容,而不是直接传文件,那下面我先完成它的接口,我在里边写一下。在这个位置,火箭加上注释。导入数据字典的数据,然后这里边因为咱们做的是上传,所以用的提交方式应该是一个POS提交,在里边起个名字导入嘛,我们就叫import。
01:05
这是我们写的一个方法,然后下面加上它这个值。Result,我们起个名字就叫import,闭口,因为现在呢,你要得到上传的文件,咱们应该都学过spring,包括VC在里边有个对象叫这个马蹄帕be,用它能得到这文件,那我来写一下。MULTTA。马蹄part file,用它得到上传到文件,然后得到之后咱们下面就可以调用service里边的方法,我们叫import data,把这个file传进去,来实现这么一个操作。最终我这里边先是来个。返回值我们是OK,这样的话,咱们把CTRL9完成了,然后完成CTRL之后,下面呢,咱们开始写这个service,把这个我们来写一下。
02:04
首先我先创建方法。然后创建方法之后在它的实现类中来实现这个方法,而这个方法实现咱之前特别说过,在里边咱是不是需要一个变听器啊,也就是说你的代码中啊,是写一个easy Excel里面这个方法叫做是不是叫read的方法,Read的方法中有这么一个参数,第一个参数是你文件的流,就咱们用这个file.get input stream,第二个参数是你实体类的class,就是D这个VO。电class,然后第三个参数,咱是不是要用那个监听器有,但是目前监听器我们还没有,所以咱们下面先把监听器都创建,然后一会儿这段代码再给它补充完整,那我们来做个创建。现在我就来到我的代码中,在这里边呢,首先我先建个包,这个包我就叫listener。
03:05
然后在listen中呢,我来创建一个变声器,我给它起个名字,我就叫这个d listener。然后创建之后让listener,咱们是不是要继承一个类呀,是咱们之前写过的,那这个类我就直接做个复制,咱们要继承就是这个类。以问他。Listener,然后在里边加上我们实体类那个class类型就是D。这个VO。把这个我们给成继成,然后继承之后实现里边的这个方法,它的方法中咱说过以work方法中是不会每行每行进行读取,它会从第二行开始读取,也就是一行。一行的进行读取,这里边的DE,这个VO就是每次读取内容,然后咱们把这内容直接加到数据库中是不是可以了,比如说这个内容就注意到内容,那咱们把它加到数据库就可以了。
04:05
但是这里边有一个小问题啊,你看啊,我现在这个Di listen中,咱要加到数据库,是不是要么调你的service,要么调你的是不是这个map,所以咱们这里边是不是要传入过来一个map,那怎么传入,我来写一下啊,方法当然说有很多种方式。比如说你在上面加上一个注解,然后把它都交给使用管理,咱们可以把那个map入进来是可以的,或者说用其他方式也可以,比如说我们现在在里边,我们直接大家看我这个课件中的写法,你看我这是怎么写的。我怎么做?是不是写一个有参的构造,然后通过构造把它是不是要注入进来啊,所以现在我们这么做也是可以的,就是有多种方案,所以我现在给他就写一下,我在里边呢,就用这种方式把它通过构造咱给它注进来,那我来写一下啊。首先在里边我先给它创建一个这个map,就是这个d map把它创建,然后创建之后呢,生成它这个有参数的构造,我把它。
05:14
生成下。有参的构造。现在咱通过这个来传进来,就这个big map,然后传来之后在里边呢,咱就可以调用方法。把这个数据添加到我们的数据库中,那我们可以调用一下D麦里面这个添加方法,它的添加用的应该是insert里边,你注意啊,传的是不是一个D对象,但是我这是VO,所以咱把VO是不是要给它变成那个D对象就可以了,那我给它快速变一下哈,咱直接就溜上一个。闭口这里边引入它的依赖,然后用那个工具类,就是B中的copy properties,把这个view中那种复制到这个闭口中去,给它做这么一个复制。
06:05
应该是逗号啊,分到D中去,然后咱们把D口直接传进来,这样的话,每行内容它是不是都会给它加到咱们的数据库中,每次就用这个in测的方法把数据加到数据库中。然后这里边我们加入数据库之后,咱们在瑞里边把这个是不是可以给他补充完整,然我给他补充一下啊。首先大家看在这里边呢,它有一个这个异常,我们先加上一个。然后这个异常之后,在这里边咱就需要没我们刚才写那个编程器,就是这个d listener里边传入我们那个map,我在里边把那map给它就注入一下啊,因为咱们用这个map。写一个这个all too well private d。Map,然后这个Di map把它给最后注入,然后注入之后咱们把这个给它就直接传到咱们这里边来,直接传这个这map,或者说里边你直接传一个那个base map是不是可以了,这就不需要写它了,因为咱base map就是我们的map。
07:14
所以这样的话,把这行代码就写完了,然后写完之后,后面给它补充完整,加上这么一个叫she,再加一个叫do read,这样的话就完成一个读的操作,那就可以把Excel中的数据取出来,直接添加到咱们的数据库中,所以这样的话,我们现在就把这个导入的接口部分我们就完成了。然后这过程我们来看一遍啊,首先第一步。在CTRL中呢,咱们得到上升文件,然后第二思维的方法。在service中呢,咱们做法就是直接用easy Excel读取文件中的内容,然后把它调到数据库,因为这个过程中需要用到map,那么map给它传进去,然后在这个监听器里边解代码,它每次读取都会调e work方法,在与构中咱得到数据,最终给他加到数据库就可以了,所以这是关于我们进行这个独操作的一个接口实现,这咱们就写完了。
08:19
然后写完之后呢,咱们下面整合一下前段代码,这个代码我就通过课件咱直接给它复制快速改一下就可以了,首先第一步是不是加个按钮,就是这个导入按钮,然后我现在把导入按钮就放到我们的这个页面中来,我给它放到这个位置就是一个导入。这个按钮,然后这个加上之后在导入里边呢,我们是写了一个方法叫data,那这方法我在下面做一个定义。这是导入。数据字典。Import data,然后导入过程中,其实咱们可以直接啊用一个IUI中那个上传组件,但是现在为了咱们效果更加的友好,所以咱给他做这么一个操作,看我的写法啊,我做什么。
09:10
添加一个弹出层,就是当我点导入让它弹个框,然后在里边咱都上传,所以我这么来做,然后弹出层里边大家看就是这个代码,我把这个代码给各位直接复制过来,然后我说一下它是什么意思,这是我从MUY中直接拿过来了,那就直接用就可以了,我给他就放到我们的。电微状。然后大家看里边的这个结构啊,我把这个。结构先稍微调整一下。这里边用的叫EL dialo,就是一个对话框,然后在e dialo里边,大家看里面有了一个form,就是一个导入,然后在里面怎么写的,主要是用了这个属性,我给他稍微改一下啊这个属性。然后这个属性中大家清楚的看到了,是不是有个值啊,就是这个值当你是false,那我弹框就不弹出来,当这个值是处弹框就可以打开,所以我现在把这个先来一个初始值写到咱们的贝中去。
10:15
这个值我默认值就叫fo,它是用于设置你那个弹框。是否?弹出false就不弹出这个我们做了一个设置,也就是里边的这个值,然后咱们现在要做操作,所以我在import data中就把这值变成数,它就可以探出框,那我们给它改一下啊,在这个方法中。当我们点这个就是导入,它会弹个框,在弹框里边再来设置这个上传操作。然后写一下。这次点。就是我们的这个值。就是这个啊,Dio这个值。等于这个数。这样的话,咱们现在把这页面就初步做到了,然后做到之后咱们来看一下目前的效果,比如说我们再说这里面到底都是什么含义,我们先看一下哈,首先我先刷新。
11:11
刷新之后大家看啊,我点导入。你看什么效果,是不是就弹个框啊,这就是我们要做的效果一弹框,咱在弹框里边是不是点击上传,选择本地一个Excel文件,是不能做到双向操作,就来做这个弹框。然后点击上传的时候,里边有IUI中代码,那我们来看一下啊,首先你看里边第一个就是它的一些基本样式,它的核心在B里面叫ello,是上传组件,然后上传组件中主要有这么几个值,大家看啊第一个值。什么意思是它表示啊,是否支持多个文件,咱目前只能传一个,所以就是bos,第二个表示上传成功,它会调这个方法,这方法随便写的,但是你左边是固定的,就是上传成功这方法会调用,所以我在里边写下这个方法。
12:06
就是咱们上传成功调用的方法,那就是这个方法。咱给他写过来,然后上传成功之后,大家说应该干什么。做什么刷完成功之后,第一个我弹框是不是要关闭啊,我写一下啊,就是第一个我们肯定要关闭弹框,然后第二个是不是要刷新。咱们的页面也如说让页面中得到我们最新内容,那我们关一下啊,关弹框,刚才我提到过,这个值我们等于false滚弹框,然后第二个刷新页面,那我们让这个方法去执行一次,是不是就刷新页面,那我们给它执行一下啊,就是这个值。它等于一我们刷新整一面,就是再简单差一次,这样的话这就完成了,然后完成之后我们继续往下看,咱看下面那种啊。
13:00
在下面里面呢,这个位置是你要请求那个就是我们的接口的路径,咱的路径,那就是这个路径,我给他看一下啊,别写错import。对。然后除了这个之外,下面就是一些相关值的设置,比如说一些提示信息等等,写一下啊,只能上传这个Excel文件,然后一些相关内容,所以咱们现在就完成了这么一个基本操作,关于这个导入数据字典这么一个功能。那这个完成之后呢,下面咱们来做个测试,看一下这个最终效果能不能实现,那我现在把这服务器我们给它先启动起来,然后启动之后我们做一个完整的测试。现在已经完成启动,然后下面我们来做一个完成测试,首先在里面呢,比如说我现在啊,先构建一些数据,为了咱一块儿做测试,比如说我就以它为例,咱们做一个构建,然后我就在这个里边,比如说我给他。
14:05
构建一下数据,前面就是咱们那几个值,我把这几个值也复制一下,就是这么几个。我给他都拿过来。就是我们的表头第一个ID,第二个上级ID名称值,包括编码,比如说这个ID我们给它改一个啊,假如咱们为了跟之前不一样,为了能找到咱给他特别加上这么几个值,比如说第一个值,我就叫这个100,然后它的上级ID是一这个名称,比如说我们是这个什么啊,就是我们这个。咱就叫电脑,电脑的分类,它的值我们叫这个100,然后这个我们就叫这个C。那就是computer c。这是一个值,比如说我们可以再写一个它的ID,我们叫1001,上级ID100电脑,比如咱们写一个电脑,这个联想电脑,它的值我们叫1001,然后这个联想L。
15:06
咱就以这个为例,我们做一个测试啊,当然你可以使更多个。那这个就是文件数据我们构建出来之后,下面再来页面中,首先我先刷新,然后刷新之后点导入,它是不是弹过框了,弹框之后现在我点击上传,选择本地,我们刚才文件就是01点叉LSX,咱们点打开,现在是不是做上传它就完成了,完成之后呢,咱们来看一下这个最终数据有没有给他加进去,我们来看一下啊,首先我们先刷新。大家看啊,咱们刷新之后,你发现这个数据在这里边,是不是它就有了,大家看这数据,呃,就这里。我们刚才加了数据一个是。电脑里的数据,然后包括除了这个之外,下面还有我们的。另外一个数据。
16:00
比如我们找一下那个100那个数据里边应该也都加进去了。但是啊,各位同学,咱们仔细看,我们发现这数据好像不太对吧,虽然说加的数据库中,但是数据好像不对,为什么不对呢?你看啊,我家的电脑。它的pad是一应该没有错,但是我的ID是不是100呀,你发现100没有加进去,另外我的第二个数据是联想电脑,我们发现里边好像没有联想电脑吧,所以它好像不对,那咱看它为什么不对,首先你看它不对原因是不是ID值没有,为什么没有,那我们看一下问题所在到底在哪里,那怎么看呢?我们这么来看啊,首先我在里边呢,我用。D bug方式启动,咱们通过断点调试方式看一下它为什么不对,然后我启动之后在这里边呢,给它加上这个断点,我就在监听器里面加个断点,咱们看一下它这值为什么不对,看它是什么原因造成的,那比如现在为了明显这些数据,我先给他删掉,咱们重新做我添加,然后来到里边。
17:12
我抗怪物刷新点击导入,选择本地的这个文件。然后现在我点打开,然后大家看断点是不是到这行,首先咱们看D里边初始值应该都为空,然后现在我这个D口VO里边大家看。里边数据你发现是不是都有ID对值全存在,然后咱们做一个复制,在D里边,你看这个位置。我们看这ID这支是不是也有啊,最终我们在添加之后,大家看这个数据,它加进之后,然后这里边又加了第二次。包括咱们看这么看代码好像没有错,但是最终数据是不是还是零了,所以咱发现问题就是ID值是不对的,那为什么不对,我们就要排查一下,那我们来找这问题所在到底在哪里啊,我说要怎么找第一个。
18:07
咱们先来到D这个对象中,我们打开,然后你看啊,D这里边呢,没有ID,而ID继承这个贝是按弟弟咱们打开,在贝三弟理中是不是有ID啊,而大家发现问题所在了吗?这ID是什么?是不是自动增长了,但是咱们目前ID用的不是自动增长了,所以这么写是不是不太对呀,咱需要把它是不是改一下呀,但是你这里边你改不能直接改它,因为这个base andt别的类也需要用,那我们怎么改呢?咱们现在比如说我用一种最简的方式,我就把这属性啊都给它复制到咱们这个就是。D这个里边去让他就不去继承贝斯三是不是可以的,因为这个比较特殊,咱就单独写上这么一个内容。然后醒来之后,咱就把这个自动增长这个设置给它去掉,是不是就可以了,这样的话我们再做操作应该就可以正常实现了,所以这是一种最基本的解决方案,然后这个咱们给他加上之后,下面我们再重新启动服务器,我们来最终试一下,刚才问题是因为这ID设置成了自动增长,但是咱这ID不是自动增长,需要咱们手动往里边设置,所以这值它就没有,所以咱给他改一下这效果应该就可以了。
19:27
那咱们兄弟服务器再来试一下。现在这数据我先给它删掉。然后现在我到这个页面中重新刷新。刷新之后点击导入,然后咱们上传还是刚才这个文件,点击打开,把数据加里面去到这个里边,我们现在刷新,咱们看一下这个效果大家看。数据是不对了,你看这数据啊,电脑。是100,然后这个联想电脑是不是1001,大家看现在数据咱们是不是就加到数据库中了,而这数据是通过咱们Excel表格读取,最终加到数据库中的。
20:11
所以这样的话,那就把这个数据字典的导入和导出功能,我们就最终筛出来了,就是数据字典中主要咱们做了三个功能,第一个列表功能,第二个导入功能,第三个导出功能,各位把这三个功能能给他准确的建出来。
我来说两句