SPRINGBOOT从入门到精通

**************************************************************************************************************************************************************

1、入门概述
【1】共计十六章节
【2】入门、配置、日志、Web开发、数据访问、启动配置原理、starters
【3】缓存、消息、检索、任务、安全、分布式、开发热部署、监控管理
【4】J2EE的整个解决方案,牛批

**************************************************************************************************************************************************************

2、SpringBoot很优秀
【1】约定大于配置
【2】User--->SpringBoot--->Spring
【3】Spring全家桶时代
【4】一个伟大的框架
【5】使用嵌入式的Servlet容器,再不需要war包,直接jar包
【6】starters自动依赖于版本控制
【7】自动化配置,无需XML,开箱即用
【8】运维监控
【9】与云计算天然集成

**************************************************************************************************************************************************************

3、微服务概述
【1】微服务是一种架构风格 small services,小型服务
【2】ALL IN ONE
【3】每个功能元素,都是一个可独立替换,可以独立升级的软件单元
【4】SpringBoot---SpringCloud---SpringCloudDataFlow(这就是微服务的实现路径)

**************************************************************************************************************************************************************

4、环境准备
【1】Spring、Maven、Idea
【2】Springboot以2.1.6.RELEASE为准
【3】设置Maven路径

**************************************************************************************************************************************************************

5、HelloWorld
【1】@SpringBootApplication来标注主程序类
【2】 SpringApplication.run(StudyApplication.class, args); 主程序启动
【3】写Controller
package com.day.study.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@org.springframework.stereotype.Controller
public class Controller {
    @RequestMapping("hello")
    @ResponseBody
    public String hello() {
        return "Hello World";
    }
}
【4】server.port=8002  访问http://localhost:8002/hello
【5】这个插件的作用:将应用打包成可执行的jar包(自带tomcat)
 <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
 </plugins>

**************************************************************************************************************************************************************

6、场景启动器
【1】父项目spring-boot-starter-parent
【2】他也有父项目springboot-dependencies,这个项目时真正管理所有依赖版本的
【3】spring-boot-starter-web 场景启动器
【4】springboot将所有的功能场景都抽取出来,做成了starters(启动器),非常厉害的东西

**************************************************************************************************************************************************************

7、自动配置
【1】入口类
【2】SpringBootApplication标注在哪里,哪里的类就是主配置类,启动main即启动了Springboot
【3】SpringBootConfiguration配置类、就是配置文件(想起了Spring---难)
【4】EnableAutoConfiguration开启自动配置功能
【5】@AutoConfigurationPackage扫描主配置类的所在包类等到Spring容器中
(1)注意:如果在主配置类以外的包是扫描不到的。
(2)免去了我们手动配置的注入功能组件的工作。以前需要自己指定的配置类,都被自动做了。
(3)站在巨人肩膀上就是厉害呀,J2EE的全套解决方案

**************************************************************************************************************************************************************

8、快速创建SpringBoot应用
【1】使用Spring Initializr--->下一步--->选择starters
【2】.gitignore、Help、mvnw、mvnw.cmd都可以删除
【3】@ResponseBody也可以加在Controller头部、@org.springframework.stereotype.Controller
【4】@RestController等于3的两个@注解
【5】优点
(1)主程序有了
(2)resources里面有static静态资源、templates保存所有的模板页面
(3)application.properties是Springboot的默认配置文件,可以修改配置

**************************************************************************************************************************************************************

9、配置文件概述
【1】会用两种配置文件,但是我觉得application.properties更好用,更直观。yml太不直观
【2】YAML(以数据为中心)替代了xml,但是我觉得没有application.properties牛批

**************************************************************************************************************************************************************

10、YAML语法概述
【1】KV键值对
【2】空格控制层级关系
【3】大小写敏感
【4】字符串不需要单双引号

**************************************************************************************************************************************************************

11、yaml配置文件值
【1】但是我觉得基本没用,直接设置类属性不得了
【2】Springboot单元测试:@Runwith(SpringRunner.class) @SpringBootTest
【3】获取值需要加上@ConfigurationProperties  @Component

**************************************************************************************************************************************************************

12、配置文件properties设置属性值
【1】这个配置很香啊
person.name=陈翔
person.age=18
person.dog.name=小黑
【2】properties需要设置编码--->File--->Setting--->Editor--->File Encodings--->选择UTF-8,勾选Transparenet...

**************************************************************************************************************************************************************

13、@ConfigurationProperties与@Value区别
【1】@Value("${person.name}")
private String personName;
【2】用@Value好用

**************************************************************************************************************************************************************

14、@PropertySource、@ImportResource、@Bean
【1】@PropertySource(value={"classpath:person.properties"})
【2】ImportResource:导入Spring的配置文件,很少用了,都听困了
【3】建议使用全注解的形式。@Configuration 这就是指明当前类是一个配置类,就是来替代Spring配置文件的
(1)以前是用bean标签添加
(2)现在是@Bean来指明

**************************************************************************************************************************************************************

15、配置文件的占位符
【1】person.name=张三${random.uuid}
person.name=张三${random.int}
【2】也可以使用占位符获取之前设置的值

**************************************************************************************************************************************************************

16、Profile多环境支持
【1】开发、生产环境的配置文件
【2】spring.profiles.active=dev在配置环境中指定
【3】花里胡哨,没有必要。方式真多,能用的能有几个

**************************************************************************************************************************************************************

17、配置文件的加载位置
【1】根据config所在的位置一次是:文件下/config---文件**/config---classpath:config/---classpath:/
【2】约定大于配置,真是啰嗦呀

**************************************************************************************************************************************************************

18、外部配置加载顺序
【1】总体就是:从高--->低
【2】命令行:java -jar xxx --server.port=8003
【3】来自java:comp/env的NDI属性
【4】Java系统属性(System.getProperties())
【5】讲的很多,都这么玩,不乱套了

**************************************************************************************************************************************************************

19、自动配置的原理
【1】@EnableAutoConfiguration允许自动配置
【2】所有配置文件中能配置的属性都是在XXXProperties类中封装着
【3】底层原理真乏味
【4】比如在properties中配置,spring.http.encoding.enabled=false

**************************************************************************************************************************************************************

20、自动配置报告
【1】Conditional派生注解
ConditionalOnBean
ConditionalOnProperty...
【2】自动配置类只有在一定条件下才会生效
【3】debug=true属性,就可以知道哪些配置类生效了

**************************************************************************************************************************************************************

第三篇SpringBoot与日志
21、日志框架分类与选择
【1】日志框架System.out.println(""); from老板的需求
【2】框架就来了:zhangLog.jar
【3】高大上的功能?异步模式、自动归档...zhangLogGood.jar
【4】框架更新后,需要换新框架,zhangLogPerfect.jar
【5】写了日志的接口层,日志门面 zhangLogAbstract.jar
【6】需要哪个,导入具体的日志实现就行了
【7】logback、log4j、slf4j...
【8】日志门面slf4j、commons logging;日志实现log4j、logback
【9】slf4j门面就选择它,日志实现选择Logback
【10】Springboot也是选择的slf4j与logback一对组合

**************************************************************************************************************************************************************

22、slf4j使用原理
【1】日志不应该直接调用实现类,而是日志的抽象类

**************************************************************************************************************************************************************

23、日志框架统一转换为slf4j
【1】统一转换为slf4j
【2】思路:就是就是用新包换就日志包的思维,中间的转换包
【3】实现---------------重点重点重点!!!
 <!--logging-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
【4】日志的使用
package com.day.study.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Hello {
    private static final Logger logger = LoggerFactory.getLogger(Hello.class);
    public static void main(String[] args) {
        logger.info("大家好");
        logger.debug("调试");
    }
}

**************************************************************************************************************************************************************

24、Springboot日志的使用
【1】pom.xml右击--->Diagrams--->show Dependencies查看依赖关系图谱
【2】spring-boot-starter-logging可以查看他的依赖关系
【3】springboot也是使用slf4j+logback的方式进行日志记录
【4】springboot也把其他的日志都替换成了slf4j
【5】logging.file=my.log 配置这个就可以把日志打印到文件---------------重点重点重点!!!
【6】如果引入spring-core等包,应该在artifactId下面填写
<exclusions><exclusion>commons-logging</exclusion></exclusions>
排除掉这个包,和实际写法不太一样。请注意自己修改。

**************************************************************************************************************************************************************

25、日志默认配置
【1】Springboot默认帮我们配置好了日志
【2】日志级别从低到高trace、debug、info、warn、error
【3】private static final Logger logger = LoggerFactory.getLogger(Controller.class);
【4】指定位置:logging.file=my.log
【5】能配置使用即可

**************************************************************************************************************************************************************

26、指定日志文件和日志Profile功能
【1】logback.xml 个性化的配置,感觉没必要

**************************************************************************************************************************************************************

第四篇Web开发
28、概述
【1】创建Springboot应用
【2】选择场景配置
【3】编写业务代码
【4】自动配置原理
【5】XXXAutoConfiguration 自动配置组件
XXXProperties 配置类来封装配置文件信息

**************************************************************************************************************************************************************

29、静态资源映射规则
【1】RESTful风格开发
【2】以webjars来引入jquery等文件(没必要,找js资源就可以了)
【3】默认找资源的路径resources、static、public
【4】访问JS CSS静态资源,可以放到上面3个路径下
【5】localhost:8002/hello 默认是静态资源下的html文件
【6】图标也是放在静态文件夹下,favicon.ico

**************************************************************************************************************************************************************

30、Thymeleaf概述
【1】也是模板引擎的一种JSP、Thymeleaf、Vue
【2】引入Thymeleaf
<!-- Thymeleaf 自动配置 -->
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

**************************************************************************************************************************************************************

31、Thymeleaf的原语法
【1】时间不同,原来重要的东西在后来的时间已经不重要了...
【2】th:text 看自己的笔记吧,比较全了。
【3】语法规则概述:th语法
【4】th:each、 th:if 、th:case、th:attrappend、th:href、th:src...
【5】th:utext
【6】表达式:${...} 没有Vue好用呀,讲道理

**************************************************************************************************************************************************************

32、SpringMVC自动配置原理
【1】SpringBoot自动配置好了SpringMVC
【2】有以下配置
(1)自动配置了ViewResolver 视图解析器,根据方法返回值得到视图对象
(2)自动注册了Converter转换器、Formatter格式化器
(3)静态首页访问

**************************************************************************************************************************************************************

33、Springboot-web扩展与全面接管
【1】implements WebMvcConfigurer可以用于扩展SpringMVC的功能
【2】所以我们的配置也会起作用,这样就能实现拦截与指定页面放行

**************************************************************************************************************************************************************

35、国际化
【1】基本不怎么用到

**************************************************************************************************************************************************************

36、登录与拦截器
【1】如果报错4开头的,说明是客户端的错误
【2】拦截器,用到HttpSession中设置的属性是否为null来判断是否登录

**************************************************************************************************************************************************************

37、RESTful实验
【1】查询emp-GET、添加emp-POST、修改emp-PUT、删除emp-DELETE
【2】用请求方式来区分增删改查

**************************************************************************************************************************************************************

38、公共页面抽取
【1】而我传参都是用封装类,更清晰点,对象就是大总管
【2】公共部分就是导航页面,而我已经提炼出来一套框架了
【3】Thymeleaf也可以抽取,但是不需要了,后面前端统一用Vue+Element~

**************************************************************************************************************************************************************

39、点击的链接高亮
【1】我的哥,这也需要讲解吗...
【2】页面里面加判断真的不友好,很混乱,这一点Vue做的很好
【3】费了这么大劲,就和Vue+Element动个手指头一样...

**************************************************************************************************************************************************************

40、员工添加页面
【1】添加与修改都是两个步骤的,但是跳转没有Vue的体验好(Vue和自己实现的好像)

**************************************************************************************************************************************************************

41、员工添加功能实现
【1】mv = new ModelAndView("redirect:/welcome");
(1)重定向的知识redirect+需要跳转的页面名称
(2)日期配置处理

**************************************************************************************************************************************************************

42、员工修改、删除
【1】会用到form表单
【2】点击事件

**************************************************************************************************************************************************************

44、错误处理机制
【1】默认效果:404
【2】如何定义错误页面、如何定义错误数据--->让我想起VUE
【3】定义错误的Html,当发生错误时跳转即可

**************************************************************************************************************************************************************

46、嵌入式Servlet容器配置修改
【1】Springboot默认使用tomcat作为嵌如式的servlet容器
【2】修改定制servlet容器配置、server相关的就是
server.port=8002
【3】编写servlet容器配置类(不推荐)

**************************************************************************************************************************************************************

47、注册servlet三大组件
【1】extends HttpServlet{} 这个没必要了呀,Controller都实现了,技术过时真的快
【2】Servlet、Filter、Listener

**************************************************************************************************************************************************************

48、使用其他的嵌如式容器
【1】Jetty(长连接)、Undertow(不支持JSP)
【2】配置下pom.xml依赖即可
【3】排除与引入
(1)spring-boot-starter-web中排除exclusions-exclusion-spring-boot-starter-tomcat
(2)spring-boot-starter-undertow或spring-boot-starter-jetty

**************************************************************************************************************************************************************

49、嵌入式servlet自动配置原理
【1】代码底层说明this.tomcat.start

**************************************************************************************************************************************************************

51、使用外部servlet容器与支持JSP
【1】外部安装tomcat,为什么要支持JSP,这么老的技术...

**************************************************************************************************************************************************************

53、Docker概述
【1】Windows原生系统(必须自己装驱动与软件)
【2】Windows镜像系统(个性化配置的东西都在)
【3】这个和Docker的思路是一致的
【4】安装配置好的软件,打包成一个镜像。另外一台电脑把打包好的镜像运行就行
【5】运行中的镜像就叫做"容器"

**************************************************************************************************************************************************************

54、Docker核心概念
【1】docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统上)
【2】dcoker客户端(Client):连接docker主机进行操作(类似mysql的操作)
【3】docker仓库(Registry):保存打包好的镜像
【4】docker镜像(Images): 打包好的软件,存放在docker仓库中
【5】docker容器(Container):镜像启动后的实例就是一个容器,能独立运行的一个或一组应用
【6】使用docker的步骤:
(1)安装docker
(2)去dcoker仓库找到这个软件对应的镜像
(3)使用docker运行这个镜像,这个镜像就会生成一个docker容器
(4)对容器的启动停止,就是对软件的启动停止

**************************************************************************************************************************************************************

55、Linux环境准备
【1】VMWare、VirtualBox;
【2】按照移动硬盘提供的导入即可,启动虚拟机
【3】账号root 密码123456
【4】使用客户端xshell连接服务器
【5】设置虚拟机网络(自动选择就行了),设置好后重启下虚拟机网络
service network restart
【6】查看IP地址 ip addr
【7】用xshell、xftp连接即可
------------------------------------------------------------------------------------------------
【8】连接方式-桥接网卡-根据连接的是什么连接方式(来选择是有线网卡还是无线网卡),接入网线打勾!!!
【9】设置好网络后重启虚拟机 或 service network restart
【10】配置vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
BOOTPROTO=dhcp # 不是static重要重要重要!!!
ONBOOT=yes
IPADDR=192.168.0.205 # 重要重要重要!!! 根据windows网段做对应修改,用205是为了防止IP冲突!修改box热键是一路点击第一个
GATEWAY= 192.168.0.1 # 重要重要重要!!!根据windows网段做对应修改
【11】最后service network restart 或者执行systemctl restart network
------------------------------------------------------------------------------------------------
【12】虚拟机启动是从光盘启动,虚拟机设置为从硬盘优先启动就解决了。### 重要重要重要!!!
可以看到默认顺序是:软驱、光驱、硬盘,VirtualBox会一直找到光驱然后从光驱启动,不会直接启动装在硬盘上的系统。
------------------------------------------------------------------------------------------------
牛批!!! 运维之路就此开始!!!

**************************************************************************************************************************************************************

56、docker的安装、启动、停止-重要重要重要!!!这个玩意在终极篇不是更详细的描述吗?
【1】安装vim:yum -y install vim*
【2】检查内核版本,uname -r 要求必须是3.10以上
(1)查看安装过的包:yum list installed | grep docker
本机安装过的旧版本:docker.x86_64,docker-client.x86_64,docker-common.x86_64
(2)删除安装的Docker相关的软件包:
yum -y remove docker.x86_64
yum -y remove docker-client.x86_64
yum -y remove docker-common.x86_64
(1)查看内核版本【Docker要求Centos系统的内核版本高于3.10】
uname -r【本机的内核版本:3.10.0-327.el7.x86_64】
(2)把yum包更新到最新(时间可能有点长,慢慢等待...)
yum update
(3)安装需要的软件包。【yum-util提供yum-config-manager功能,另外两个是devicemapper驱动所需依赖】
yum install -y yum-utils device-mapper-persistent-data lvm2
配置下从阿里云下载:重要重要重要!!!
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(4)查看仓库的docker版本
yum list docker-ce --showduplicates | sort -r
(5)安装docker
yum -y install docker-ce-18.03.1.ce #安装指定版本的docker 重要重要重要~~~
(6)启动docker
systemctl start docker
systemctl enable docker #设置开机启动docker
systemctl stop docker #停止docker的命令
systemctl status docker #查看docker启动状态
(7)查看版本
docker version
(8)检测是否启动成功,可以使用search命令。docker search mysql(查看仓库里镜像,分为官方非官方、是否自动构建、点赞星数)

**************************************************************************************************************************************************************

57、常用镜像操作命令
【1】docker search xxx 搜索什么的镜像
【2】配置镜像加速器,这是我的阿里云的
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://vtaihzzp.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
【3】下载镜像指定版本 docker pull mysql:5.6
【4】docker images 查看所有镜像
【5】删除镜像 docker rmi 镜像ID(docker images可以查看)

**************************************************************************************************************************************************************

58、容器操作命令
【1】搜索镜像 docker search tomcat
【2】下载镜像 docker pull tomcat:8.0.52
【3】根据镜像启动容器
docker run --name my_tomcat -d tomcat:latest
【4】查看在运行的容器:docker ps
【5】停止运行中的容器:docker stop 容器ID(也可写容器的名字)
【6】查看所有容器 docker ps -a
【7】docker start 容器ID
【8】docker rm -f 容器ID(强制删除容器)
【9】使得启动的tomcat可以访问
docker run -d -p 8080:8080 tomcat:8.0.52
【10】进入容器里面
docker exec -it b326cb0d874c /bin/bash #进入虚拟centos的tomcat目录
【11】关闭防火墙:systemctl stop firewalld

**************************************************************************************************************************************************************

59、安装MySQL
【1】docker logs 容器ID,可以查看日志
【2】启动:docker run -p 3306:3306 --name my_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
【3】进入测试:docker exec -it 容器ID /bin/bash 
【4】命令搞的火大,重新安装了centos7
【5】果然是版本的问题,用了CENTOS7.ios后一路顺畅,一路歌唱,一路到远方呀,卧槽 牛批
【6】docker run --name my_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6 -v /opt/mysql:/etc/mysql/conf.d
把/opt/mysql挂载到容器的指定位置,这样改mysql的配置文件,只需要把配置文件放在/opt/mysql就行了
【7】docker run -p 3306:3306 --name my_mysql -e MYSQL_ROOT_PASSWORD=123456 -v /root/mysql:/etc/mysql/conf.d -d mysql:5.6

**************************************************************************************************************************************************************

60、数据库访问-概述
【1】Spring data:无论是SQL还是NOSQL都进行了统一处理
 <!--jdbc-->
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
 <!--mysql-->
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
</dependency>

**************************************************************************************************************************************************************

61、JDBC自动配置原理
【1】数据库配置
spring.datasource.url=jdbc:mysql://192.168.0.105:3306/mydb?useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
【2】测试类的使用
package com.day.study.controller;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Controller {
    @Autowired
    DataSource dataSource;
    @Test
    public void contextLoads() throws SQLException {
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }
}
【3】自定义数据源、schema可以创建数据库表
【4】数据库实操,不实用
package com.day.study.controller;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Controller {

    @Autowired
    DataSource dataSource;
    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    public void contextLoads() throws SQLException {
        List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from department");
        System.out.println(list.get(0));
    }
}

**************************************************************************************************************************************************************

62、整合Druid与配置数据源监控
【1】配置Maven
 <!--druid-->
  <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.8</version>
  </dependency>
【2】在properties指定数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
【3】启动测试类,发现切换成功
2022-07-17 13:56:48.548  INFO 12676 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
{id=1, name=人力资源}
【4】druid的其他属性与监控配置

**************************************************************************************************************************************************************

63、整合MyBatis
【1】引入依赖
 <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
【2】schema的用法可以简单了解下

**************************************************************************************************************************************************************

64、Mybatis注解版
【1】注解版挺舒服呀
package com.day.study.pojo;
import lombok.Data;
@Data
public class Department {
    private Integer id;
    private String name;
}
【2】注意@的使用
package com.day.study.mapper;
import com.day.study.pojo.Department;
import org.apache.ibatis.annotations.*;
// 指定这是一个操作数据库的Mapper
@Mapper
public interface DepartmentMapper {
    // 查的注解
    // 删的注解
    // 增的注解
    // 改的注解
}
【3】Controller
package com.day.study.controller;
import com.day.study.mapper.DepartmentMapper;
import com.day.study.pojo.Department;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DepartmentController {
    @Autowired
    DepartmentMapper departmentMapper;
    @GetMapping("/department/{id}")
    public Department selectDepartment(@PathVariable Integer id) {
        return departmentMapper.selectDepartmentById(id);
    }
    @GetMapping("/department")
    public Department insertDepartment(Department department) {
        departmentMapper.insertDepartment(department);
        return department;
    }
}
【4】请求
http://localhost:8080/department/1
http://localhost:8080/department?name=IT
【5】在启动类指定@MapperScan=XXX包,也能批量找到Mapper
【6】缺点是:长的SQL用注解写就嘎住了

**************************************************************************************************************************************************************

65、Mybatis-配置版
【1】写Mapper
package com.day.study.mapper;
import com.day.study.pojo.Employee;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface EmployeeMapper {
    Employee selectEmployeeById(Integer id);

    void insertEmployee(@Param("employee") Employee employee);
}
【2】写Mapper.xml
【3】指定xml的位置
# mybatis
mybatis.mapper-locations=classpath:mapper/*.xml
【4】使用
package com.day.study.controller;
import com.day.study.mapper.DepartmentMapper;
import com.day.study.mapper.EmployeeMapper;
import com.day.study.pojo.Department;
import com.day.study.pojo.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DepartmentController {
    @Autowired
    DepartmentMapper departmentMapper;
    @Autowired
    EmployeeMapper employeeMapper;
    @GetMapping("/department/{id}")
    public Department selectDepartment(@PathVariable Integer id) {
        return departmentMapper.selectDepartmentById(id);
    }
    @GetMapping("/department")
    public Department insertDepartment(Department department) {
        departmentMapper.insertDepartment(department);
        return department;
    }
    @GetMapping("/employee/{id}")
    public Employee selectEmployee(@PathVariable Integer id) {
        return employeeMapper.selectEmployeeById(id);
    }
}

**************************************************************************************************************************************************************

66、整合JPA概述
【1】原则和目的:简化数据库操作
【2】这好像MybatisPlus呀,不用关心实现,但是能实现增删改查
【3】但是还有RedisTemplate、MongoTemplate,还是有用的
【4】面向Spring Data编程 JPA就是操作数据库的(但是这个用MP代替了呀)

**************************************************************************************************************************************************************

67、整合JPA
【1】还是跟着了解下吧
【2】基于ORM思想 Object Relational Mapping
【3】真的没有MP好用,我的哥,没必要花太多心思
【4】还用hibernate呢 多老...

**************************************************************************************************************************************************************

68、Springboot原理-第一步:创建SpringApplication
【1】创建SpringApplication对象
【2】判断当前是否为Web应用
【3】找到配置spring.factories,然后保存起来
【4】从类路径下找到spring.factories配置
【5】从多个配置类中,找到有main方法的配置类

**************************************************************************************************************************************************************

69、Springboot原理-第二步:启动应用
【1】从spring.factories获取SpringApplicationRunListeners
【2】调用SpringApplicationRunListeners.starting()方法
【3】封装命令行参数
【4】准备环境
【5】创建环境完成回调
【6】调用SpringApplicationRunListeners.environmentPrepared()表示环境准备完成
【7】创建ApplicationContext(决定是web的ioc还是普通的ioc,若为web还会创建嵌入式tomcat)
【8】准备上下文ioc
【9】contextPrepared
【10】刷新容器,进行回调,启动完毕返回ioc容器

**************************************************************************************************************************************************************

70、Springboot原理-第三步:事件监听机制
【1】各种Listener的实现与重写,看什么时候执行的

**************************************************************************************************************************************************************

71、Springboot原理:自定义starter
【1】@Configuration自动配置类
【2】ConfigurationProperties
【3】EnableConfigurationProperties
【4】自动配置类spring.factories
【5】就是引入父工程包,这个dubbo已经实现过一次了

**************************************************************************************************************************************************************

72、结束概述
【1】前八章是基础
【2】后面八章整合是高级部分
【3】Springboot与各种技术的整合与使用
相关推荐
Kenny.志3 分钟前
2、Spring Boot 3.x 集成 Feign
java·spring boot·后端
不修×蝙蝠5 分钟前
八大排序--01冒泡排序
java
sky丶Mamba20 分钟前
Spring Boot中获取application.yml中属性的几种方式
java·spring boot·后端
数据龙傲天1 小时前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
带带老表学爬虫1 小时前
java数据类型转换和注释
java·开发语言
千里码aicood1 小时前
【2025】springboot教学评价管理系统(源码+文档+调试+答疑)
java·spring boot·后端·教学管理系统
彭于晏6891 小时前
Android广播
android·java·开发语言
程序员-珍2 小时前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发
liuxin334455662 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
2401_857297912 小时前
招联金融2025校招内推
java·前端·算法·金融·求职招聘