javaweb的学习笔记 | vegeone
0%

javaweb的学习笔记

该笔记为学习javaweb时一些小细节的记录,主要为ssm相关内容
学习链接:
https://www.bilibili.com/video/BV1m84y1w7Tb

Maven

maven依赖项坐标查找链接:

Maven Repository: Search/Browse/Explore

私服

依赖查找顺序:本地仓库->私服->中央仓库

继承

父工程需要设置<packaging>pom</packaging>

Springboot

请求响应

请求

可以通过@RequestMapping("/list")实现域名描述,也可以通过@GetMapping("/list")等来指定http的请求方法,对应的controller函数需要与域名中所传的参数名称保持一致,若不一致,则需要@RequestParam实现映射( @RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。 如果该参数是可选的,可以将required属性设置为false。)

1
2
3
4
5
6
7
8
9
/*域名为localhost:8080/simpleParam?name=Tom&age=10*/
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name") String username , Integer age){
System.out.println(username + " : " + age);
return "OK";
}
/*
@RequestParam中第一name为注解的参数,第二个name为域名中的name参数
*/

controller函数中的参数也可以将所有参数封装为一个实体类进行传参。

1
2
3
4
5
6
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user);
return "OK";
}

传递数组时在域名中将显示多个与数组名相同的参数传递

传递日期时可通过@DateTimeFormat限制格式,MM和mm需要区分

1
2
3
4
5
6
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}

传递Json格式时可以使用@RequestBody来将Json格式封装到实体对象当中

1
2
3
4
5
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}

传递路径参数可以通过@PathVariable实现

1
2
3
4
5
@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id, @PathVariable String name){
System.out.println(id+ " : " +name);
return "OK";
}

响应

@ResponseBody将方法返回值直接响应,若返回值类型是 实体对象/集合 ,转JSON格式响应

@ResponseBody已经被封装在@RestController

解析xml文件需要在引入maven依赖dom4j

核心

IOC抽取重复定义的对象,AOP抽取重复方法

IOC

反转控制
将某个接口/类所生成对象放在容器中,在其他文件需要这类对象时直接从容器里获取,容器里的对象称为bean。

在其他文件使用这类对象时叫做依赖注入,需要在声明该对象时添加注解@Autowired

Bean

在获取Bean时,使用getBean获取类的对象默认是首字母小写。

AOP

切入点表达式

1
execution(* com.itheima.service.impl.DeptServiceImpl.*(..))

返回值 目录.文件.方法(方法的参数)

拦截器interceptor

设置类继承HandlerInterceptor,通过preHandle的返回值决定是否放行,同时还需要配置WebMvcConfigurer类,将该拦截器添加进去。

异常处理

通过@RestControllerAdvice进行注释类
@ExceptionHandler(Exception.class)捕获所有异常

MySQL

多表查询

  1. 一对多

    在多的一方添加外键,关联另外一方的主键。

  2. 一对一

    任意一方,添加外键,关联另外一方的主键。

  3. 多对多

    通过中间表来维护,中间表的两个外键,分别关联另外两张表的主键。

分页查询

1
2
3
select * from emp limit 0,5
-- 参数1:起始索引=(页码-1)*每页展示记录数
-- 参数2:查询每页返回记录数

Mybatis

需要在配置文件application.properties

1
2
3
4
5
6
7
8
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234

普通SQL语句可直接通过注解实现注解内部传递参数时尽可能用#{}而非?{}(实现预编译,防止SQL注入)

对于存在特殊符号的SQL语句(如查询名字中有石字的)可以通过concat拼接字符串

动态SQL语句(即参数数量不确定时)可以通过XML映射文件,搭配<if test="判断语句">,<where>,<set>等实现

新增(主键返回)

@Options(keyProperty = "id", useGeneratedKeys = true)

描述:在数据添加成功后,需要获取插入数据库数据的主键。如:添加套餐数据时,还需要维护套餐菜品关系表数据。

数据封装

在通过select获取到整行数据时往往将其封装到某个类当中,但是由于类中各变量的名称可能与数据表中的行名称无法对应,所以需要处理数据的映射

  1. 手动映射结果

    1
    2
    3
    4
    5
    6
    7
    @Select("select * from emp where id = #{id}")
    @Results({
    @Result(column = "dept_id", property = "deptId"),
    @Result(column = "create_time", property = "createTime"),
    @Result(column = "update_time", property = "updateTime")})
    public Emp getById(Integer id);

  2. 开启驼峰命名

    1
    2
    #开启驼峰命名自动映射,即从数据库字段名 a_column 映射到Java 属性名 aColumn。
    mybatis.configuration.map-underscore-to-camel-case=true

Lombok

需要在maven依赖中引入lombok或在创建项目时勾选

@Data

生成get,set,toString等方法

@NoArgsConstructor

无参构造

@AllArgsConstructor

全参构造

其他

前端部分存放地址

前端部分需要放在src/main/resources/static文件夹下

目录创建

创建目录时,多级目录用/分割,若是直接创建文件的同时创建该文件的上级目录用.分割

参数注解

由于在写代码时有时会将几个参数写混,因此在这里整理一下。

  1. @PathVariable

    路径参数,对于域名中参数部分用/分隔,即localhost:8080/emps/10而非localhost:8080/simpleParam?name=Tom&age=10时读入路径参数

  2. @RequestBody

    在读取Json格式的数据时使用,将Json格式以某个对象的方式读入

  3. @DateTimeFormat(pattern = “yyyy-MM-dd”)

    设置日期的读入格式

  4. @RequestParam(defaultValue = “1”)

    defaultValue用于设置默认值,name用于在函数中名称与域名中名称不对应时使用,从而进行手动映射

类的注解

  1. @ResponseBody

    可以使输出内容以Json格式输出

文件上传大小限制

默认限制为1Mb

1
2
3
4
#配置单个文件最大上传大小
spring.servlet.multipart.max-file-size=10MB
#配置单个请求最大上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB

Nginx

查询占用端口的进程

1
netstat -ano | findStr 90

开启Servlet组件支持

1
@ServletComponentScan

简化日志

  1. resource文件夹下新建logback.xml,只加入一个configuration,里面不填充内容
  2. 在application.yml中设置banner,如果有mybatis-plus还需要设置其专门的banner