Web开发SpringBoot SpringMVC Spring的学习笔记(包含开发常用工具类)

开发框架学习笔记

  • 一.Spring SpringMVC SpringBoot
    • 三者的联系
    • SpringMVC工作原理
  • 二.SpringBoot的学习
    • 框架学习
  • 2.各个类之间的继承和实现关系
  • 3.理解面向对象的思想(其实这个想写在2中的)
  • 四.开发常用工具Lombok
    • 4.0说在前面(如何快速使用Lombok)
    • 4.1了解Lombok
    • 4.2Lombok的作用一:减少代码冗余
    • 4.3Lombok的作用二:方便打日志
    • 4.4Lombok使用方法(各个注解作用)
    • 4.5Lombok原理
    • JsonUtil
    • BeanUtil
    • StringUtil
  • 代码习惯
  • 快捷方式

一.Spring SpringMVC SpringBoot

三者的联系

在这里插入图片描述

MVC是一种设计框架, 市面上也有很多其他的MVC web框架,但是SpringMVC是佼佼者

  • 总结: springboot是spring的升级, springMVC是一种MVC框架(MVC框架的作用看下图)
    在这里插入图片描述

在这里插入图片描述

SpringMVC工作原理

在这里插入图片描述
在这里插入图片描述
这里我的理解是handler可能是前端发ajax请求的那段代码?还是说是后端各种controller类和其RequestMapping(‘URL’)的一个集合?

  • 总结在这里插入图片描述

相关参考文档如下:
MVC思想及SpringMVC设计理念
Spring MVC+ Spring + Mybatis “三大框架”介绍
SpringMVC—Handler到底是个什么?及流程详解

二.SpringBoot的学习

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在这里插入图片描述

2.各个类之间的继承和实现关系

3.理解面向对象的思想(其实这个想写在2中的)

四.开发常用工具Lombok

4.0说在前面(如何快速使用Lombok)

  • 最简单的办法在maven中加入如下依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional><scope>provided</scope>
</dependency>

在这里插入图片描述

  • 老版本的idea需要安装Lombok插件(否则写代码的时候会报错),并且打开设置中的enable annotation processing (否则idea不识别Lombok的注解)但是新版本(21开始吧)idea已经自带Lombok插件了;

    这里引出来一个问题:为什么要idea要装插件?
    因为idea本质上是一个可视化的编辑器, java编译器会根据Lombok的注解修改语法树,最终结果是被注解标记的java类生成的字节码文件中会包含Lombok生成的代码, 但是我们写代码的时候出于源码阶段还没编译呢, idea当然识别不出来Lombok的注解生成一些get set方法了

4.1了解Lombok

官网解释

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等方法、使用注解

4.2Lombok的作用一:减少代码冗余

使用Lombok前:即使idea提供了快捷键cmd + n手动快捷生成get/set/equals/hashCode/toString方法,但表多了后还是很麻烦
在这里插入图片描述
使用后效果:加注解,减少代码冗余
在这里插入图片描述

4.3Lombok的作用二:方便打日志

日志和传统打印操作相比的好处是日志是可插拔的, 日后上线的时候可以在配置文件中动态的开关,但是sout的内容需要手动去一个个文件中寻找并删除

  • 小技巧@Sl4j打日志的时候不仅仅可以直接打印,还可以用如下这种占位符的方法打印变量
/*** 实现log4j的符号{}打印*/@Testpublic 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("=====================================================");}

在这里插入图片描述

4.4Lombok使用方法(各个注解作用)

  • @Data:生成该类的get/set/equals/hashCode/toString方法
  • @Sl4j:自动在该类中生成一个private Logger log = LoggerFactory.getLogger(this.getClass());即log对象, 我们可以通过log.info()\log.debug()\log.warning()…多种方式打日志
  • @Log:支持Log4j、Slf4j,日志功能, 具体Log4j没用过, 后面来补
  • @Accesors(chain = true):
    平常给一个对象赋值的时候我们需要person1.setAge(6);person1.setName(‘张三’); 使用这个注解后直接person1.setAge(6).setName('张三');进行链式编程;
  • @Builder:使用此注解进行对象的构建,函数式编程/链式编程,省去逐行字段set。
    CarLombok build = CarLombok.builder().id(1).type(“string”).price(88.8).level(‘a’).build();
    System.out.println(build.toString());
  • @AllArgsConstructor:生成该类的全部参数的构造函数, 不能生成部分参数的构造函数,如果想要生成部分参数的构造函数还是需要手动生成的;如果加上这个注解后相当于类中增加了一个全部参数的构造函数, 因此之前其他代码中用无参构造函数new的对象可能会报错, 我们还需要手动加上@NoArgsConstructor;即@AllArgsConstructor和@NoArgsConstructor一般一起使用 一般不用全部参数的构造方法, 我们习惯自己new完一个对象用set方法去赋值
  • @NoArgsConstructor:生成无参构造函数
  • @RequiredArgsConstructor:生成指定类型(final ,@NonNull)
  • @Getter和@Setter
  1. 可以为单个成员变量设置get方法
  2. 可以为所有成员变量设置get、set方法 。同时可以为某个成员变量设置其他权限(默认public)、或设置取消get/set方法
  3. 无法为static设置get/set方法,只为final类型设置get方法
  • @ToString等: 生成该类的get() set() tostring()方法

ToString只能加在类上,自动生成ToString方法,使用exclude排除多个字段,of必须包含哪些字段。

  • @EqualsAndHashCode

生成equals方法、canEqual(判断是否属于Car类)、hashCode方法。也可以进行相等比较的排除,指定。
例如:@EqualsAndHashCode(exclude = {“字段1”,“字段2”})

  • @NonNull
    可以加在成员变量前,也可以加在方法参数前。用来指定某个字段不能为空
  • val:类比JS中的val(弱引用类型),在编译阶段确定类型,简化操作
    使用 val map = new HashMap<String, String>();
    替换 Map<String, String> map = new HashMap<>();
  • @Cleanup:对资源流进行清理
    @Cleanup InputStream in = new FileInputStream(“filepath”);
    @Cleanup OutputStream out = new FileOutputStream(“filepath2”);

4.5Lombok原理

本节内容涉及java编译过程大家可以去了解一下, 同时还有一些注解相关的API;
学习注解就一定要学习java的反射, 有关注解和反射的知识可以查看我的另一篇博客

  • 没错, 上篇那个博客啥都没, hhh 待补!!!, 不过你可以查看下面这些内容
    下面的内容都是从这个视频学的, 这个视频后半部分还讲解了Spring是如何通过注解实现对象的代理的, 但是我只是知道它执行的顺序, 还没有彻底搞懂反射, 等我补完反射就来补SpringBoot项目的启动流程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    为什么说注解也是一个类呢?在这里插入图片描述

Java规范:JSR 269(Java Specification Requests) 插件化注解处理API(Pluggable Annotation Processing API)
JDK6提供的特性,在 Javac编译期(SOURCE标识)利用注解,在字节码文件中生成get、set等方法
Java编译器执行过程:
在这里插入图片描述
查看编译后的字节码文件:在这里插入图片描述

  • 为什么说Lombok在源码阶段不生效, 他只是在java编译的时候在字节码文件中生成get\set方法
    以@Data为例,我们查看它的源码发现:
    在这里插入图片描述

JsonUtil

  1. Json <> Bean, 例如 将一个对象以string字符串的方式存储到redis的string中

BeanUtil

  1. Bean<>Map, 例如将一个对象以hashmap键值对的形式存储到redis的hash中
  2. JsonObject<>BeanUtil

StringUtil

  1. isNotBlank:判断一个String是否为空(空是指"“或” "这种)

代码习惯

  • 所有常量均定义宏
    写宏的时候 用下划线区分BEGIN_TIMESTAMP
  • 凡是自动拆箱都可能导致空指针(比如返回的是Boolean, 但是这是个null, 那么没办法拆箱成boolean了)
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插入构造函数, 重写方法,实现方法等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Clion断点无效(LLDB调试器)

使用Clion时&#xff0c;配置的编译器是Visual Studio&#xff0c;当中的Debugger只有选择LLDB。 项目是CMAKE类型&#xff0c;这里启动调试会发现断点无法命中。 先检查项目的CMakeLists.txt&#xff0c;发现如下配置会影响&#xff1a; set(CMAKE_BUILD_TYPE Debug) set(CM…

云服务器搭建GitLab

经验总结&#xff1a; 1、配置需求&#xff1a;云服务器内存最低4G 2、内存4G的云服务器&#xff0c;在运行容器后&#xff0c;会遇到云服务器操作卡顿问题&#xff0c;这里有解决方案 转载&#xff1a;服务器搭建Gitlab卡顿解决办法-CSDN博客 3、云服务器的操作系统会影响…

第二证券:如何判断主力是在洗盘还是出货?

怎样判别主力是在洗盘仍是出货&#xff1f; 1、依据股票成交量判别 在洗盘时&#xff0c;个股的成交量与前几个生意相比较&#xff0c;呈现缩量的状况&#xff0c;而出货其成交量与前几个生意日相比较呈现放量的走势。 2、依据股票筹码分布判别 洗盘首要是将一些散户起浮筹…

20240109适配selinux让移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通

20240109适配selinux让移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通 2024/1/9 10:46 缘起&#xff1a;使用友善之臂的Android11可以让EC20上网&#xff0c;但是同样的修改步骤&#xff0c;Toybrick的Android11不能让EC20上网。 最后确认是selinux的问题&#…

BlogPark测试报告

目录 一&#xff0c;项目背景 二&#xff0c;项目功能 三&#xff0c;测试计划 3.1 测试用例的设计 3.2 功能测试 1.正常登录 2.正常写博客测试 &#xff08;输入完整的标题和内容&#xff09; 3.发布博客之后跳转到详情页观察是否有刚发布的博客 4.删除博客观察列表的…

漫漫数学之旅004

文章目录 经典格言数学习题古今评注根号的故事数学家小传(一)乔治波利亚(二) 克里斯托弗鲁登道夫经典格言 数学包括用最迂回曲折的方式证明最显而易见的事实。——乔治波利亚(Gorge Polya) 乔治波利亚(George Polya)的这句名言揭示了数学证明的本质和魅力。在数学中,…

非工程师指南: 训练 LLaMA 2 聊天机器人

引言 本教程将向你展示在不编写一行代码的情况下&#xff0c;如何构建自己的开源 ChatGPT&#xff0c;这样人人都能构建自己的聊天模型。我们将以 LLaMA 2 基础模型为例&#xff0c;在开源指令数据集上针对聊天场景对其进行微调&#xff0c;并将微调后的模型部署到一个可分享的…

华为 1+X《网络系统建设与运维(高级)》认证模拟实验上机试题

华为 1X《网络系统建设与运维&#xff08;高级&#xff09;》认证模拟实验上机试题 一、考试背景二、考试说明2.1考试分数说明2.2考试要求2.3考试环境介绍2.4启动考试环境2.5保存答案(非常重要) 三、考试正文3.1注意事项3.2校区内&#xff08;LAN&#xff09;3.2.1任务 1&#…

上门洗衣洗鞋小程序多门店管理模式是怎么样的

做干洗店和洗鞋店的老板们很多都不止一个门店&#xff0c;多门店的管理模式下&#xff0c;去做一个上门洗衣洗鞋小程序&#xff0c;需要有哪些必要的功能才能让不同的门店管理起来不乱呢。首先需要先确定一下不同门店的管理都会面临哪些经营场景和需求。 第一&#xff0c;加盟店…

Qt5插件开发入门+示例

目的 1、为什么用插件 现在大家最讲模块化开发了,怎么算模块化,分成不同的类,分成不同的文件夹,高内聚,低耦合,这个当然算是。 从高层次讲,它们是在一起的,只是逻辑上的模块化,不是物理上的模块化,或者说不是彻底的模块化,彻底的模块化应该像一个辆自行车一样,车…

计算机毕业设计-----ssm+mysql医药进销存系统

功能介绍 医药进销存系统&#xff0c;主要功能包括&#xff1a; 公告管理&#xff1a;发布公告、公告列表&#xff1b; 生产管理&#xff1a;订单列表、增加生产、订单日志&#xff1b; 分店采购&#xff1a;分店审核、采购&#xff1b; 总店仓库&#xff1a;出库管理、仓库列…

2024 Midjourney 基础教程(⼆):了解 Midjourney Bot 和AI绘画使用技巧进阶教学

在上⼀篇⽂章中&#xff0c;我们学到了如何注册 Midjourney &#xff0c;开通付费订阅&#xff0c;并画出了可能是⾃⼰的第⼀张 AI绘画。怎么样&#xff1f;这种将想象的画⾯&#xff0c;变为现实世界图⽚的感觉。 是否有种造物者的错觉&#xff0c;同时有种开盲盒的惊喜感&…

市域治理一体化综合指挥平台解决方案:PPT全文42页,附下载

关键词&#xff1a;市域社会治理&#xff0c;智慧网格&#xff0c;市域社会治理现代化&#xff0c;智慧网格综合管理平台&#xff0c;市域治理 一、市域治理&#xff08;智慧网格&#xff09;一体化建设需求分析 1、职能部门需求&#xff1a;职能部门在市域治理中发挥着主导作…

关于谷歌浏览器如何将背景换为黑色,字体换为白色

一.关于chorme浏览器如何换色 #跟着我一起来看一下吧 操作步骤 步骤 1.在谷歌的搜索框里搜索此网址——chrome://flags/ 如图 2.访问此网址 如图 3.我们在搜索框搜索:Auto Dark Mode for Web Contents 如图 4.开启Web内容的自动暗模式 选择enbled 5.确认重新启动 选择…

126.(leaflet篇)leaflet松散型arcgis缓存切片加载

地图之家总目录(订阅之前必须详细了解该博客) arcgis缓存切片数据格式如下: 完整代码工程包下载,运行如有问题,可“私信”博主。效果如下所示: leaflet松散型arcgis缓存切片加载 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYP

2.2.3机器学习—— 判定梯度下降是否收敛 + α学习率的选择

2.2.3 判定梯度下降是否收敛 α学习率的选择 2.1、 判定梯度下降是否收敛 有两种方法&#xff0c;如下图&#xff1a; 方法一&#xff1a; 如图&#xff0c;随着迭代次数的增加&#xff0c;J(W,b)损失函数不断下降当 iterations 300 之后&#xff0c;下降的就不太明显了 / …

赋能智慧农业生产,基于YOLOv3开发构建农业生产场景下油茶作物成熟检测识别系统

AI赋能生产生活场景&#xff0c;是加速人工智能技术落地的有利途径&#xff0c;在前文很多具体的业务场景中我们也从实验的角度来尝试性地分析实践了基于AI模型来助力生产生活制造相关的各个领域&#xff0c;诸如&#xff1a;基于AI硬件实现农业作物除草就是一个比较熟知的场景…

【数字图像处理】水平翻转、垂直翻转

图像翻转是常见的数字图像处理方式&#xff0c;分为水平翻转和垂直翻转。本文主要介绍 FPGA 实现图像翻转的基本思路&#xff0c;以及使用紫光同创 PGL22G 开发板实现数字图像水平翻转、垂直翻转的过程。 目录 1 水平翻转与垂直翻转 2 FPGA 布署与实现 2.1 功能与指标定义 …

Amazing OpenAI API:把非 OpenAI 模型都按 OpenAI API 调用

分享一个有趣的小工具&#xff0c;10MB 身材的小工具&#xff0c;能够将各种不同的模型 API 转换为开箱即用的 OpenAI API 格式。 让许多依赖 OpenAI API 的软件能够借助开发者能够接触到的&#xff0c;非 OpenAI 的 API 私有部署和使用起来。 写在前面 这个小工具软件写于两…

ChatGPT知名开源项目有哪些

ChatGPT-Next-Web&#xff1a;基于ChatGPT API的私有化部署网页聊天系统 主要功能&#xff1a; 只需在 1 分钟内即可在 Vercel 上一键免费部署&#xff0c;支持私有服务器快速部署&#xff0c;支持使用私有域名支持ChatGPT3.5、4等常见模型Linux/Windows/MacOS 上的紧凑型客户…