JavaWeb——后端案例

五、案例

1. 开发规范—Restful

REST(Representational State Transfer),表述性状态转换,是一种软件架构风格

在这里插入图片描述

注:

  • REST是风格,是约定方式,不是规定,可以打破
  • 描述模块的功能通常使用复数,表示此类资源,而非单个资源。如:users、emps、books

2. 部门管理的查询、删除、新增以及前后端联调

体会:🌅

  • 虽然之前的学习过程中已经跟着视频教程一边敲了代码,但是实际案例会把之前学习的内容连贯起来,自己再写的时候还是不是很熟悉,多多练习
  • 注解可以简化代码,要牢记;每个注解的英文也对应着其功能的语义

本质:三层架构+IOC(控制反转)+DI(依赖注入)

新知识:

  • @Slf4j/@Xslf4j可以代替创建日志对象,直接使用
  • @RequestMapping(“父级”);如果后面的方法上的都要调用这级,可以把他单另出来,注解在类的上方
  • @Mapping()可以根据请求类型,细分为@GetMapping()、@PostMapping、@DeleteMapping()等

流程:

Controller接受请求(,以及参数)——>Service处理数据(修改格式或者添加一些字段)——>Mapper与数据库交互(增删改查)——>Serveive——>Controller响应请求

3. 员工管理

分页查询

普通实现以及PageHelper分页插件实现

分页插件引入依赖

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.6</version>
        </dependency>
@Mapper
public interface EmpMapper {
//    // 查询总记录数
//    @Select("select count(*) from emp")
//    public long count();
//
//    // 分页查询获取列表数据
//
//    @Select("select * from emp limit #{start}, #{pageSize}")
//    public List<Emp> page(Integer start, Integer pageSize);
    
    // 使用分页插件实现
    @Select("select * from emp")
    public List<Emp> list();
}
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

//    @Override
//    public PageBean page(Integer page, Integer pageSize) {
//        // 1. 获取总记录数
//        long count = empMapper.count();
//        // 2. 获取分页查询结果列表
        Integer start = (page - 1) * pageSize;
        List<Emp> empList = empMapper.page(start, pageSize);
//        List<Emp> empList = empMapper.page((page - 1) * pageSize, pageSize);
//        // 3. 封装PageBean对象
//        PageBean pageBean = new PageBean(count, empList);
//        return pageBean;
//    }
    @Override
    public PageBean page(Integer page, Integer pageSize) {
        //1. 设置分页参数
        PageHelper.startPage(page, pageSize);
        //2. 执行查询
        List<Emp> empList = empMapper.list();
        Page<Emp> p = (Page<Emp>) empList;
        // 3. 封装PageBean对象
        PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
        return pageBean;
    }
}
@RestController
public class EmpController {
    @Autowired
    private EmpService empService;

    // 分页查询
    @GetMapping("/emps")
    public Result page(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer pageSize) {
        // 调用service分页查询
        PageBean pageBean = empService.page(page, pageSize);
        return Result.success(pageBean);
    }
}

分页条件查询——只要把select放在xml文件中,进行相应的修改就可以

删除员工——数组<foreach>遍历

新增员工——没有特殊的点

注意: 熟悉三层架构的流程就好

4. 文件上传

概念: 文件上传是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程

前端准备工作:

在这里插入图片描述

后端准备工作:

Controller中参数添加MultipartFile image(MutipartFile是类型,image是名字,与前端一致,不一致的话使用@RequestParam)

MultiPartfile常用方法

在这里插入图片描述

错误:

Whitelabel Error Page

解决:

<dependency>
    <groupId>org.apache.portals.pluto.templating</groupId>
    <artifactId>thymeleaf-mvc-portlet-api</artifactId>
    <version>3.1.1</version>
</dependency>

注意:

在SpringBoot中,文件上传,默认单个文件允许最大大小为1M。如需上传大文件,可以进行如下配置

# 配置单个文件文件最大上传大小
spring.servlet.multipart.max-file-size=10MB
# 配置单个请求最大大小的限制(一次请求中上传的多个文件)
spring.servlet.multipart.max-request-size=100MB

1)本地存储上传文件的实例

@RestController
public class UploadController {

    @PostMapping("/upload")
    public Result uploda(String username, Integer age, MultipartFile image) throws Exception {
        log.info("文件上传:{},{},{}", username, age, image);

        // 使用MutiparFile中的方法获取文件的名字
        String originalFilename = image.getOriginalFilename();

        // 构造唯一的文件名(不能重复)——uuid(通用唯一识别码,长度固定的字符串)
        // 首先获取原始文件的扩展名
        int index = originalFilename.lastIndexOf(".");
        String extname = originalFilename.substring(index);
        // 其次生成UUID并与原始文件后缀名进行拼接
        String newFileName = UUID.randomUUID().toString() + extname;

        // 将文件存储在服务器的磁盘目录中E:\want\JAVA\tempImage
        image.transferTo(new File("E:\\want\\JAVA\\tempImage\\" + newFileName));
        return Result.success();
    }
}

2)阿里云OSS(对象存储服务,Object Storage Service)

概念: 云存储服务

作用: 通过网络随时存储和调用包括文本、图片、音频和视频在内的各种文件

使用第三方服务的通用思路:

  • 准备
  • 参照官方SDK编写入门程序(Software Development Kit,软件开发工具包),包括辅助软件开发的依赖(jar包)、代码示例等,都可以叫做SDK。Bucket:存储空间,就是个存储东西的容器
  • 集成使用

5. 配置文件

1)properties配置文件

原问题: 参数属于硬编码——如果有需求要修改,需要修改源代码,然后重新编译,不便于维护及管理

解决:

在这里插入图片描述

2)yml配置文件(.yml/.yaml)

在这里插入图片描述

对比不同的配置文件格式:

  • XML:臃肿
  • properties:层次结构不清晰
  • yml:简洁、数据为中心——推荐

yml基本语法:

  • 大小写敏感
  • 数值前面必须有空格作为分隔符
  • 使用缩进表示层级关系,缩进时不能用Tab,只能用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略

属性的自动注入:

@ConfigurationProperties(prefix=“属性的前缀”)

使用前需要引入依赖(可选)

在这里插入图片描述

过程:

  • 将属性封装成一个实体类,加入注解@Data、@Component、@ConfigurationProperties
  • 在工具类中@Autowired自动注入一个对象就可
Java Web开发实例大全(提高卷)筛选、汇集了Java Web开发从基础知识到高级应用各个层面的大量实例及源代码,共有600个左右,每个实例及源代码按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。 全书分为7篇23章,包括流行组件应用、数据库应用、图表统计、Ajax框架应用、流行框架、网站安全与架构模式、综合应用等。重点内容有操作XML文件、发送与接收邮件、数据库操作技术、SQL语句应用技术、复杂查询技术、数据库高级应用、JFreeChart绘图基础、基础图表技术、扩展图表技术、基于Cewolf组件的图表编程、Prototype框架、jQuery框架、Dojo框架、Struts2框架应用、Struts2框架标签应用、Hibernate框架基础、Hibernate高级话题、Spring框架基础、Spring的 Web MVC 框架、网站性能优化与安全策略、设计模式与架构、网站设计与网页配色、Java Web典型项目开发案例等。配书光盘附带了实例的源程序。 《Java Web开发实例大全(提高卷)》既适合Java Web程序员参考和查阅,也适合Java Web初学者,如高校学生、软件开发培训学员及相关求职人员学习、练习、速查使用。 目录 第1篇 流行组件应用篇 第1章 操作XML文件 第2章 发送与接收邮件 第2篇 数据库应用篇 第3章 数据库操作技术 第4章 SQL语句应用技术 第5章 复杂查询技术 第6章 数据库高级应用 第3篇 图表统计篇 第7章 JFreeChart绘图基础 第8章 基础图表技术 第9章 扩展图表技术 第10章 基于Cewolf组件的图表编程 第4篇 Ajax框架应用篇 第11章 Prototype框架 第12章 jQuery框架 第13章 Dojo框架 第5篇 流行框架篇 第14章 Struts2框架应用 第15章 Struts2框架标签应用 第16章 Hibernate框架基础 第17章 Hibernate高级话题 第18章 Spring框架基础 第19章 Spring的Web MVC框架 第6篇 网站安全与架构模式篇 第20章 网站性能优化与安全策略 第21章 设计模式与架构 第7篇 综合应用篇 第22章 网站设计与网页配色 第23章 Java Web典型项目开发案例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值