springboot框架学习
springboot
1 springboot整合mybatis框架
1.1 springboot项目的构建方式?
1.直接新建spring initializr项目,不过需要最新的boot框架需要jdk17开始。
2.用阿里的镜像可以用jdk8,但是要求idea版本大于2020。
3.构建高版本boot后直接在2020的pom文件里面改boot版本和jdk版本。或者普通maven项目导入pom文件。
目前,我先用第三个方法,修改boot和jdk版本的方法,第一个下载的话社区版功能少,专业版破解麻烦,旧的用习惯了;第二个和第一个一样。等以后用用再换新版本的idea和jdk,还要改背景。
1.2 springboot整合笔记
配套springboot_demo01工程学习
1.
阿里云脚手架,生成pom文件没有<parent>标签,是另一种形式
修改方式:
1.删除默认的<dependencymanage>标签内容
2.删除 <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
这个插件的版本
3.删除 这里面的默认版本
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
这里面的默认版本
4.添加 <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.13</version>
</parent>
2.
又一次出现了源码消失的问题,idea无法加载源码,上一次是复制了项目直接导入出现的。
解决方法,删掉项目的.idea文件,重新导入。
3.
/*mapper层注解的使用
* 1.@Mapper+@Reposityory+@AutoWired:
* springboot框架中,注解扫描是spring在做,所以mybatis是隐式的,不会自动处理,需要spring安排他
* @Mapper告诉spring这是一个mapper层的接口,需要将他给mybatis处理,让mybatis给他生成实现类
* @Repository是告诉spring将生成的实现类注册为Bean,交由Spring容器管理。
* @AutoWired告诉spring进行依赖注入,将容器中的Bean赋值给需要的对象*/
4.
#配置mybatis框架信息
mybatis:
# 这个地方注意:
# 1.不配置mapper-locationsmybatis也可以自动映射,
# ,Spring Boot的MyBatis自动配置(MybatisAutoConfiguration)默认扫描的是同路径同文件名的xml。
# 2.要配置的话,满足两点:
# (1)xml文件的路径和接口的路径可以一致,也可以不一致,具体看你的自定义配置
# 但是注意:单用mybatis框架的时候,<mapper>如果配置成包扫描,一定满足两点
# - xml文件路径和接口全类名一致(注意是接口全类名,包括文件名和接口名一样,因为默认扫描是看同路径下的同名文件)
# - xml文件的namespace和接口全类名一致
# (2)xml文件namspace和接口全类名一致
# mapper-locations: classpath:com/yzh/springboot_demo01/entity/*xml
# mapper-locations: classpath:com/yzh/springboot_demo01/mapper/*xml
type-aliases-package: com.yzh.springboot_demo01.entity
2 注解感悟合集
2.1 感悟1
之前我只理解注解就是一个标记,本身没有处理逻辑,是由spring的处理机制进行处理,但还是理解的不过彻底。主要疑惑:
-
为什么spring注解扫描机制扫描到这个纠结就知道该做什么?就是这个疑惑导致的不彻底,在ai解释下,彻底明白了。
-
注解本身就是一个标记,只是告诉spring这里要进行特殊操作,具体处理逻辑由spring完成,然后,扫描机制扫描到后,执行这个注解对应的操作是因为spring开发者在spring里面早就写好了处理逻辑,如过遇到某个注解,做什么操作的代码。所以一旦扫描到某个注解,spring就根据提前写好的关联代码进行相应的操作。
-
通俗例子解释: 超市里面的食品标签, 蔬菜,水果:生鲜类标签---员工对生鲜食品进行保鲜操作(喷水,上保鲜膜)。 碗,瓷器:易碎标签----员工对易碎物品包装防碎泡沫。 员工如何知道怎么根据这些标签进行对应操作,超市内部规则里面规定哪一种标签进行那种操作。这就是相似的效果和java的标签
2.2 感悟2
注解虽然不处理逻辑,只做标记,提示信息,但他还可以带有参数,这个参数可以动态提示信息,spring扫描到这个注解,在内部的关联代码中,根据注解的参数动态变化处理逻辑。
延续上一个通俗例子:生鲜类标签带有参数(保鲜期2天)
内部处理逻辑:
如果 保鲜天数=1 → 喷水保鲜。
如果 保鲜天数=2 → 覆盖保鲜膜。
如果没有参数:
内部执行兜底策略,统一喷水保鲜。
2.3 感悟3
2025/3/25,今天我再次迷茫在了spring注解开发的里面,就感觉很奇怪,用注解开发就行了?注解不是标记吗?不提供任何信息吗?为什么又要查查注解的作用是干什么?我就很不明白,他究竟是怎么回事,找哔站视频好几个,感觉还是不理解,本质还是不清晰,现在,结合AI和视频,我总结出了一套适合自己理解。
一个例子解释spring注解。
司令部 战斗分队(三人组)
司令部代表spring官方的各种框架,领导们代表spring项目的开发人员,战斗分队代表程序员三人组。
司令部的司令们规定你们执行任务过程中,发射白信号弹,司令部派出拆弹专家支援你们;发射红信号弹,司令部派出密码破译专家支援你们; 白信号弹和红信号弹信号标记,表示你们需要某一方面的支援,只要你们发出某个信号弹,我们会看这是什么类型的信号弹,然后做出支援行动。其实,白色信号弹代表需要拆弹专家支援,红色信号弹代表需要破译专家支援。尹队执行任务中,某个地方需要发送信号弹,然后他发送了白色信号弹,司令部看到有信号弹,然后仔细看他是什么颜色(鉴定颜色类型,人眼色觉鉴定),一看白色的,派出拆弹专家。依次对比程序中的注解。
尹程序员写程序中,写了一个@Controller注解,启动程序后,spring框架看到这个注解,然后判断看他是什么类型的注解(鉴定类型,内部由解析器和其他机制),然后执行相应的程序进行处理。
这也就间接说明了,@Controller代表干什么,@Overider代表干什么,尹队使用之前,肯定要先名表这些信号弹分别在规定里面代表什么意思才能够使用来执行任务请求援助,同理,尹程序员必须先知道这些注解在规定里有什么作用才可以使用来开发程序。所以说信号弹本质是一个信号,然后这个信号传递了一定的信息,这个信息就是规定里的信息。注解本质就是一个标记,这个标记传递了信息,这个信息就是逻辑处理里面的信息。所以尹程序员去学习注解的作用是什么的时候,学习的就是他逻辑处理里面的作用,AI直接说出这个注解是告诉spring框架干什么的,说的也是这个注解在逻辑处理机制中的作用,这个要搞清。本质还是一个标记,传递信息用的。具体做什么不是这个标记做的,是司令部和sping框架做的。
尹程序员写代码时,写具体注解明白的这个具体注解是什么作用是在规定层面的作用,这个作用是在spring机制里面实现的,所以你才会看到AI说这个注解干什么,那个注解干射门,因为他说的是,规定里面的具体注解作用是干什么的,而作为标记传递信息,是代码运行角度来看的,不是一个角度,明白我的意思把。
2.4 感悟4
==这个注解一直翻不过来这个劲,明明本身没有任何功能,只是标记这个地方,怎么学习视频和文章中都是这个注解什么功能,那个注解什么功能。来看下AI的解释。注解就是作为标记,当扫描机制扫到后,触发设计好的逻辑。
3 我对springboot和mybatis框架的新理解
我是一个爱深究的人,学习一个新技术前一定要明白这个新技术到底新在哪里,要不然无脑学新技术根本不明白他是如何演进的,这是没有意义的,这会让我极其不舒服。
我反复借助AI,推敲springboot和mybatis这些框架的如何理解他们的优势,以下是我的感悟:
在理解这些框架之前,要明白两个定义:
1.何为新技术?
新技术包含两种:
- 基于基础知识,在原有技术基础上的优化,改进,扩展,升级形成的,他实现原有功能的基础上,优化了系统,提升了效率。举例:
- 芯片制程从7nm到3nm,提升性能并降低功耗。
- 基于基础理论,颠覆性创新和研究或者跨学科技术结合开发,获得全新的原理或者突破性的改进,实现领域内从未出现的原创技术。举例:
- 人工驾驶变为自动驾驶,全新架构
- 电动汽车取代然后汽车,全新架构。
2.何为新功能?
新功能同样有两种范围:
- 对现有功能的优化升级。举例:
- mybatis动态sql通过结构化标签的技术改进,实现新功能,对原有crud操作的基础上,提升效率,可维护性。
- 微信的新功能中,好友删除从批量操作简化用户管理,方便了操作。在实现删除功能的基础上,进行了升级,提升了效率。属于新功能范畴。
- 在原有系统,产品基础上创新,实现此前未存在的能力。对应技术的第二种,技术的突破和跨领域整合实现从未出现的新技术来实现。举例:
- NFC碰一碰支付
- AI物体识别。
深入理清上面两个定义之后,再次理解springboot框架和mybatis框架简直轻而易举。
springboot框架:他符合新技术和新功能的定义。
新技术举例:开发新注解,开发人员在注解机制的基础上,根据特定的需求开发了新注解,新注解符合新技术的范畴;新注解实现的功能不仅实现了原来spring单一的注解功能,还进行了升级,实现一个新注解包含多个原来单主解的功能,这是功能的升级,符合新功能范畴。
只不过springboot整体属于第一种新技术,没有什么技术的颠覆性突破和体系架构的改变,仍然是在spring技术的基础上进行升级,创新。
mybatis框架:同样符合新技术和新功能的定义。
新技术举例:动态sql,实现原来crud操作的基础上,实现类复杂功能的查询,符合新功能定义;从原来的手动拼接sql字符串到java代码中变为写动态sql结构化标签在xml文件里,符合新技术范畴。
4. springBoot常用注解
4.1controller层
5 springBoot定位
springMVC是spring FrameWork项目的一部分,我学习的ssm框架,就是s指的就是spring FrameWork
6 spring两大优势
6.1 起步依赖
pom中添加一个
6.2 自动配置
总体来说就是springboot根据你导入的依赖,帮你配置你之前需要配置的东西,像整合mybatis,springmvc需要的xml文件配置,tomcat部署配置,导入的坐标的自动创建bean等,你可以直接使用模板导入后的对象。你在yml里面配置的是你自定义的配置,优先生效,数据源的信息是必须要配置的,springboot不会知道外部数据库的信息。
这里有个感悟记录一下:
数据源是一个接口,即DataSource这个接口定义了数据源的标准,里面是数据库的连接信息和数据库连接池的配置信息,然后数据库连接池实现了这个接口的标准,只不过实现这个接口的实现类不叫数据源,而是叫做数据库连接池,由这个实现者管理程序与数据库的连接,这也就说通了,我当时javaweb使用c3p0数据库连接池的时候也要配置数据库的连接信息和连接池的配置信息,因为c3p0数据库连接池实现了这个接口标准,所以里面就是这个接口的标准内容。
这和springIOC容器逻辑一样,容器是一个接口,即ApplicationContext接口定义了这个容器的实现标准,具体的实现类实现类这个接口,把这个实现类叫做IOC容器。
自动配置原理实现
初步简答理解:
(为什么你不用配置,他就帮你配置了,那是因为他根据导入的依赖,根据@EnableAutoConfig注解里面包含的@import注解,加载spring.factory文件中的配置类,sprngboot启动,根据你导入的依赖坐标用@condition注解动态选择创建了对应配置的bean,这是核心体现)
7 springboot_demo03笔记
第一次整合mybatis,jsp三层开发练习记录(收费的单表)
7.1 笔记
1.
注意:
(1)创建完springboot项目要在yml文件下配置一下数据源信息。
(2)把生成的数据源信息删除,否则字符会导致错误。
(3)把生成的模板类删除,要不然模板类的包路径需要自己移动。
2.
记录一下踩坑经过
1.springboot是不支持jsp的,所以需要在pom里面导入四个坐标,
2.之后直接在main目录下建立web文件夹就行,然后放jsp文件
3.在yml文件里配置前缀后缀。
4.注意:web文件夹里面的WEB-INF文件夹只能通过控制器类访问,直接在浏览器输入jsp地址无法访问。
5.然后如果你自己有jsp模板的话,不用把web文件夹添加到项目路径里,(添加这一步只是让idea知道只是web文件,然后可以给你提供
jsp模板,你自己有的话,不用添加也可以。
6.还有就是配置jsp的实时渲染方式:
# 添加项目路径和开启实时渲染jsp
servlet:
context-path: /springboot
jsp:
init-parameters:
development: true
7.注意yml里面的层级要对应好,我第一次就是datasource和mvc不在同一级。
8.最后一点最重要,不要乱添加目录为根资源啥的,乱添加web文件夹啥的,要不然环境很乱。
我第一次就是乱添加,导致最后把.idea和iml文件删除再次打开项目也不行,只能重新建立项目才可以。一定不要乱添加。
8.使用Apipost工具测试的笔记
(1)数据库配置里面的主机地址是哥的数据库地址,所以我可以连接到数据库,这是远程库,我说咋没有库也可以连接到。
(2)重点测试了@PathVariable和@RequestParam的区别,然后写法,笔记本里面记录了。
(3)RequestBody和Responsebody是把请求数据和响应数据封装为json格式,一般是多个请求数据对应一个实体类的属性的时候封装。
(4)@RestController=@Controller+@responsebody,所以@RestController自动会把响应数据封装为json格式。
7.2 如何封装数据到jsp页面
/*1.留下一个问题:如果用@controller,怎么把数据返回到页面上
1.在servlet中是借助request和response和session处理请求和封装数据的返回到jsp页面里面
2.springmvc是用这个ModelAndView类(找时间学一下ModelAndView这个类)*/
8 HTTP请求格式
9 springboot二期开发笔记
这个标题记录我二期开发过程中的问题。
问题1:
数据库怎么还会有数据,明明不是我的本地连接啊?
代码里面数据库配置是老哥的远程mysql服务器连接ip,所以我可以连接上
问题2:
我明明在navicat里面输的是老哥的电脑的ip地址,可为什么访问不到dict这个数据库?
你个笨蛋,mysql学创建用户,授权用户的时候全忘了?mysql是一个关系型数据库管理系统,注意,它本身就是一个系统软件,运行在你的电脑上,然后你的电脑就是一台MYSQL服务器。关系指的是表与表之间的关系,联系;数据库管理系统指的是它可以管理多个数据库,也就是你在navicat里面创建的多个数据库。
然后MYSQL分为客户端和服务端,mysql服务器可以创建多个用户,默认root本身就有且是超级管理员。多个用户从客户端访问,也就是navicat访问,别人访问你的mysql服务器,需要输入你给人家创建的用户和密码,然后创建的时候设置有权限,什么只能看到特定数据库什么的。
问题3:
感觉又对服务器是什么产生疑问了,什莫事服务器,什么是客户端?
首先明确两点:(1)服务器的本质是提供服务。(2)服务器是软硬结合体
所以:你的电脑是一台硬件,mysql是服务器软件,然后你的电脑运行mysql服务器软件后,就可以被称作mysql服务器,给客户端提供服务,客户端可以是你电脑上的navicat或者他人电脑上的navicat。
然后查看你的电脑的ip地址,一般就是wifi的ip
客户端的区分:客户端设备和客户端程序
注意术语和专业的区别
问题4:
拓展延申java中的服务器软件有哪些?
问题五
端口号是干什么的?我修改端口号怎么知道这个端口号有没有有效?
1. 端口的基本概念
端口号:端口号是一个 16 位的数字,范围是 0 到 65535。它用于标识一台计算机上运行的特定服务或应用程序。
IP 地址 + 端口号:IP 地址用于标识网络中的一台设备,而端口号用于标识这台设备上运行的特定服务。例如:
192.168.1.100:80 表示 IP 地址为 192.168.1.100 的设备上的 HTTP 服务。
192.168.1.100:3306 表示同一设备上的 MySQL 数据库服务
问题6
怎么设计端口号有效?怎么检查端口是否被占用?
1. 确认端口号是否有效
端口号是一个 16 位的数字,范围是 0 到 65535。根据 IANA 的规定,端口号分为以下几类:
0-1023:系统保留端口,通常用于常见的系统服务(如 HTTP、FTP 等),需要管理员权限才能绑定。
1024-49151:注册端口,通常用于用户应用程序(如 Tomcat、MySQL 等)。
49152-65535:动态或私有端口,通常用于临时连接。
建议:
选择 1024 到 49151 之间的端口号,避免使用系统保留端口。
确保端口号未被其他程序占用。
2. 检查端口是否被占用
在设置端口号之前,需要确认该端口是否已被其他程序占用。以下是检查方法:
方法 1:使用 netstat 命令
打开命令提示符(Win + R,输入 cmd,回车)。
运行以下命令:
cmd
netstat -ano | findstr :端口号
例如,检查端口 8080:
cmd
netstat -ano | findstr :8080
如果输出结果为空,说明该端口未被占用;如果有输出,说明端口已被占用。
方法 1:使用 netstat 和 findstr(Windows)
打开命令提示符(Win + R,输入 cmd,回车)。
使用 netstat -ano 命令列出所有端口,然后通过 findstr 过滤指定范围。 例如,检查端口范围 8000 到 9000:
cmd
netstat -ano | findstr /R ":800[0-9] :80[1-9][0-9] :9000"
解释:
:800[0-9] 匹配 8000 到 8009。
:80[1-9][0-9] 匹配 8010 到 8099。
:9000 匹配 9000。
问题7
为什么我这数据库创建@’%‘类型的用户后无法登录mysql本地服务器?
原来是匿名用户的问题,把匿名用户删除就行了。
参考文章:
额外加一点用户创建的指令
##创建用户并设置密码和访问地址
CREATE USER 'yzh01'@'%' IDENTIFIED BY '123';
##授予用户对某个数据库的所用权限
GRANT ALL PRIVILEGES ON mybatis.* TO 'yzh01'@'%';
GRANT ALL PRIVILEGES ON springboot.* TO 'yzh01'@'%';
##授予权限后必须刷新权限生效
FLUSH PRIVILEGES;
问题8
rbac开发前,我想找一个工程开始做,经过对比数据库的表的分析。
1.jichu-master(springboot里面的)———-淘汰(原因:数据库的表不一样,是一个杂例子)
2.jichu-master(mybatis里面最先发的)——淘汰(原因:rbac杂表,是一个杂例子)
3.shiro—————-(保存)
shiro居然是Apach的一个安全框架的名字,这个项目刚好使用了shiro框架,用的springboot+mybatis的框架。
shiro是一个相对完整的网站项目,主要用它:
- 生成代码功能对mybatis单表的增删改查自动生成,生成的代码mybatis-plus也可以用。
- 后期有实力了再来看他项目是怎么写的。
4.mybatis-plus的自动生成三层架构用到一个mybatisplus插件。
5.老哥架构师官网——保存
http://124.221.43.118:8888/system/user
这个是老哥架构师管理系统的官网,是一个教学项目,是对shiro项目的功能完善。我没有源码
目前主要用他的页面和数据库练业务。
10 @Configration+@Bean和@Component区别
10.1 作用区别:
- @Configration+@Bean适用于使用第三方库的类、配置逻辑复杂的Bean对象。
- @Component适用于配置简单的bean对象。
@Bean比@Component强在哪里?
10.2 定义区别
先说结论:
1。@Configration+@Bean是自定义Bean对象的创建方式,以及初始化的配置信息。
2.@Component是让IOC容器创建,且创建方式默认无参构造或者有参构造。
具体AI解释
作者:yzh先生
博客:https://www.cnblogs.com/ZiJun
本文版权归作者和博客园共有,转载请在文章中注明原文链接:https://www.cnblogs.com/ZiJun/p/18852471 ,愿尊重劳动成果,谢谢!
若有关于博客内容的各种问题,欢迎在评论区讨论或发消息,让我们一起进步!