该笔记为学习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 | /*域名为localhost:8080/simpleParam?name=Tom&age=10*/ |
controller函数中的参数也可以将所有参数封装为一个实体类进行传参。
1 |
|
传递数组时在域名中将显示多个与数组名相同的参数传递
传递日期时可通过@DateTimeFormat
限制格式,MM和mm需要区分
1 |
|
传递Json格式时可以使用@RequestBody
来将Json格式封装到实体对象当中
1 |
|
传递路径参数可以通过@PathVariable
实现
1 |
|
响应
@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 | select * from emp limit 0,5 |
Mybatis
需要在配置文件application.properties
1 | #驱动类名称 |
普通SQL语句可直接通过注解实现注解内部传递参数时尽可能用#{}而非?{}(实现预编译,防止SQL注入)
对于存在特殊符号的SQL语句(如查询名字中有石字的)可以通过concat拼接字符串
动态SQL语句(即参数数量不确定时)可以通过XML映射文件,搭配<if test="判断语句">
,<where>
,<set>
等实现
新增(主键返回)
@Options(keyProperty = "id", useGeneratedKeys = true)
描述:在数据添加成功后,需要获取插入数据库数据的主键。如:添加套餐数据时,还需要维护套餐菜品关系表数据。
数据封装
在通过select获取到整行数据时往往将其封装到某个类当中,但是由于类中各变量的名称可能与数据表中的行名称无法对应,所以需要处理数据的映射
手动映射结果
1
2
3
4
5
6
7
public Emp getById(Integer id);开启驼峰命名
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文件夹下
目录创建
创建目录时,多级目录用/
分割,若是直接创建文件的同时创建该文件的上级目录用.
分割
参数注解
由于在写代码时有时会将几个参数写混,因此在这里整理一下。
@PathVariable
路径参数,对于域名中参数部分用
/
分隔,即localhost:8080/emps/10
而非localhost:8080/simpleParam?name=Tom&age=10
时读入路径参数@RequestBody
在读取Json格式的数据时使用,将Json格式以某个对象的方式读入
@DateTimeFormat(pattern = “yyyy-MM-dd”)
设置日期的读入格式
@RequestParam(defaultValue = “1”)
defaultValue用于设置默认值,name用于在函数中名称与域名中名称不对应时使用,从而进行手动映射
类的注解
@ResponseBody
可以使输出内容以Json格式输出
文件上传大小限制
默认限制为1Mb
1 | #配置单个文件最大上传大小 |
Nginx
查询占用端口的进程
1 | netstat -ano | findStr 90 |
开启Servlet组件支持
1 | @ServletComponentScan |
简化日志
- 在
resource
文件夹下新建logback.xml,只加入一个configuration,里面不填充内容 - 在application.yml中设置banner,如果有mybatis-plus还需要设置其专门的banner