目录
- 1.Idea快捷键
- 2.Idea中隐藏指定文件或指定类型文件
- 3.复制工程
- 4.REST风格
- 5.Java Rest开发模式
- 6.自动提示功能消失解决方案
- 7.@Autowired 注解
- 8.@Repository、@Component、@Service、@Constroller注解
- 9.@Override注解
- 10.SSM
- 11.Java中的双冒号写法::
- 12.put和post请求的区别
- 13.@Component 和 @Bean 的区别是什么?
- 14.Controller和RestController的区别
- MockMvc
- 15.@Component, @Repository, @Service的区别
- 16.**Druid的简介**
- 17.数据淘汰策略
1.Idea快捷键
CTRL + F12 :IDEA自带查看该类属性及方法
CTRL+h:IDEA自带查看相关的实现类
2.Idea中隐藏指定文件或指定类型文件
- Setting → File Types → Ignored Files and Folders
- 输入要隐藏的文件名,支持*号通配符
- 回车确认添加
3.复制工程
笔记小结
- 在工作空间中复制对应工程,并修改工程名称
- 删除与Idea相关配置文件,仅保留src目录与pom.xml文件
- 修改pom.xml文件中的artifactId与新工程/模块名相同
- 删除name标签(可选)
- 保留备份工程供后期使用
原则
- 保留工程基础结构
- 抹掉原始工程痕迹
注意:修改pom文件时,需要删除name与description,否则会出现maven添加索引错误
也就是顺序错误
4.REST风格
4.1REST简介
笔记小结
- REST
- 动作4个
- GET 查询
- POST 新增/保存
- PUT 增加
- DELETE 删除
- RESTful
REST (Representational State Transfer),表现形式状态转换
-
传统风格资源描述形式
http:/ / localhost/user/ getById?id=1
http:/ / localhost/user/ saveUser
-
REST风格描述形式
http: / / localhost/user/1
http: / / localhost/user
优点:
- 隐藏资源的访问行为,无法通过地址得知对资源是何种操作
- 书写简化
REST风格简化了地址栏的url形式,起到了一定的安全性的保护作用,将其难以辨别
按照REST风格访问资源时使用行为动作区分对资源进行了何种操作
注意:
上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范
描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如: users、books、accounts…
根据REST风格对资源进行访问称为RESTful
4.2RESTful入门案例
笔记小结
1.入门案例
2.请求方法设定
3.请求路径参数
1.名称:@RequestMapping
-
类型:方法注解
-
位置: SpringMVC控制器方法定义上方
-
作用:设置当前控制器方法请求访问路径
-
范例:
@RequestMapping(value = "/users", method = RequestMethod.POST) @ResponseBody public string save(@RequestBody User user){ system.out.println( "user save. . ." + user); return "{ ' module' : 'user save' }"; }
-
属性
- value(默认):请求访问路径
- method: http请求动作,标准动作(GET/POST/PUT/DELETE)
2.名称:@PathVariable
-
类型:形参注解
-
位置:SpringMVC控制器方法形参定义前面
-
作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应
-
范例:
@RequestMapping(value = "/users/{id}" ,method = RequestMethod.DELETE) @ResponseBody public string delete(@PathVariable Integer id){ system.out.print1n( "user delete. . ." + id); return "{ ' module ' : 'user delete' }" ; }
3.@RequestBody @RequestParam @PathVariable
- 区别
- @RequestParam用于接收url地址传参或表单传参
- @RequestBody用于接收json数据
- @PathVariable用于接收路径参数,使用**{参数名称}**描述路径参数
- 应用
- 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
- 如果发送非json格式数据,选用@RequestParam接收请求参数
- 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用**@PathVariable**接收请求路径变量,通常用于传递id值
-
设定http请求动作(动词)
//增加 @RequestMapping(value = "/users",method = RequestMethod.POST) @ResponseBody public String save(@RequestBody User user){ System.out.println("user save..."+user); return "{'module':'user save...'}"; } //修改 @RequestMapping(value = "/users",method = RequestMethod.PUT) @ResponseBody public String update(@RequestBody User user){ System.out.println("user update..."+user); return "{'module':'user update...'}"; }
-
设定请求参数(路径变量)
//删除 @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE) @ResponseBody public String delete(@PathVariable Integer id){ System.out.println("user delete..."); return "{'module':'user delete...'}"; }
关键词@PathVariable,注意别忘了在路径中加入{ id }字符
示例:
//RESTful
@Controller
public class BookController {
//增加
@RequestMapping(value = "/users",method = RequestMethod.POST)
@ResponseBody
public String save(@RequestBody User user){
System.out.println("user save...post");
return "{'module':'user save...post'}";
}
//删除
@RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable Integer id){
System.out.println("user delete...");
return "{'module':'user delete...'}";
}
//修改
@RequestMapping(value = "/users",method = RequestMethod.PUT)
@ResponseBody
public String update(@RequestBody User user){
System.out.println("user update..."+user);
return "{'module':'user update...'}";
}
//查询--查询所有
@RequestMapping(value ="/users",method = RequestMethod.GET)
@ResponseBody
public String getAll(){
System.out.println("user getAll...");
return "{'module':'user getAll...'}";
}
//查询--根据id查询
@RequestMapping(value ="/users/{id}",method = RequestMethod.GET)
@ResponseBody
public String getById(@PathVariable Integer id){
System.out.println("user getById..."+id);
return "{'module':'user getById...'}";
}
}
4.3REST快速开发
笔记小结
1.RESTful快速开发(标准开发)
2.@RestController
3.标准请求动作映射(4种)
1.名称:@RestController
-
类型:类注解
-
位置:基于SpringMVC的RESTful开发控制器类定义上方
-
作用:设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解组合功能
-
范例:
@RestController public class BookController { }
2.名称:@GetMapping@PostMapping@PutMapping@DelgteMapping
-
类型:方法注解
-
位置:基于SpringMVC的RESTful开发控制器方法定义上方
-
作用:设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,例如@GetNapping对应GET请求
-
范例:
@GetMapping("/{id}") public string getById(@PathVariable Integer id){ system.out.println("book getById. . . "+id); return "{ ' module' : ' book getById ' }" ; }
-
属性
value(默认)︰请求访问路径
示例:
@RestController
@RequestMapping("/users")
public class BookController2 {
//增加
@PostMapping
public String save(@RequestBody User user) {
System.out.println("user save..." + user);
return "{'module':'user save...'}";
}
//删除
@DeleteMapping("/{id}")
public String delete(@PathVariable Integer id) {
System.out.println("user delete...");
return "{'module':'user delete...'}";
}
//修改
@PutMapping
public String update(@RequestBody User user) {
System.out.println("user update..." + user);
return "{'module':'user update...'}";
}
//查询--查询所有
@GetMapping
public String getAll() {
System.out.println("user getAll...");
return "{'module':'user getAll...'}";
}
//查询--根据id查询
@GetMapping("/{id}")
public String getById(@PathVariable Integer id) {
System.out.println("user getById..." + id);
return "{'module':'user getById...'}";
}
}
5.Java Rest开发模式
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。
Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:
-
Get:获取资源
-
Post:新建资源
-
Put:更新资源
-
Delet:删除资源
通过注解实现Rest模式:
@RestController :@ResponseBody + @Controller ,代表返回的是json格式的数据;
(@RestController注解相当于@ResponseBody和@Controller的结合)
@Controller @ResponseBody public class MyController { } @RestController public class MyRestController { }
@ResponseBody
1.在实际操作中我们只需要在Controller层使用@RequestBody注解就可以将对象进行反序列化;
2.而若需要对Controller的方法进行序列化,我们需要在返回值上使用@ResponseBody;也可以将@ResponseBody注解在Controller类上,这样可以将这个类中所有的方法序列化。
@Controller
@Controller是一种特殊化的@Component类,在实际操作中@Controller用来表示Spring某个类是否可以接受HTTP请求,她通常与@ResponseBody绑定使用
@Component
1.把普通POJO(Plain Ordinary Java Object简单的java对象)实例化到spring容器中,相当于配置文件中的
2.泛指组件,当组件不好归类的时候,可以使用@Component注解进行标注
@GetMapping、@PostMapping、@DeletMapping、@PutMapping :分别对应四种操作方式。
示例:
//Rest模式
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping
public String getById() {
System.out.println("springboot is running...");
return "springboot is running...";
}
@DeletMapping("/{id}")
public String getById() {
System.out.println("springboot is running...");
return "springboot is running...";
}
}
参考资料:Java @RestController注解浅析_bit&y的博客-CSDN博客
6.自动提示功能消失解决方案
笔记小结
指定SpringBoot配置文件
- Setting → Project Structure → Facets
- 选中对应项目/工程
- Customize Spring Boot
- 选择配置文件
补充:idea2022之后丢到resouces下会自动识别 没有识别到就点下maven的刷新
7.@Autowired 注解
是什么?
当使用了@Repository、@Component、@Service注解时,spring的组件扫描就会自动发现它,并且会将其初始化为spring应用上下文中的bean。
当需要使用这个bean的时候,加上@Autowired注解,这个bean就会被创建。
补充:始化是根据无参构造函数。
有什么作用?
默认是根据属性类型,spring自动将匹配到的属性值进行注入
怎么用?
@Autowired 注解可以标注在属性上、方法上和构造器上
推荐: 对构造函数标注注解,如图在构造器上标注@Autowired注解
此时,类成员的初始化顺序不同。顺序为 静态成员 ——> 变量初始化为默认值——>构造器——>为变量赋值。
如果标注在属性上,则在构造器中就不能使用这个属性(对象)的属性和方法。
参考链接:@Autowired注解详解——超详细易懂_子时不睡的博客-CSDN博客_@autowired
8.@Repository、@Component、@Service、@Constroller注解
它们的作用,都是把对象交给spring管理。
@Repository注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。
它们分别用于软件系统的不同层次:
- @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
- @Service 通常作用在业务层。
- @Constroller 通常作用在控制层。
- @Repository通常作用在持久层。
通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了 Spring受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。
9.@Override注解
- 告诉读者这个方法是复写的。用于检查是否正确的复写了父类的方法。
- 编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。
10.SSM
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容),常作为数据源较简单的web项目的框架。
11.Java中的双冒号写法::
1.表达式:person -> person.getName();可以替换成:Person::getName
2.表达式:() -> new HashMap<>();可以替换成:HashMap::new
12.put和post请求的区别
在http中,put被定义为幂等的方法,post不是幂等的方法。
幂等:数学中的一个术语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则是幂等的。也就是说,如果一个网络重复执行多次,产生的效果是一样的,那就是幂等。
-
post
-
用于提交请求,可以更新或者创建资源,是非幂等的
-
用户注册时,每次提交都是创建一个用户账号,此时用post
-
-
put
-
用于向指定的url传送更新资源,是幂等的
-
还是用户模块,比如修改密码,虽然提交的还是账户名和密码,但是每次提交都只是更新该用户密码,每次请求都只是覆盖原型的值,此时用put
-
用post还是put
- 如果该更新对应的url多次调用的结果一致,用put
- 如果每次提交相同的内容,最终结果不一致,用post
总结
请求效果产生:后一个请求覆盖前一个请求则用put,后一个请求叠加前一个请求用post
参考资料:PUT和POST的区别 - 腾讯云开发者社区-腾讯云 (tencent.com)
一分钟理解post和put(安全与幂等角度)_「已注销」的博客-CSDN博客_put和post哪个安全
13.@Component 和 @Bean 的区别是什么?
- 作用对象不同:
@Component
注解作用于类,而@Bean
注解作用于方法、 @Component
通常是通过路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用@ComponentScan
注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。@Bean
注解通常是我们在标有该注解的方法中定义产生这个 bean,@Bean
告诉了 Spring 这是某个类的实例,当我们需要用它的时候还给我。@Bean
注解比@Component
注解的自定义性更强,而且很多地方我们只能通过@Bean
注解来注册 bean。比如当我们引用第三方库中的类需要装配到 Spring 容器时,只能通过@Bean
来实现。
参考链接:Spring @bean 和 @component 注解有什么区别? - 知乎 (zhihu.com)
[SpringBoot - @Configuration、@Bean注解的使用详解(配置类的实现) (hangge.com)](https://www.hangge.com/blog/cache/detail_2506.html#:~:text=1,使用说明 1 %40Bean 注解作用在方法上 2 %40Bean 指示一个方法返回一个 Spring,5 %40Bean 注解默认作用域为单例 singleton 作用域,可通过 %40Scope (“prototype”) 设置为原型作用域)
14.Controller和RestController的区别
共同点:都是用来表示Spring某个类的是否可以接收HTTP请求。
不同点:@Controller:标识一个Spring类是Spring MVC controller处理器,@RestController:@RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用。@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。
参考链接:Controller和RestController的区别_Linux资源站的博客-CSDN博客_controller与restcontroller区别
MockMvc
对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络环境等,所以为了可以对Controller进行测试,我们引入了MockMVC。
MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
参考链接:[MockMvc详解 - 星朝 - 博客园 (cnblogs.com)我的参与](https://www.cnblogs.com/jpfss/p/10950904.html#:~:text=MockMvc实,统一而且很方便。)
- MockMvcRequestBuilders
15.@Component, @Repository, @Service的区别
参考链接@Component, @Repository, @Service的区别_fansili的博客-CSDN博客_@repository
注解 | 含义 |
---|---|
@Component | 最普通的组件,可以被注入到spring容器进行管理 |
@Repository | 作用于持久层 |
@Service | 作用于业务逻辑层 |
@Controller | 作用于表现层(spring-mvc的注解) |
16.Druid的简介
Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴巴开发的号称为监控而生的数据库连接池!
参考链接:Druid是什么和Druid的介绍_一个java菜鸟的成长之路的博客-CSDN博客_druid是干嘛的
17.数据淘汰策略
影响数据淘汰的相关配置
检测易失数据(可能会过期的数据集server.db[i].expires )
- volatile-lru:挑选最近最少使用的数据淘汰
- volatile-lfu:挑选最近使用次数最少的数据淘汰
- volatile-ttl:挑选将要过期的数据淘汰
- volatile-random:任意选择数据淘汰
LFU:挑选一段时间内,使用次数最少的数据进行淘汰
LRU:挑选一段时间内,最近最少使用的数据进行淘汰·