大四短時間培訓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>java

這兩個依賴包是必不可少的。程序員

而後,在咱們想要用框架進行上傳文件的時候,須要前臺和後臺的搭建主要的代碼:ajax

在前端,咱們就是須要用form進行表單的提交:sql

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

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

<button id="upload_btn">上傳文件</button>json

</form>後端

Js的代碼:api

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對數據進行處理的工具,也學了不少這個工具的使用,如今一些基本的操做仍是已經掌握了

相關文章
相關標籤/搜索