MVC是一种设计框架, 市面上也有很多其他的MVC web框架,但是SpringMVC是佼佼者
这里我的理解是handler可能是前端发ajax请求的那段代码?还是说是后端各种controller类和其RequestMapping(‘URL’)的一个集合?
相关参考文档如下:
MVC思想及SpringMVC设计理念
Spring MVC+ Spring + Mybatis “三大框架”介绍
SpringMVC—Handler到底是个什么?及流程详解
controller中的各个注解
autowired和resource
service的iml类的注解
dto和entity的注解
config中的注解
@Resource和@Autowired 在类中使用, 可以让spring帮忙管理Java对象
@Data:自动给我们创建的对象加上set get方法
@Component: 在类外标识, 可以让spring帮我们管理这个类(Bean)
@Sl4j 利用工具类可以进行一些日志的记录
为什么这里可以直接用save呢,他怎么知道我查的哪个表?
这是因为继承了mybatisplus中的ServiceImpl类,并指定了当前类用到的mapper接口UserMapper和对应的entity实体类user
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<scope>provided</scope>
</dependency>
enable annotation processing
(否则idea不识别Lombok的注解)但是新版本(21开始吧)idea已经自带Lombok插件了;
这里引出来一个问题:为什么要idea要装插件?
因为idea本质上是一个可视化的编辑器, java编译器会根据Lombok的注解修改语法树,最终结果是被注解标记的java类生成的字节码文件中会包含Lombok生成的代码, 但是我们写代码的时候出于源码阶段还没编译呢, idea当然识别不出来Lombok的注解生成一些get set方法了
官网解释
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing(香料,调味剂) up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
提取关键词:Java 库、自动插件、提高效率、再也不编写get、equals等方法、使用注解
使用Lombok前:即使idea提供了快捷键cmd + n手动快捷生成get/set/equals/hashCode/toString方法,但表多了后还是很麻烦
使用后效果:加注解,减少代码冗余
日志和传统打印操作相比的好处是
日志是可插拔的, 日后上线
的时候可以在配置文件中动态的开关,但是sout的内容需要手动
去一个个文件中寻找并删除
/**
* 实现log4j的符号{}打印
*/
@Test
public void print2(){
Person person1 = new Person("chen",123,"man");
Person person2 = new Person("li",234,"women");
System.out.println("=====================================================");
//Person类用Lombok实现了toString()方法
logger.info("This is a debug message,person1={},person2={}",person1,person2);
System.out.println("=====================================================");
}
具体Log4j没用过, 后面来补
person1.setAge(6).setName('张三');
进行链式编程;不能生成部分参数的构造函数
,如果想要生成部分参数的构造函数还是需要手动生成的;如果加上这个注解后相当于类中增加了一个全部参数的构造函数, 因此之前其他代码中用无参构造函数new的对象可能会报错, 我们还需要手动加上@NoArgsConstructor;即@AllArgsConstructor和@NoArgsConstructor一般一起使用
一般不用全部参数的构造方法, 我们习惯自己new完一个对象用set方法去赋值
- 可以为单个成员变量设置get方法
- 可以为所有成员变量设置get、set方法 。同时可以为某个成员变量设置其他权限(默认public)、或设置取消get/set方法
- 无法为static设置get/set方法,只为final类型设置get方法
ToString只能加在类上,自动生成ToString方法,使用exclude排除多个字段,of必须包含哪些字段。
生成equals方法、canEqual(判断是否属于Car类)、hashCode方法。也可以进行相等比较的排除,指定。
例如:@EqualsAndHashCode(exclude = {“字段1”,“字段2”})
本节内容涉及java编译过程大家可以去了解一下, 同时还有一些注解相关的API;
学习注解就一定要学习java的反射, 有关注解和反射的知识可以查看我的另一篇博客
SpringBoot项目的启动流程
Java规范:JSR 269(Java Specification Requests) 插件化注解处理API(Pluggable Annotation Processing API)
JDK6提供的特性,在 Javac编译期(SOURCE标识)利用注解,在字节码文件中生成get、set等方法
Java编译器执行过程:
查看编译后的字节码文件:
BEGIN_TIMESTAMP
public boolean{
Boolean success = ...
//return success;
return Boolean.TRUE.equals(success);
}
if(success)
{
try{}catch{}finally{}
}
....
改成
if(!sucess)
{
...
}
try{}catch{}finally{}
soutv:打印一个value
fori:循环
cmd + n插入构造函数, 重写方法,实现方法等