大四短期培训0901(ssm案例增删改查、kettel数据管理)

在实际的项目开发中,一个软件的从开始到编码的过程和公司里面的一些实际的东西,在公司中,一个软件从需求到上市,首先就是进行需求的分析,需求文档的编写,对一些功能和业务流的设计,然后就是根据用户的需求和程序员进行交流,对一些功能的实现是不是可以,是不是在规定时间内实现出来,然后就是数据库的设计,当然在这一环节,就是只有经验搞得程序员才能参与,因为在数据库的设计上,我们需要有长久的考虑,日后的数据库的改变,是会带来很多的不必要的麻烦,因为底层设计的东西,可能就跟一个字段的变化,产生很多的问题,就要改变很多的代码,这时候就是对我们的经验的考察,只有经验丰富,老练的程序员才能参与数据库的设计,在数据库设计完成之后,就是需要对前端进行设计,这时候或许有ui设计者,然后就是通过建模,对系统进行整合和描绘,对代码中的类和属性进行整理,在uml的建模完成之后,就是程序员进行代码编写的阶段了,在代码编写完成之后,就是对我们写的代码进行校验,再没问题之后,就会将项目传给高级的软件工程师,进行框架和代码上的优化,在优化完成之后,就是软件的测试阶段,用到的主要的技术就是黑盒和白盒技术,测试完成之后,就是项目的交付阶段了。今天主要讲的是ssm框架的增删改查(这部分是要自己进行实现),并没有具体的将实现的过程,然后就是要实现文件的上传以及文件的下载,通过今天的学习对ssm的框架有了更深一步的了解,对项目的运行以及页面之间的跳转,控制器的解析等等。我在编程的时候,用到的工具是idea,这里面有的上面和eclipse是不一样的,相对eclipse在很多的方面个人感觉使用起来更加的方便。当我们在前端进行部分java代码编写时候,就会出现很多的问题,这时候就需要导入一定得依赖,来支持我们的功能:

<dependency>
    <
groupId>javax.servlet</groupId>
    <
artifactId>jsp-api</artifactId>
    <
version>2.0</version>
    <
scope>provided</scope>
</
dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <
groupId>javax.servlet</groupId>
    <
artifactId>javax.servlet-api</artifactId>
    <
version>3.1.0</version>
    <
scope>provided</scope>
</
dependency>

这两个依赖包是必不可少的。

然后,在我们想要用框架进行上传文件的时候,需要前台和后台的搭建主要的代码:

在前端,我们就是需要用form进行表单的提交:

<form id="fileform" method="post" enctype="multipart/form-data">

<input type="file" id="fileupload" name="uploadfile"/>

<button id="upload_btn">上传文件</button>

</form>

Js的代码:

var form = new FormData(document.getElementById("fileform"));

                   $.ajax({

                    type:"post",

                  url:"upload",

          data:form,

          processData:false,

          contentType:false,

          dataType:'text',

          success:function(data){

                   

          }

        });

后端的代码:

@RequestMapping("upload")

          public String testupload(@RequestParam("uploadfile") MultipartFile file,

          HttpServletRequest request) throws IllegalStateException, IOException{

                   if(!file.isEmpty()) {

            //上传文件路径

            String path = request.getSession().getServletContext().

                             getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");

            //上传文件名

            String filename = file.getOriginalFilename();

            File filepath = new File(path,filename);

            //判断路径是否存在,如果不存在就创建一个

            if (!filepath.getParentFile().exists()) {

                filepath.getParentFile().mkdirs();

            }

            //将上传文件保存到一个目标文件当中

            file.transferTo(new File(path + File.separator + filename));

            //输出文件上传最终的路径测试查看

            return String.valueOf(file.getSize());

        } else {

            return "0";

}

          }

并且提交的方法必须是post的方法,而且在上传两次相同文件名称的文件的时候,在后台接收到的文件就会出现重名的情况。

文件的下载的前台的主要代码:

<td><a class='down_file_btn' href='downloadfile/"+data[i].fid+"'>下载</a>

在后台还是一样要进行处理:

          @RequestMapping(value = "downloadfile/{fid}",produces = "application/json;charset=utf-8")

          public void downloadlm(@PathVariable Integer fid,HttpServletRequest request,

          HttpServletResponse response,Model model) throws IOException {

                   Myfile myFile = loginService.selectFileById(fid);

                   String path = request.getSession().getServletContext().

                   getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");

                   String filename=myFile.getUrl().substring(myFile.getUrl().lastIndexOf("\")+1); 

                   File file = new File(path+File.separator+filename);

                   //设置响应的头信息,解决文件名为中文乱码的问题

                   response.setHeader("content-disposition", "attachment;filename=

                   "+URLEncoder.encode(file.getName(), "utf-8"));

                   //使用文件输入流读取下载文件信息

                   FileInputStream in = new FileInputStream(file);

                   //得到响应流中的输出流

                   OutputStream out = response.getOutputStream();

                   //建立一个缓存区

                   byte[] buffer = new byte[1024];

                  

                   int len = 0;

                   //把输入流中的数据通过循环写入到响应流中

                   while((len = in.read(buffer)) > 0) {

                             out.write(buffer,0,len);

                   }

                   

                   in.close();

                   out.close();

                  

                  

          }

然后就是使用ssm的框架对我们的数据信息进行增删改查的操作,这里因为我之前做过相同的功能,框架都是现成的,就是稍微改了点东西,在我们进行数据库的操作的时候,首先就是我们的配置是必不可少的,首先就是对我们数据库的连接上的不同,我们可以通过配置文件进行链接,不在像之前的jdbc,每次进行数据库的操作都是要用到我们的数据库的链接,在每次的调用上,就显得很繁琐,这就是框架优点的体现:

,然后就是对数据库的操作也全是通过mapper进行的,不需要我们每次都需要通过不同的参数的方法的封装,这时候就只需要我们在xxxmapper.xml文件中进行相关的配置操作,在SpringBootMapper有两种方式,一种是通过xml的方式进行数据库的操作,还有就是通过自定义类的方式进行,这时候,需要在我们的类文件上加上Mapper的注解,或者是在我们的config文件或者是主函数启动类上加上mapperscan的注解,这样就可以告诉我们的程序,我们的Mapper在哪里,然后就可以将一个文件夹下的所有的文件定义为Mapper,这样就是我们在大量的Mapper的时候常用的一种方式。然后就是我们的在controller中进行我们的请求解析,然后通过不同的解析返回不同的访问页面:

@GetMapping("deleteEmp")
public String deleteEmployee(Employee employee){
    
employeeService.deleteEmp(employee.getLastName());
    
return "success";
}

这种就是在页面上发送deleteEmp的请求,然后我们在后台就可以进行地址的解析,返回固定的东西给前台的显示

后来老师还讲到了一个工具的使用,这样就是解决了很多的问题,我感觉就是对于数据库的操作的方便大大的提高,我之前在进行实习的过程中,公司每天早晨都会有人早到公司,对每个数据库进行安全的验证,以及系统里面的每个模块的确定没有问题,也经常在晚上跑sql脚本,对数据库进行数据的维护,如果有了这个东西,感觉那种工作就会简单很多,当然作为一个实习生,公司是不会让我接触这些维护数据库的工作。

这个工具就是kettel,就是一个etl对数据进行处理的工具,也学了很多这个工具的使用,现在一些基本的操作还是已经掌握了

在实际的项目开发中,一个软件的从开始到编码的过程和公司里面的一些实际的东西,在公司中,一个软件从需求到上市,首先就是进行需求的分析,需求文档的编写,对一些功能和业务流的设计,然后就是根据用户的需求和程序员进行交流,对一些功能的实现是不是可以,是不是在规定时间内实现出来,然后就是数据库的设计,当然在这一环节,就是只有经验搞得程序员才能参与,因为在数据库的设计上,我们需要有长久的考虑,日后的数据库的改变,是会带来很多的不必要的麻烦,因为底层设计的东西,可能就跟一个字段的变化,产生很多的问题,就要改变很多的代码,这时候就是对我们的经验的考察,只有经验丰富,老练的程序员才能参与数据库的设计,在数据库设计完成之后,就是需要对前端进行设计,这时候或许有ui设计者,然后就是通过建模,对系统进行整合和描绘,对代码中的类和属性进行整理,在uml的建模完成之后,就是程序员进行代码编写的阶段了,在代码编写完成之后,就是对我们写的代码进行校验,再没问题之后,就会将项目传给高级的软件工程师,进行框架和代码上的优化,在优化完成之后,就是软件的测试阶段,用到的主要的技术就是黑盒和白盒技术,测试完成之后,就是项目的交付阶段了。今天主要讲的是ssm框架的增删改查(这部分是要自己进行实现),并没有具体的将实现的过程,然后就是要实现文件的上传以及文件的下载,通过今天的学习对ssm的框架有了更深一步的了解,对项目的运行以及页面之间的跳转,控制器的解析等等。我在编程的时候,用到的工具是idea,这里面有的上面和eclipse是不一样的,相对eclipse在很多的方面个人感觉使用起来更加的方便。当我们在前端进行部分java代码编写时候,就会出现很多的问题,这时候就需要导入一定得依赖,来支持我们的功能:

<dependency>
    <
groupId>javax.servlet</groupId>
    <
artifactId>jsp-api</artifactId>
    <
version>2.0</version>
    <
scope>provided</scope>
</
dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <
groupId>javax.servlet</groupId>
    <
artifactId>javax.servlet-api</artifactId>
    <
version>3.1.0</version>
    <
scope>provided</scope>
</
dependency>

这两个依赖包是必不可少的。

然后,在我们想要用框架进行上传文件的时候,需要前台和后台的搭建主要的代码:

在前端,我们就是需要用form进行表单的提交:

<form id="fileform" method="post" enctype="multipart/form-data">

<input type="file" id="fileupload" name="uploadfile"/>

<button id="upload_btn">上传文件</button>

</form>

Js的代码:

var form = new FormData(document.getElementById("fileform"));

                   $.ajax({

                    type:"post",

                  url:"upload",

          data:form,

          processData:false,

          contentType:false,

          dataType:'text',

          success:function(data){

                   

          }

        });

后端的代码:

@RequestMapping("upload")

          public String testupload(@RequestParam("uploadfile") MultipartFile file,

          HttpServletRequest request) throws IllegalStateException, IOException{

                   if(!file.isEmpty()) {

            //上传文件路径

            String path = request.getSession().getServletContext().

                             getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");

            //上传文件名

            String filename = file.getOriginalFilename();

            File filepath = new File(path,filename);

            //判断路径是否存在,如果不存在就创建一个

            if (!filepath.getParentFile().exists()) {

                filepath.getParentFile().mkdirs();

            }

            //将上传文件保存到一个目标文件当中

            file.transferTo(new File(path + File.separator + filename));

            //输出文件上传最终的路径测试查看

            return String.valueOf(file.getSize());

        } else {

            return "0";

        }

          }

并且提交的方法必须是post的方法,而且在上传两次相同文件名称的文件的时候,在后台接收到的文件就会出现重名的情况。

文件的下载的前台的主要代码:

<td><a class='down_file_btn' href='downloadfile/"+data[i].fid+"'>下载</a>

在后台还是一样要进行处理:

          @RequestMapping(value = "downloadfile/{fid}",produces = "application/json;charset=utf-8")

          public void downloadlm(@PathVariable Integer fid,HttpServletRequest request,

          HttpServletResponse response,Model model) throws IOException {

                   Myfile myFile = loginService.selectFileById(fid);

                   String path = request.getSession().getServletContext().

                   getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");

                   String filename=myFile.getUrl().substring(myFile.getUrl().lastIndexOf("\")+1); 

                   File file = new File(path+File.separator+filename);

                   //设置响应的头信息,解决文件名为中文乱码的问题

                   response.setHeader("content-disposition", "attachment;filename=

                   "+URLEncoder.encode(file.getName(), "utf-8"));

                   //使用文件输入流读取下载文件信息

                   FileInputStream in = new FileInputStream(file);

                   //得到响应流中的输出流

                   OutputStream out = response.getOutputStream();

                   //建立一个缓存区

                   byte[] buffer = new byte[1024];

                  

                   int len = 0;

                   //把输入流中的数据通过循环写入到响应流中

                   while((len = in.read(buffer)) > 0) {

                             out.write(buffer,0,len);

                   }

                   

                   in.close();

                   out.close();

                  

                  

          }

然后就是使用ssm的框架对我们的数据信息进行增删改查的操作,这里因为我之前做过相同的功能,框架都是现成的,就是稍微改了点东西,在我们进行数据库的操作的时候,首先就是我们的配置是必不可少的,首先就是对我们数据库的连接上的不同,我们可以通过配置文件进行链接,不在像之前的jdbc,每次进行数据库的操作都是要用到我们的数据库的链接,在每次的调用上,就显得很繁琐,这就是框架优点的体现:

,然后就是对数据库的操作也全是通过mapper进行的,不需要我们每次都需要通过不同的参数的方法的封装,这时候就只需要我们在xxxmapper.xml文件中进行相关的配置操作,在SpringBootMapper有两种方式,一种是通过xml的方式进行数据库的操作,还有就是通过自定义类的方式进行,这时候,需要在我们的类文件上加上Mapper的注解,或者是在我们的config文件或者是主函数启动类上加上mapperscan的注解,这样就可以告诉我们的程序,我们的Mapper在哪里,然后就可以将一个文件夹下的所有的文件定义为Mapper,这样就是我们在大量的Mapper的时候常用的一种方式。然后就是我们的在controller中进行我们的请求解析,然后通过不同的解析返回不同的访问页面:

@GetMapping("deleteEmp")
public String deleteEmployee(Employee employee){
    
employeeService.deleteEmp(employee.getLastName());
    
return "success";
}

这种就是在页面上发送deleteEmp的请求,然后我们在后台就可以进行地址的解析,返回固定的东西给前台的显示

后来老师还讲到了一个工具的使用,这样就是解决了很多的问题,我感觉就是对于数据库的操作的方便大大的提高,我之前在进行实习的过程中,公司每天早晨都会有人早到公司,对每个数据库进行安全的验证,以及系统里面的每个模块的确定没有问题,也经常在晚上跑sql脚本,对数据库进行数据的维护,如果有了这个东西,感觉那种工作就会简单很多,当然作为一个实习生,公司是不会让我接触这些维护数据库的工作。

这个工具就是kettel,就是一个etl对数据进行处理的工具,也学了很多这个工具的使用,现在一些基本的操作还是已经掌握了

原文地址:https://www.cnblogs.com/zhaochunhui/p/11451501.html