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文件.
智能推薦
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 比較麻煩 沒有性能控制 如果要提高效率 需要自己寫緩存 一...
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 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...