00:00
下面呢,咱们就开始实现课程分类管理的导出和导入功能,在这里边呢,我们都需要引入依赖,依赖已经引过了,然后有实体类,这个实体类我在model中统一创建过了,咱们来找一下啊,是这个实体类叫sum e VO,大家看有它的表头部分,还有它的对应关系部分,咱们一块儿导入导出用这个是一类,所以这些准备工作都完成了。那下面呢,咱们先开始做这个导出功能,那导出怎么做,给各位同学做个分析。那咱看一下啊,课程分类的导出功能,其实大家可以理解为导出功能,是不是就是一个下载的这么一个过程,就是一个下载,只是我们现在下载是把数据库中的数据写到Excel中,然后完成导入功能,所以里边第一个要用到下载操作。然后第二个要用到咱们刚才讲这个技术,Easy Excel的写操作。
01:03
这是咱们一个基本分析,那咱们看一下啊,首先说这个下载该怎么做,给各位说这过程啊,下载呢,应该是一个基础知识,里边有这么几个过程,首先第一个下载,咱们需要设一个东西,就是你下载文件的一个类型,这个类型在术语中叫mime类型,这是第一步,咱们看一下我们课件中这个源码里边有段话,就这段话设置你这个下载的类型,大家看类型啊,叫Ms Excel,就是微软的Excel表格,这个叫mime类型。然后除了这个之外,咱们还要做件事情,大家看这个事情。通过response是不是要设置一个响应的头信息?我写一下啊,设置一个响应的头信息叫content dispos,这个头什么意思呢?其他就表示你无论是什么格式的文件,都以这个下载的方式打开,就是都进行下载操作,所以这部分咱们肯定要用到一个下载,然后这个之后,最后那就是easy Excel这个写的过程,所以咱们下面来做这个过程,完成课程分类的导出功能,咱们来最终写一下。
02:23
首先我们的第一步,咱们来到CTRL里边,那我找到啊,刚才CTRL已经创建过了。Controller在里边我们加上一个方法课程分类导出功能。在方法上,咱们加上一个A片ator,一个名字,课程分类。导出。然后下面加上这个方法,这方法我就写上一个get提交,然后给它起个名字,这个名字我就叫export data,导出数据,下面加上方法。
03:01
当然各位注意啊,这个导出呢,是一个下载过程,它应该不需要反映什么信息,什么成功失败,只需要把数据写到一个Excel中,所以这个方法应该就不需要返回值了,就是你不需要写个result了,写也没有错,但是不需要,咱就来一个为了,然后加上方法,我叫is support。Data。这是方法,然后方法中因为要用到下载,所以用到那个response,我们加上htp response。把这个加上,然后最终调用里边的方法,咱们做一个导出。Date把response进去,现在CTRL了就完成了,完成之后下面呢,咱们重点写这个里边在service中把方法先创建。来到它的实现类中,最终实现这个课程分类导出功能,那咱来写一下啊,在这过程中呢,按照咱的流程,他肯定要做下载,所以首先第一步咱们先设置一下下载中一些信息,就是下载的过程。
04:15
那我设一下啊,第一个是你下载那个这个类型,我们叫content里边加上这个,然后这个值我从课件中直接复制了啊,建议各位这种名字也直接复制,你很容易敲错,然后这个之后咱们要设一个头信息。用response这个信息contentpos,包括这里边是中会有乱码问题,咱把中文也做个设置,那这段话我也拿过来。咱们看一下啊,因为这段话写法是比较固定的,所以我直接复制过来,然后它里边会有这个异常,咱们用try cash给它补一下。
05:03
我都加上揣开着里边去。开始里边加上这个exception。然后把这个我们给他都拿进去。这部分。然后咱们看一下啊,第一个设置下载文件的MM类型,这是设置中文,如果比如说我们最终下载名字叫课程分类啊,做一个编码,然后设置头信息,Content position attachment file name,这是固定的,这加上文件名称这一部分就表示设置下载中的这个信息,这各位知道,然后这个之后呢,下面咱做写操作,把数据库表中数据写到Excel表格中去,所以咱的第二部分来查询一下我们里边这个课程分类啊,课程分类表里边的所有数据,把这个查出来。那再来查一下啊,Base map中加上select list,咱们不需要条件直接查询,全部返回到我们这个就是subject list,把所有课程分类数据查出来,这是咱的第二部分,然后查完之后下面呢,咱们开始做这个写的这个操作过程,那我们来操作一下啊。
06:22
就是用easy Excel进行写操作,那怎么操作呢?我们写一下easy Excel里边的方法叫right,咱们现在用这个方法,因为咱是下载嘛,所以通过respond里边得到它那个输出流,第二个加上11类,11类是刚才这个subject e VO点。把这加上,然后加上之后咱的下一步我们就是点上一个sheet,给它起个名字,比如咱们叫课程分类,最后加上方法叫这个do right里边传个例集合。
07:07
这样的话,我们就初步做到了。但是我说明啊,咱们这么做呢,并不正确,是这地方不对,你看啊,我实体类是不是叫subject e VO,但是我这集合里边的每个对象是叫,所以你传这个是不对的,咱要怎么做呢?我们需要做个处理,也就是把这个集合。List给它变成什么,List里边的每部分是subject e VO,需要做这么一个处理,所以咱需要做这么一个转换,那怎么转换,没有特别好的方式,咱就给他便利,然后做转换,那我写一下啊。Subject加上这个例子集合,把它做一个便利。然后便利之后啊,便利之后我们得到里边的每个subject对象,把每个subject对象取出来,然后给它set到这个view中去就可以了,那我写一下啊,先new一个VO对象。
08:12
一个。然后弯之后我们向VO里边来设置它的值,比如第一个ID值,咱通过给它获取出来,这是第一个啊,比如我在设一个subject e VO,点上set,从subject中给它出来。咱们以此类推,最终可以得到,然后得到之后这里边我们建这么一个例子,结构就是这个E这个那我来创建一下啊。E VO list等于new上一个a list,把最终数据放到这里边去就可以了,加上一个A,加上VO,然后最后咱把这个e VO list传进去才对,要不然这数据不对,因为它类型不一样。
09:06
所以现在我可以这么做啊,当然这里边有很多值大家注意啊,如果每次都这么写可以,但是并不方便,在咱死人里边的有个工具类就能做到这个效果,那我写一下啊,这工具类叫B里边的copy,他表示把一个对象中的值复制到另外一个对象中去,咱们看啊,Subject值复制到这个中去,会做一个复制。它会完成这个过程,所以咱们用它可以实现,它的底层就这么做的,只是我们现在用过工具类进行实现,就看各位的习惯啊,所以我建议各位用这个工具类,如果你不习惯,那传统方式一个get一个set,把一个对象中的值复制到另一个对象中去,然后它复制过程中会怎么做呢?找到相同名称的属性,然后把使用值进行复制,如果名称一样复制,如果名称不一样,它就不复制。
10:07
比如大家看啊。这里面有时间,但无忧中没有时间,所以不相同的不复制它,只复制相同的内容,所以现在这就完成了,以上咱就完成了课程分类的导出功能,就是里边的这么一个实现。这各位给他知道啊,这里边如有异常,那我们直接抛出一个进行异常,咱之前写这个叫硅谷课堂exception。20001啊,提示说这个导出失败。现在完成了这个接口部分用下载过程,并且咱们1EXCEL做写操作,在写操作中把咱们查出的例子集合转成EVO,这个例子集合最终能进行写的过程,所以咱们现在这个接口部分就最终完成了。就是里边这个代码,这各位能做的啊,主要是e Excel写操作一个综合使用。
11:07
然后这个完成之后,下面呢,咱们把前端快速整合一下,然后最终把效果测出来,那我们来整合啊,首先前端很简单,咱们在页面上加上这么一个按钮,然后最终进行实现。那我来加一下啊,在list中,我就在table的下边加上一个按钮,这按钮咱就叫导出。也就是这个按钮啊,大家看啊,这个导出,导出里边呢,我加上一个方法叫port date,那这方法我这接复制,因为它就是一个下载,所以咱就用这个window的open弹个框,或者说打开一个新的页面,然后在里边做这个下载过程。那我现在把这个咱们放到method里边去做这个课程分类的导出功能。然后在里边加上你那个接口的路径,因为咱们就是get提交,把这加就可以了,路径咱们检查遍啊,不要写错这个路径in VO加上date。
12:15
现在啊,咱们就把这个课程分类导出功能,我们就最终完成了,就这么一个时间完成之后,我现在把服务器重新启动一下,然后咱们最终把这功能做个最终的测试,就看一下我们数据库表中的课程分类数据能否导出到咱们的一个Excel表格中去。等它启动咱们试一下啊。我先登录来到这里边,点击列表是不出来了,然后现在大家看啊,我点导出你看啊,是不是弹过框,有的浏览器中可能不会弹框,它会直接下载,这跟浏览器有关,但是现在我这浏览器弹了一个框,那我选择路径,比如选择就在我的桌面。
13:04
然后咱们你看啊,这是我文件的名称,你可以改别的名字,最后点下载它就下载到我的本地,然后在本地咱们找到这个文件,我把它双击打开。大家看数据是不是有了,这就是咱们从数据库中得到数据,最终给它写到了一个Excel中去,所以咱们通过这个功能就完成了导出功能,把课程分类的数据导出到Excel中去。这功能我们就完成了。
我来说两句