4_Springboot(四) 常用插件

一、Springboot热部署

每当修改了java代码或者是页面代码时,都需要重启服务,很麻烦。

热部署作用:检测到代码发生变化时,自动重新部署项目并重启。

在pom.xml中配置启用热部署

		<!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <!-- 是否启用热部署 -->
            <optional>true</optional>
        </dependency>

修改项目配置

S4.png

二、通用Mapper

添加依赖关系

        <!-- 通用Mapper -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>

添加配置

mapper:
  mappers: tk.mybatis.mapper.common.Mapper
  identity: mysql
  not-empty: true
  style: normal  # lastName

使用

接口继承通用Mapper

@Mapper
public interface CourseDao extends tk.mybatis.mapper.common.Mapper<Course> {
}

在service中调用通用mapper中得方法

@Service
public class CourseService {

    @Resource
    CourseDao courseDao;

    public List<Course> findAll(){
       return courseDao.selectAll();
    }

    public int deleteById(Integer tid){
        return courseDao.deleteByPrimaryKey(tid);
    }
}

三、PageHelper

添加依赖关系

		<!-- 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper </groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.12</version>
        </dependency>

添加配置

pagehelper:
  helper-dialect: mysql   # 数据库方言
  offset-as-page-num: true
  support-methods-arguments: true  # 方法参数中包含pageNum,pageSize参数时,自动进行分页
  params: count=coutSql
  reasonable: true  # 传递的pageNum>totalpage时,pageNum=totalpage

使用

    @RequestMapping("selectAll/{pageNum}/{pageSize}")
    @ResponseBody
    public PageInfo selectAll(@PathVariable("pageNum") Integer pageNum,@PathVariable("pageSize") Integer pageSize) {
        PageHelper.startPage(pageNum,pageSize);
        List<Course> list = courseService.selectAll();
        PageInfo pageInfo = new PageInfo(list);
        return pageInfo;
    }

四、文件上传/下载

文件上传

方式一

    @RequestMapping("upload")
    public String upload(@RequestParam("photo") MultipartFile[] photo) throws IOException {
        // 是否有文件
        for(MultipartFile f:photo){
            String originalFilename = f.getOriginalFilename();
            if(!"".equals(originalFilename)){
                // 保存文件路径。重命名
                // 1.判断文件路径是否存在,不存在创建
                // 2.重命名
                File file = new File(filepath + originalFilename);

                // 另存为
                f.transferTo(file);
            }
        }
        return "ok";
    }

方式二

    @PostMapping("fileupload")
    public String fileupload(@RequestParam("photo") MultipartFile photo, Model model) {
        // 1.判断是否有上传得文件
        if (photo.isEmpty()) {
            model.addAttribute("msg", "上传文件为空");
        } else {
            // 2.文件上传
            // 获取保存得新文件路径
            // 重命名
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            String newFileName = sdf.format(new Date()) + photo.getOriginalFilename();
            Path path = Paths.get("d://" + newFileName);
            try {
                Files.write(path, photo.getBytes());
                model.addAttribute("msg", "上传成功");
            } catch (IOException e) {
                model.addAttribute("msg", "上传失败");
                e.printStackTrace();
            }
        }
        return "status";
    }

文件下载

	@RequestMapping("/download")
    public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 文件
        File file = new File(filepath + fileName);
        // 读取源文件,响应浏览器
        FileInputStream fileInputStream = new FileInputStream(file);

        String mimeType = request.getSession().getServletContext().getMimeType(fileName.substring(fileName.lastIndexOf(".")));
        System.out.println(mimeType);

        // 根据下载文件得类型,内容类型不一样
        response.setContentType(mimeType);
        // 保存文件.fileName浏览器下载保存文件时得文件名
        response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode("下载文件" + fileName, "UTF-8"));

        ServletOutputStream outputStream = response.getOutputStream();

        FileCopyUtils.copy(fileInputStream, outputStream);
    }

五、虚拟路径映射

springboot访问磁盘下得文件

web项目,浏览器不能直接访问绝对路径,只能访问相对路径。

配置虚拟路径

// 将当前类注册为配置类 
@Configuration 
public class UploadFilePathConfig implements WebMvcConfigurer {
	
	// 配置虚拟路径    
	@Override    
	public void addResourceHandlers(ResourceHandlerRegistry registry) {        
		// /upload/**对外开放得路径        
		// addResourceLocations配置资源路径,指向到资源所在得真实路径        
		registry.addResourceHandler("/upload/**").addResourceLocations("file:D:\\");    
	} 
}