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的符号{}打印
     */
    @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("=====================================================");
    }

在这里插入图片描述

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插入构造函数, 重写方法,实现方法等

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BERT Intro

继续NLP的学习&#xff0c;看完理论之后再看看实践&#xff0c;然后就可以上手去kaggle做那个入门的project了orz。 参考&#xff1a; 1810.04805.pdf (arxiv.org) BERT 论文逐段精读【论文精读】_哔哩哔哩_bilibili (强推!)2023李宏毅讲解大模型鼻祖BERT&#xff0c;一小时…

2023年后,AI 还有什么研究方向有前景?

什么是AI ​ AI代表人工智能&#xff0c;它是指通过计算机科学技术使机器能够执行需要智力的任务的一种技术。这些任务包括学习、推理、问题解决和感知等&#xff0c;通常是人类智能的表现。人工智能的目标是使计算机系统能够执行需要人类智力的任务&#xff0c;而不需要人类的…

一文读懂服务器带外管理

带外管理 服务器带外管理&#xff08;Out-of-Band Management&#xff09;是指在服务器正常运行时&#xff0c;通过专门的管理通道对服务器进行监控、配置和控制&#xff0c;而无需依赖服务器的主操作系统 管理通道是独立于服务器主处理器和操作系统的&#xff0c;通常是通过专…

世邦spon IP网络对讲广播系统任意文件上传漏洞

产品介绍 世邦通信IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 漏洞描述 spon IP网络对讲广播系统存在任意文件上传漏洞&#xff0c;攻击者可以通过构造特殊请求包上传恶意后门文件&#xff0c;从…

5.MapReduce之Combiner-预聚合

目录 概述本地预计算 Combiner 意义实践前提代码日志观察 结束 概述 在 MR、Spark、Flink 中&#xff0c;常用的减少网络传输的手段。 通常在 Reducer 端合并&#xff0c;shuffle 的数据量比在 Mapper 端要大&#xff0c;根据业务情况及数据量极大时&#xff0c;将大幅度降低效…

前端-基础 表格标签 - 基本使用及表头单元格 详解

基本使用 &#xff1a; 主要作用 &#xff1a; 即 主要 用于显示&#xff0c;展示数据&#xff0c;因为它可以让数据显示的非常的规整&#xff0c;可读性非常好。 特别是后台展示数据的时候&#xff0c;能够熟练运用表格就显得很重要。 一个清爽简约的表格能够把繁杂 的…

TOPS、MIPS、DMIPS、MFLOPS、吞吐量与推理效率

1.概述 在深度学习对应的神经推理中经常涉及几个重要概念&#xff0c;TOPS、MIPS、DMIPS&#xff0c;MFLOPS&#xff0c;下文对其做对比说明。 2.概念对比 2.1 MIPS Million Instructions Per Second的缩写&#xff0c;每秒处理的百万级的机器语言instructions。这是衡量处…

coredump+gdb调试

1、什么是coredump Coredump&#xff08;核心转储&#xff09;是操作系统在程序异常终止&#xff08;例如由于段错误或其他严重错误&#xff09;时创建的一种文件。这个文件包含了程序崩溃时刻进程的内存镜像&#xff0c;通常还包括程序计数器、寄存器内容和堆栈内存等信息&am…

我在考 pmp,想知道如何去学习 pmbok?

PMP新版大纲加入了ACP敏捷管理的内容&#xff0c;而且还不少&#xff0c;敏捷混合题型占到了 50%&#xff0c;很多人都觉得考试难度提升了&#xff0c;我最开始备考的时候也被折磨过一段时间&#xff0c;但是后面还是找到了方法&#xff0c;3A通过了考试&#xff0c;也算有点经…

设计模式——桥接模式(Bridge Pattern)

概述 桥接模式是一种结构型设计模式&#xff0c;如果软件系统中某个类存在两个独立变化的维度&#xff0c;通过该模式可以将这两个维度分离出来&#xff0c;使两者可以独立扩展&#xff0c;让系统更加符合“单一职责原则”。与多层继承方案不同&#xff0c;它将两个独立变化的维…

SpringBoot整合人大金仓数据库KingBase

1 去KingBase官网下载驱动jar包 2 将解压得到的所有jar包放置在libs目录下&#xff08;没有就新建一个目录&#xff09; 3 在pom文件添加相关依赖 <!--添加KingBase所需要的依赖--> <dependency><groupId>com.kingbase</groupId><artifactId>kin…

el-select 单选时,选择后输入框的is-focus状态并没有取消

前两天在封装组件的时候&#xff0c;发现el-select 单选时&#xff0c;选择后输入框的is-focus状态并没有取消&#xff0c;需要手动点其它地方才会取消&#xff0c;于是想着找找为什么 一、通过调试源码发现&#xff0c;输入框在点击选项后触发blur&#xff0c;紧接着又触发了…

亚马逊,速卖通,美客多卖家怎么才能安全及有效的积累产品的评论

测评补单对于亚马逊、速卖通等平台卖家来说&#xff0c;是一种重要的运营手段之一&#xff0c;通过测评补单快速增加产品的销量、评论数量&#xff0c;提升排名&#xff0c;从而打造爆款产品。 测评养号的好处包括&#xff1a; 1. 提升店铺信誉&#xff0c;制造爆款&#xff…

【Django开发】美多商城项目第2篇:Django用户注册和登录开发(附代码,已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现前后端…

【2023】java常用HTTP客户端对比以及使用(HttpClient/OkHttp/WebClient)

&#x1f4bb;目录 1、介绍2、使用2.1、添加配置2.1.1、依赖2.1.2、工具类2.1.3、实体2.1.4、Controller接口 2.2、Apache HttpClient使用2.3 、OkHttp使用2.4、WebClient使用 1、介绍 现在java使用的http客户端主要包括以下几种 而这些中使用得最频繁的主要是&#xff1a; A…

持续领跑云安全赛道!安全狗多项安全能力获认可

近日&#xff0c;以“数字安全 未来可期”为主题的“2024安全市场年度大会”在北京成功举行。 作为国内云原生安全领导厂商&#xff0c;安全狗也受邀出席此次活动。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;创办于2013年&#xff0c;是国内领…

[②C++ Boost]: Boost库编译,arm交叉编译方法

前言 Boost是十分实用的C库&#xff0c;如果想在arm环境下使用&#xff0c;就需要自己下载源码编译&#xff0c;本篇博客就记录下Boost库的编译方法。 下载Boost源码 Boost源码的下载路径可以使用&#xff1a;https://sourceforge.net/projects/boost/files/boost/ 编译 …

MySQL之导入、导出远程备份

一、Navicat工具导入、导出 1.1 导入 第一步&#xff1a; 右键&#xff0c;点击运行SQL文件 第二步&#xff1a; 选择要运行的SQL&#xff0c;点击开始 第三步&#xff1a; 关闭即可 1.2 导出 第一步&#xff1a; 右键选择&#xff0c;导出向导 第二步&#xff1a; 选择SQL脚…

require.context的作用

1、什么是 require.context 一个 webpack 的 api &#xff0c;通过该函数可以获取一个上下文&#xff0c;从而实现工程自动化&#xff08;遍历文件夹的文件&#xff0c;从中获取指定文件&#xff0c;自动导入模块&#xff09;。 在前端工程中&#xff0c;如果一个文件夹中的模块…

亚信安全深度解读2023年中国网络安全重要政策法规

亚信安全在对2023年国内网络安全政策的持续跟踪和研究基础上进行了详细分析。观察整体态势&#xff0c;本年度网络安全政策的发布呈现出高密度特征&#xff0c;共计引起行业高度关注的政策达50余项。数据安全领域、个人信息保护和数据跨境安全成为关注的热点&#xff0c;分别有…