• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • springboot框架入門

    標簽: springboot框架

    springboot入門

    1.訪問https://start.spring.io
    Group一般為域名反寫,Artifact填的是項目名
    在這里插入圖片描述
    指定War包,這里用的是MySQL數據庫和MyBatis持久層框架,所以添加依賴,最后點擊Generate the project生成項目
    在這里插入圖片描述
    然后,通過Eclipse的Import功能導入MavenExisting Maven Projects,如果項目沒有開始自動更新,則對項目點右鍵,選擇Maven > Update Project,在彈出的對話框中,勾選**Force update …**然后開始更新,并等待更新結束即可.
    注意:推薦使用Eclipse Oxygen 2以上版本,如果使用的版本較低,例如使用Mars系列的版本,在pom.xml中可能會提示錯誤,原因是maven的相關配置的版本較低,該錯誤可以無視,不影響正常運行。
    在這里插入圖片描述
    如圖,展開項目,找到application.properties文件,配置數據庫的連接

    spring.datasource.url=jdbc:mysql://localhost:3306/tedu_store?useUnicode=true&characeterEncoding=utf-8&serverTimezone=Asia/Shanghai
    spring.datasource.username=root
    spring.datasource.password=root
    

    然后找到springbootApplication類,里面有main方法,直接運行即可
    在這里插入圖片描述
    沒報錯表示運行成功,瀏覽器中直接訪問http://localhost:8080/,默認顯示的是index.html的內容
    在這里插入圖片描述
    導出Excel功能的類

    package cn.zkun.exportExcell;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.ibatis.javassist.expr.NewArray;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class Excel {
    
    	@RequestMapping("downExcel")
    	@ResponseBody
    	public String down(HttpServletRequest request, HttpServletResponse response) {
    		System.err.println("//////////////////");
    		List<Map<String, Object>> listresult = new ArrayList<Map<String, Object>>();
    		for (int j = 0; j < 10; j++) {
    			Map<String, Object> map = new HashMap<String, Object>();
    			for (int i = 1; i < 5; i++) {
    				map.put("rowKey" + i, "第" + j + "行" + i + "列");
    			}
    			map.put("j", j);
    			listresult.add(map);
    		}
    		String name = downUserList(listresult, request, response);
    		return name;
    	}
    
    	/**
    	 * 創建excel
    	 * 
    	 * @param listresult 是需要寫入excel中的數據,通過map中的k-v來將數據寫入excel
    	 * @return
    	 */
    	private XSSFWorkbook createUserListExcel(List<Map<String, Object>> listresult) {
    		// 1.創建HSSFWorkbook,一個HSSFWorkbook對應一個Excel文件
    		XSSFWorkbook wb = new XSSFWorkbook();
    		// 2.在workbook中添加一個sheet,對應Excel文件中的sheet
    		int count=0;
    		for (int k = 0; k <= listresult.size() / 3; k++) {
    
    			XSSFSheet sheet = wb.createSheet("測試表"+k);
    			// 創建一個居中的樣式
    			XSSFCellStyle style = wb.createCellStyle();
    			style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    			style.setBorderBottom((short) 1);
    			style.setBorderLeft((short) 1);
    			style.setBorderRight((short) 1);
    			style.setBorderTop((short) 1);
    			// 合并
    			sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));
    			// 設置列寬
    			sheet.setColumnWidth(0, 2000);
    			sheet.setColumnWidth(1, 3000);
    			sheet.setColumnWidth(2, 4000);
    			sheet.setColumnWidth(3, 4000);
    			sheet.setColumnWidth(4, 8000);
    			// 3.設置表頭,即每個列的列名
    			String[] titel = {"序號", "學院", "任課教師數", "調課次數", "調課原因" };
    			// 3.1創建第一行
    			XSSFRow row = sheet.createRow(0);
    			XSSFRow row0 = sheet.createRow(1);
    			XSSFCell cell = row.createCell(0);
    			cell.setCellValue("武漢理工大學調課情況統計表");
    			cell.setCellStyle(style);
    			// 將列名寫入
    			for (int i = 0; i < titel.length; i++) {
    				// 給列寫入數據,創建單元格,寫入數據
    				cell = row0.createCell(i);
    				cell.setCellStyle(style);
    				cell.setCellValue(titel[i]);
    			}
    			// 寫入正式數據
    			int num=0;
    			for (int i = 3*count; i < listresult.size(); i++) {
    				
    				// 創建行
    				row0 = sheet.createRow(num%3+2);
    				num++;
    				// 序號
    				cell = row0.createCell(0);
    				cell.setCellStyle(style);
    				cell.setCellValue(i + 1);
    				// 學院列
    				cell = row0.createCell(1);
    				cell.setCellStyle(style);
    				cell.setCellValue(listresult.get(i).get("rowKey1").toString());
    				// 任課教師數列
    				cell = row0.createCell(2);
    				cell.setCellStyle(style);
    				cell.setCellValue(listresult.get(i).get("rowKey2").toString());
    				// 調課次數列
    				cell = row0.createCell(3);
    				cell.setCellStyle(style);
    				cell.setCellValue(listresult.get(i).get("rowKey3").toString());
    				// 調課原因列
    				cell=row0.createCell(4);
    				cell.setCellStyle(style);
    				cell.setCellValue(listresult.get(i).get("rowKey4").toString());
    				if(i==3*(count+1)-1) {
    					break;
    				}
    			}
    			count++;
    		}
    		return wb;
    	}
    
    	/**
    	 * 用戶列表導出
    	 * 
    	 * @param userForm
    	 */
    	private String downUserList(List<Map<String, Object>> listresult, HttpServletRequest request,
    			HttpServletResponse response) {
    		String csvFile = "G:\\Excel";
    		// getTime()是一個返回當前時間的字符串,用于做文件名稱
    		String name = new SimpleDateFormat().format(new Date()) + "2";
    		// csvFile是我的一個路徑,自行設置就行
    		String ys = csvFile + "//" + name + ".xlsx";
    		String[] titel = {"序號", "學院", "任課教師數", "調課次數", "調課原因" };
    		String[] columnName= {"j","rowKey1","rowKey2","rowKey3","rowKey4"};
    		int[] columnWidth= {10*100,10*200,10*300,10*400,10*500};
    		// 1.生成Excel
    		HSSFWorkbook userListExcel =Export(listresult, 60000, "武漢理工大學調課情況統計表", titel, columnName, columnWidth);
    		OutputStream os = null;
    		try {
    			// 輸出成文件
    			File file = new File(csvFile);
    			if (file.exists() || !file.isDirectory()) {
    				file.mkdirs();
    			}
    			// 生成的wb對象傳輸
    			response.setContentType("multipart/form-data");
    			response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(ys, "UTF-8"));
    			response.setContentType("application/msexcel");
    			os = response.getOutputStream();
    			userListExcel.write(os);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			if (os != null) {
    				try {
    					os.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		return name;
    	}
    	
    	/**
    	 * 
    	 * @param list
    	 * @param sum           sheet數據條數
    	 * @param header        表頭
    	 * @param titel	                 列名
    	 * @param columnName    list集合中map的key
    	 * @param columnWidth	列寬
    	 * @return
    	 */
    	public HSSFWorkbook Export(List list,int sum,String header,String[] titel,String[] columnName,int[] columnWidth) {
    		// 1.創建HSSFWorkbook,一個HSSFWorkbook對應一個Excel文件
    		HSSFWorkbook wb = new HSSFWorkbook();
    		// 2.在workbook中添加一個sheet,對應Excel文件中的sheet
    		int count=0;//統計生成sheet數量
    		Object obj=null;
    		for (int k = 0; k <= list.size() / sum; k++) {
    			HSSFSheet sheet = wb.createSheet("等級考試成績表"+(k+1));
    			// 創建一個居中的樣式
    			HSSFCellStyle style = wb.createCellStyle();
    			style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    			style.setBorderBottom((short) 1);
    			style.setBorderLeft((short) 1);
    			style.setBorderRight((short) 1);
    			style.setBorderTop((short) 1);
    			// 合并
    			sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, titel.length-1));
    			// 設置列寬
    			for (int i = 0; i < columnWidth.length; i++) {
    				sheet.setColumnWidth(i, columnWidth[i]);
    			}
    			// 3.1創建第一行
    			HSSFRow row = sheet.createRow(0);
    			HSSFCell cell = row.createCell(0);
    			cell.setCellValue(header);
    			
    			HSSFRow row0 = sheet.createRow(1);
    			cell.setCellStyle(style);
    			// 將列名寫入
    			for (int i = 0; i < titel.length; i++) {
    				// 給列寫入數據,創建單元格,寫入數據
    				cell = row0.createCell(i);
    				cell.setCellStyle(style);
    				cell.setCellValue(titel[i]);
    			}
    			// 寫入正式數據
    			int num=0;
    			for (int i = sum*count; i < list.size(); i++) {
    				Map rw = (Map) list.get(i);
    				HSSFRow row2 = sheet.createRow(num%sum+2);
    				num++;
    				for (int j = 0; j < columnName.length; j++) {
    					cell = row2.createCell(j);
    					obj=rw.get(columnName[j]);
    					obj=obj==null?"":obj;
    					cell.setCellValue(obj.toString());
    					cell.setCellStyle(style);
    				}
    				
    				if(i==sum*(count+1)-1) {
    					break;
    				}
    			}
    			count++;
    		}
    		return wb;
    	}
    
    }
    
    

    該類是一個控制器類,實際開發中框架的流程應該是:
    控制器類調用業務類的方法,業務類調用持久接口的方法,持久接口對應訪問數據庫的xml文件.

    版權聲明:本文為qq_44651348原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_44651348/article/details/101068050

    智能推薦

    JQueryEasyUI框架入門

    JQueryEasyUI入門 一、JQueryEasyUI簡介 easyui是一種基于jQuery的用戶界面插件集合。 easyui為創建現代化,互動,JavaScript應用程序,提供必要的功能。 使用easyui你不需要寫很多代碼,你只需要通過編寫一些簡單HTML標記,就可以定義用戶界面。 easyui是個完美支持HTML5網頁的完整框架。 easyui節省您網頁開發的時間和規模。 easyu...

    mybatis框架入門

    1.mybatis框架入門 1.1 mybatis框架的認識: Java的持久層框架 ? 它是ORM(對象關系映射)的框架 Mybatis是一個支撐框架,它以映射sql語句orm方式來數據庫持久化操作. 1.2 mybatis的特點(與jdbc相比) jdbc: 重復性代碼比較多 封裝對象 insert(User user) select 比較麻煩 沒有性能控制 如果要提高效率 需要自己寫緩存 一...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    猜你喜歡

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    精品国产乱码久久久久久蜜桃不卡