回顾
mybatis的generator逆向生成工具
根据id查询,根据id删除,可选保存,可选更新,条件查询
购销合同(购销合同,货物表,附件)
购销合同管理 : 删除
货物管理
1.七牛云存储
1.1 账号申请
https://portal.qiniu.com/signup
1.2 账号的秘钥
空间名: heima92
域名 : ptldqogfy.bkt.clouddn.com/图片
AccessKey : COuoDRVa7JLsuurzIvQSI_pEDceHDw3yGfJEmvwv
SecretKey : 3RWpTjB5Jxg3QosUFr4mxbHXJ5JR2m6AHQqYsSlr
1.3 抽取工具类
public class FileUploadUtils {
private static String accessKey ="COuoDRVa7JLsuurzIvQSI_pEDceHDw3yGfJEmvwv";
private static String secretKey ="3RWpTjB5Jxg3QosUFr4mxbHXJ5JR2m6AHQqYsSlr";
private static String bucket ="heima92";
private static String url="http://ptldqogfy.bkt.clouddn.com/";
/**
* 参数:uploadBytes
* 文件的byte数组
* 返回值:
* 图片的url请求路径
*
*/
public String upload(byte[] uploadBytes) {
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = null;
try {
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(uploadBytes, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
//System.out.println(putRet.key);
key = putRet.key;
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
} catch (Exception ex) {
//ignore
}
return url+key;
}
}
/* public static void main(String[] args) throws IOException {
File file=new File("D:\\logo.jpg");
FileInputStream fis = new FileInputStream(file);
byte[] bytes = new byte[fis.available()];
fis.read(bytes);
String imgUrl = new FileUploadUtils().upload(bytes);
System.out.println(imgUrl);
}*/
1.4 完成货物图片的上传
注意事项 :
- form表单的enctype属性
- form表单的method=post
- 文件对应的input,type属性=file
- 图片解析器配置到springmvc配置文件中
- 上传的对象对应方法中的一个参数MultipartFile
#2.附件管理
2.1 列表查询
2.2 保存附件
2.3 修改附件
2.4 删除附件
3.细粒度权限控制
数据层面的权限控制
3.1 管理本部门所有人员
3.1.1 修改保存添加对应的属性
3.1.2 细粒度查询
3.2 管理本部门和下属部门
4.poi入门
4.1 Excel概述
Excel 2003 | Excel2007及以上 |
---|---|
.xls | .xlsx |
二级制复合文本 | xml |
最大行 65536 | 最大行 1048576 |
存储量有限 | 格式简单,存储量大 |
4.2 POI的应用场景
- 生成Excel报表
- 解析Excel报表
4.3 生成Excel报表的入门案例(重点)
- 创建工作簿
- 创建sheet
- 创建row
- 创建cell
- 设置单元内容
- 生成excel文件
/**
* 测试使用poi生成excel报表
*/
public class PoiTest01 {
public static void main(String[] args) throws Exception {
//1.创建工作表(工作簿) HssfWordBook :2003版本excel , XssfWorkBook : 2007版本 ,SxssfWorkBook : 百万数据
Workbook wb = new XSSFWorkbook();
//2.创建一个sheet(页)
Sheet sheet = wb.createSheet("abc");
//3.创建一个行
Row row = sheet.createRow(2);//参数:行索引,从0开始
//4.创建一个单元格
Cell cell = row.createCell(2);//参数:单元格索引,从0开始
//5.设置单元格内容
cell.setCellValue("传智播客");
//6.设置单元格样式(了解)
CellStyle cs = wb.createCellStyle(); //创建工作簿样式
cs.setBorderRight(BorderStyle.THIN);
cs.setBorderLeft(BorderStyle.THIN);
cs.setBorderTop(BorderStyle.THIN);
cs.setBorderBottom(BorderStyle.THIN);
Font font = wb.createFont(); //创建字体对象
font.setFontName("华文行楷");
font.setFontHeightInPoints((short) 18);//字号
cs.setFont(font);
cell.setCellStyle(cs);
//7.生成excel报表文件
FileOutputStream fos = new FileOutputStream("E:\\demo1.xlsx");
wb.write(fos);
fos.close();
}
}
4.4 解析Excel报表的入门案例
/**
* 解析excel报表
*/
public class PoiTest02 {
public static void main(String[] args) throws Exception {
//1.根据excel文件获取工作簿
Workbook wb = new XSSFWorkbook("E:\\课程资料\\授课文档\\黑马92\\05-项目一\\day09\\03-资料\\poi资料\\demo.xlsx");
//2.获取到工作簿的第一页
Sheet sheet = wb.getSheetAt(0);//参数 : 页的索引,从0开始
//3.循环获取每一行
for(int i=0; i<= sheet.getLastRowNum();i++) { //获取的最后一行的索引 3
//获取每一行
Row row = sheet.getRow(i);
for(int j=2; j<row.getLastCellNum();j++) { //获取的最后一列的列号
//获取每一个单元格
Cell cell = row.getCell(j);
Object obj = getCellValue(cell);
System.out.print(obj + " ");
}
System.out.println();
System.out.println("--------");
}
//4.循环获取每行中的每个单元格
}
/**
* 获取单元格中的内容 (了解)
*/
public static Object getCellValue(Cell cell) {
/**
* 1.获取单元格的类型
* 2.根据类型判断
* 3.根据不同的类型获取不同的数据
*/
CellType cellType = cell.getCellType();
Object obj = null;
switch (cellType) {
case STRING:{
//如果单元格类型是string
obj = cell.getStringCellValue();
break;
}
case NUMERIC: {
//在poi中数字可以代表数子,日期
if(DateUtil.isCellDateFormatted(cell)){ //如果是日期格式的数字
obj = cell.getDateCellValue();
}else{
//如果单元格类型是数字
obj = cell.getNumericCellValue();
}
break;
}
case BOOLEAN:{
//如果单元格类型是boolean
obj = cell.getBooleanCellValue();
break;
}
default:{
break;
}
}
return obj;
}
}
作业:
代码
练习poi生成报表
预习