Java文件上传和多级数据操作

编程入门 行业动态 更新时间:2024-10-11 03:17:59

Java<a href=https://www.elefans.com/category/jswz/34/1770535.html style=文件上传和多级数据操作"/>

Java文件上传和多级数据操作

目录

一、数据封装(获取多级数据优化代码)

  1).获取一、二级数据信息  

  2).获取全部数据信息 

  3).调用

二、多级数据删除(子父级关系)

三、文件上传

四、分页工具类


一、数据封装(获取多级数据优化代码)

多级分类一次性查询,利用map集合封装,使用时直接调用map集合,减少查询数据库的次数,优化性能

/*** 1.封装Map集合   Map<Key=父级ID,value=List<ItemCat对象>>* 2.说明:  将所有的数据库的父子关系,进行封装.(没有嵌套!!!!)* 3.优势:  只查询一次数据库,就可以完成父子关系的封装.策略:*      1. key不存在, 准备一个新List集合,将自己当作第一个元素追加*      2. key存在,  获取原有list集合,将自己追加.**/public Map<Integer,List<ItemCat>> initMap(){//Map中包含了所有的父子级关系.Map<Integer,List<ItemCat>> map = new HashMap<>();//1.查询item_cat表中的所有的记录(1/2/3级菜单)List<ItemCat> itemCatList = itemCatMapper.selectList(null);//2.实现数据的封装for(ItemCat itemCat : itemCatList){int key = itemCat.getParentId();if(map.containsKey(key)){ //存在List<ItemCat> list = map.get(key);//将自己追加到其中list.add(itemCat);}else{  //不存在: 准备List集合,将自己作为第一个元素封装List<ItemCat> list = new ArrayList<>();list.add(itemCat);map.put(key,list);}}//将封装的数据进行返回.return map;}

  1).获取一、二级数据信息  

private List<ItemCat> getTwoList(Map<Integer, List<ItemCat>> map) {//1.先获取一级列表List<ItemCat> oneList = map.get(0);//2.根据一级查询二级for(ItemCat oneItemCat :oneList){//查询二级,所以parentId是一级的Idint parentId = oneItemCat.getId();List<ItemCat> twoList = map.get(parentId);//封装数据oneItemCat.setChildren(twoList);}return oneList;}

  2).获取全部数据信息 

 private List<ItemCat> getThreeList(Map<Integer, List<ItemCat>> map) {//获取一级和二级List<ItemCat> oneList = getTwoList(map);//封装三级,遍历二级菜单,之后封装.for(ItemCat oneItemCat : oneList){//获取二级集合List<ItemCat> twoList = oneItemCat.getChildren();if(twoList == null || twoList.size() == 0){System.out.println("执行跳过循环操作");//由于业务数据不合理,跳过本次循环,执行下一次continue;}for (ItemCat twoItemCat : twoList){//查询三级列表,需要parentId=二级Idint parentId = twoItemCat.getId();List<ItemCat> threeList = map.get(parentId);twoItemCat.setChildren(threeList);}}return oneList;}

  3).调用

 /*** level 1 只查询一级商品分类*       2 查询一级/二级  嵌套封装*       3 查询一级/二级/三级   嵌套封装* @param level* @return*/@Overridepublic List<ItemCat> findItemCatList(Integer level) {//Map集合里边封装的是所有的父子级关系.Map<Integer,List<ItemCat>> map = initMap();if(level == 1){ //只获取1级菜单. parent_id = 0return map.get(0);}//用户查询1/2级商品分类信息if(level == 2){return getLevel2List(map);}//如果程序执行到这里,则说明用户查询的是1-2-3级菜单List<ItemCat> list = getLevel3List(map);return list;}

二、多级数据删除(子父级关系)

如果删除的是数据有子级,需要把子级数据同时删除,否则数据库会存下死数据。

/*** 需求: 删除分类信息* 条件: 如果有子级,应该先删除子级.* Sql: DELETE FROM item_cat WHERE (parent_id IN (?,?) OR parent_id = ? OR id = ?)* @param itemCat*/@Transactionalpublic void deleteItemCats(ItemCat itemCat) {int level = itemCat.getLevel();if(level == 3){//表示需要删除的数据是三级菜单,可以直接删除itemCatMapper.deleteById(itemCat.getId());}if(level == 2){QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();queryWrapper.eq("parent_id",itemCat.getId()).or().eq("id",itemCat.getId());itemCatMapper.delete(queryWrapper);}if(level == 1){//1.必须获取二级IDQueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();queryWrapper.eq("parent_id",itemCat.getId());//2获取结果的第一列字段(主键)  二级IdList twoIdsList = itemCatMapper.selectObjs(queryWrapper);//3.删除三级的数据queryWrapper.clear();//删除parent_id中包含二级Id的数据,实则删除的是三级数据queryWrapper.in(twoIdsList.size()>0,"parent_id",twoIdsList).or()//删除parent_id 等于一级ID的,实则删除的是二级数据.eq("parent_id",itemCat.getId()).or()//删除id=一级Id  则删除一级数据..eq("id",itemCat.getId() );itemCatMapper.delete(queryWrapper);}}

三、文件上传

@Service
public class FileServiceImpl implements FileService{/*** 规则说明:*   文件磁盘地址:  F:/images/yyyy/MM/dd/uuid.jpg*   网络访问地址:  .jpg*///private String localDir = "D:/images";            //本地磁盘前缀private String localDir = "/usr/local/src/images";  //设定Linux目录private String preURLPath = "";  //网络访问域名/*** 1.校验文件上传的类型   jpg|png|gif* 2.应该校验文件是否为恶意程序.   木马.exe.jpg* 3.为了提高检索效率  应该分目录存储.  1.hash方式  xx/xx/xx/xx 分布不均*                                   2.日期格式   yyyy/MM/dd  目录不断增长* 4.防止文件重名        UUID.jpg* @param file* @return*/@Overridepublic ImageVO upload(MultipartFile file) {//1.获取图片名称    demo: abc.jpg  abc.JPGString fileName = file.getOriginalFilename();//bug说明: 由于windows系统不区分大小写,所以将字母全部转化为小写fileName = fileName.toLowerCase();//利用正则判断是否为图片.if(!fileName.matches("^.+\\.(jpg|png|gif)$")){//如果不是图片,则返回nullreturn null;}//2.检查文件是否为恶意程序.try {BufferedImage bufferedImage = ImageIO.read(file.getInputStream());int width = bufferedImage.getWidth();int height = bufferedImage.getHeight();if(width == 0 || height == 0){//说明文件不是图片.return null;}//3.根据时间实现目录的创建 时间--yyyy/MM/ddString dateDir = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());// "G:/images/2021/11/11String localDirPath = localDir + dateDir;//创建目录File dirFile = new File(localDirPath);if(!dirFile.exists()){dirFile.mkdirs();}//4. 使用uuid替换文件名称 唯一:系统内部唯一String uuid = UUID.randomUUID().toString().replace("-","");//截取文件的后缀  aa.bb.jpgint index = fileName.lastIndexOf(".");//获取类型  .jpgString fileType = fileName.substring(index);String newFileName = uuid + fileType;//5.实现文件上传操作  目录/文件名称String realFilePath = localDirPath + newFileName;file.transferTo(new File(realFilePath));System.out.println("文件上传成功!!!");/**  6.封装返回值*  封装虚拟路径 在各个系统之间可以灵活切换,只保存动态变化的目录*  path = 时间/uuid.type*  网络地址://.jpg*/String virtualPath = dateDir + newFileName;String url = preURLPath+ virtualPath;System.out.println("磁盘地址:"+realFilePath);System.out.println("网络地址:"+url);return new ImageVO(virtualPath,url,newFileName);} catch (IOException e) {e.printStackTrace();return null;    //表示程序有问题}}/*** 实现思路:*      1.根据虚拟地址,拼接磁盘地址*      2.判断文件是否存在*      3.实现文件删除* @param virtualPath*/@Overridepublic void deleteFile(String virtualPath) {//1.生成本地磁盘地址String path = localDir + virtualPath;System.out.println(path);File file = new File(path);if(file.exists()){file.delete();}}
}

四、分页工具类

public class PageUtil {public static List startPage(List list, Integer pageNum,Integer pageSize) {if (list == null) {return null;}if (list.size() == 0) {return null;}Integer count = list.size(); // 记录总数Integer pageCount = 0; // 页数if (count % pageSize == 0) {pageCount = count / pageSize;} else {pageCount = count / pageSize + 1;}int fromIndex = 0; // 开始索引int toIndex = 0; // 结束索引if (pageNum != pageCount) {fromIndex = (pageNum - 1) * pageSize;toIndex = fromIndex + pageSize;} else {fromIndex = (pageNum - 1) * pageSize;toIndex = count;}List pageList = list.subList(fromIndex, toIndex);return pageList;}
}

更多推荐

Java文件上传和多级数据操作

本文发布于:2024-02-06 09:11:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1748212.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件上传   操作   数据   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!