springboot+mybatisplus

news2025/3/31 1:09:25

1.什么是springboot?

Spring Boot是一个用于快速构建Spring应用程序的框架。它旨在帮助开发人员快速搭建Spring框架,减少配置和繁琐的工作。Spring Boot继承了原有Spring框架的优秀基因,使Spring在使用中更加方便快捷。 在Spring Boot中集成ActiveMQ,需要导入相应的starter依赖。Spring Boot并不是用来替代Spring的解决方案,而是和Spring框架紧密结合,旨在提升Spring开发者的体验.

SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。 另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

2.springboot的主要优点

(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

(2)内嵌Tomcat或Jetty等Servlet容器;

(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

(4)尽可能自动配置Spring容器;

(5)提供准备好的特性,如指标、健康检查和外部化配置;

(6)绝对没有代码生成,不需要XML配置。

3.如何使用springboot搭建工程

3.1第一种快速搭建-----必须联网

使用maven来搭建。

 3.2忽略文件

如果一开始创建显示很多可以设置忽略一些无用的

3.3 编写controller代码


@RestController
@RequestMapping("/hello")
public class   HelloController {
    @GetMapping("/index") //java对象--转换为json必须引入jackson
    public Map<String,Object> index(){
        Map<String,Object> map=new HashMap<>();
        map.put("name","zzh");
        map.put("age",15);
        map.put("sex","ლ(′◉❥◉`ლ)");
        return map;
    }

    
}

 编写完代码发现,Java对象在转为json时需要加json依赖,但是我们没有导入json依赖是因为starter有,这就体现出了springboot的优点,省事!

运行主启动类

注意: controller包必须在主启动类所在包下。 默认扫描的包为主启动类所在的包。

手动输入地址打印结果

 

3.4注意: controller包必须在主启动类所在包下。 默认扫描的包为主启动类所在的包。

1.如果把主启动类放在了test包下,那么扫描路径就是com.aaa.test,controller包就访问不到主启动类了

 2. 解决: @ComponentScan(basePackages={ , , ...})

加上controller层和实体层的路径

 

3.5springboot的相关配置

1.parent 

相当于把父类的一些依赖继承到子类里 点进去看

 <!--parent: 继承-->
    <!--springBoot版本高,后期jdk版本也要对应 springCloud 以及springCloud alibaba-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

父类又继承了一个父类 再点进去看

 2.properties

声明jar包的版本号--好处:方便jar版本的统一管理

 举个例子:

比如说现在spring的配置是5.2.12,一旦要发生改变,那么下边的其他版本号都需要修改

3.使用 properties + version 统一版本

好处是方便了统一管理,而且发生版本的修改,我们只需要修改上面的版本号就可以了,非常方便,

引入的时候使用${}引用相对应的版本号

4. dependencyManagement

只负责jar版本的管理,不负责jar的下载.以后springboot工程在使用jar时,只需要指定jar的坐标无需指定版本号

好处:把版本都交给父类,让父类统一管理,做到jar包统一,加上后就不会去下载jar包

注意:引入mysql

引入父类mysql的时候,spingBoot版本

2.6引用的是mysql-connector-java

2.7开始才是  mysql-connector-j

只需要引坐标,无需引版本号

注意:父类没有的需要自己下载版本号

如果非要用自己下载的版本号,那么优先会用自己的版本

 


 

5. 修改端口号和上下文路径

#内置tomcat默认端口号为8080---修改端口号
server.port=你自己要修改的端口号
#工程的上下文路径
server.servlet.context-path=/你自己要修改的上下文

3.6第二种搭建springBoot  了解即可

没有网---只能用本地的时候

1.创建一个maven工程

2.pom引入依赖

 3.创建一个springboot配置文件--application.properties

 4. 创建主启动类

 编写controller测试

结果

 

 什么情况下会用第二种?

银行、监狱 等项目

4.java读取springboot配置文件中的内容

4.1springboot配置文件的种类

springboot 提供了两种格式的配置文件,作用都一样,内容格式不同,一般用第二种多

第一种:属性文件 后缀: properties

#内置tomcat默认端口号为8080---修改端口号
server.port=8888
#工程的上下文路径
server.servlet.context-path=/aaa

第二种:yaml文件 后缀:yml

注意:要有缩进关系,而且内容和键之间要有空格

#端口号
server:
  port: 8080
  servlet:
    context-path: /bbb

 没有会空格报错

如果上面两个配置文件的内容相同并且同时存在:以properties配置为主,如果上面配置文件的内容不同,都能用

4.2如何读取springboot配置文件中的内容

比如我们使用OSS完成文件上传时,之前把OSS相关的内容密钥,bucket等信息都写在java代码,在实际开发中肯定不允许。因为属于硬编码。以后项目上线后密钥和bucket等信息都需要改为客户。都需要修改了源码。 以后写都应该提取到配置文件中。我们掌握如何java代码读取配置文件中的内容。

比如:

你打包的时候,打开都是class文件

而你的配置不是,可以直接去修改客户的配置

在spring中提供了两个方式读取:

第一种:@Value

特点:每次只能获取一个值

 思考: 它只能一个一个的读取。能否封装一个实体类,把读取的内容放入实体类属性中。

第二种:@ConfigurationProperties

1. application.properties自定义属性

区别在于一下可以读到多个属性

#自定义属性
student.name=zzh3.0
student.age=666

@Data
@Component //该类对象的创建交于spring容器来管理,spring帮你创建Student类对象-----等价于@Service  @Controller
@ConfigurationProperties(prefix = "student")//读取配置文件中前缀为student的,如果属性能对上就会赋值配置文件中的属性,不加就不没有值
public class Student {
    private String name;
    private Integer age;
}
  @Autowired
    private Student student;
    @GetMapping("getStudent")
    public Student getStudent(){

        return student;
    }

 

  

2.注意:

如果在这里定义一个数组

第一种@Value只能读取配置文件中基本类型和字符串类型,读取数组就会报错。

第二种@ConfigurationProperties可以读取任意类型的值

3.application.yml格式自定义属性

测试

在这里推荐个网址可以自动yml和properties属性互相转换

在线yaml转properties-在线properties转yaml-ToYaml.com

5. springboot注册web组件

servlet:-----(1)定义一个Servlet类 (2)重写doGet和doPost方法 (3)把自定义的serlvet注册到web.xml文件。

filter: ----(1)定义一个filter类 (2)dofilter方法 (3)把自定义的过滤器注册到web.xml

思考: 我们现在的springboot工程没有web.xml文件了。

如何把自定义或者第三方的过滤器注册到tomcat容器中。

 5.1 注册自定义的Servlet

(1)自定义一个Servlet并重写doGet和doPost方法

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行了doGet方法");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行了doPost方法");
    }
}

(2)把自定义的Servlet注册到内置tomcat中。

@Configuration//这是一个配置类,替代以前的配置文件xml。配置类本身也是容器中的组件
public class MyConfiguration {
    @Bean//相当于spring配置文件中<bean class="">把该方法返回的对象交给与spring容器来管理
            /*servlet注册器*/
    public ServletRegistrationBean<Servlet> registrationBean(){
        ServletRegistrationBean<Servlet> registrationBean=new ServletRegistrationBean<>();//创建servlet注册器交给Bean
        registrationBean.setServlet(new MyServlet());//把自己的servlet放进去
        registrationBean.setName("my");//放名字
        registrationBean.addUrlMappings("/my");//添加路径 http://localhost:8080/my
        return registrationBean;//返回
    }
}

(3)测试

5.2 注册自定义过滤器

(1)创建一个过滤器类并重写相应的方法。


/*自定义过滤器*/
public class MyFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("经过了过滤器");
        filterChain.doFilter(servletRequest,servletResponse);//过滤器放行
    }
}

(2)把自定义的过滤器注册到内置的tomcat中  

//自定义过滤器
    @Bean
    public FilterRegistrationBean<Filter> registrationBean2(){
        FilterRegistrationBean<Filter> registrationBean=new FilterRegistrationBean<>();
        registrationBean.setFilter(new MyFilter());
        registrationBean.setName("myFilter");
        registrationBean.addUrlPatterns("/*","/my02");
        return registrationBean;
    }

(3)测试

没有返回结果是因为没有放行

放行

/*自定义过滤器*/
public class MyFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("经过了过滤器");
        filterChain.doFilter(servletRequest,servletResponse);//过滤器放行
    }
}

6. springboot自动包扫描的原理

 (1)@SpringBootApplication 注解

查看@SpringBootApplication注解---它是一个复合注解

(2)@EnableAutoConfiguration注解

它有两层含义

第一层含义:自动包扫描

第二层含义:自动配置

查看@EnableAutoConfiguration注解---它也是复合注解

 (3)@AutoConfigurationPackage注解

查看@AutoConfigurationPackage注解

(4)Registrar.class

查看Registrar.class并打上断点

再查看getPackageNames并打上断点

 

启动主启动类

可以发现我们的包名是com.aaa

对比主启动类的的位置确实是在com.aaa

 (5) 自定义扫描包@ComponentScan

如果我们把主启动类移到其他层下

但是我们就访问不到controller层,因为默认就成了扫描servlet里面的controller,但是servlet没有,只有com.aaa下有controller的包和controller层

加上@ComponentScan注解指定controller和实体类包的位置,对比的是springmvc的配置

就可以访问到了

7.springboot自动装配原理

我们在使用springboot时,并没有像之前项目加载我们的前端控制DispatcherServlet,也没有写编码过滤器。但是springboot可以完成请求以及编码的设置。

原理: 主启动类上的@SpringBootApplication注解上,而该注解是一个复合组件,而在复合注解中存在@EnableAutoConfiguration, 这个@EnableAutoConfiguration注解也是一个复合注解,包含@Import---而@Import注解导入一个AutoConfigurationImportSelector 【自动配置选择器】,在该类中存在一个方法getAutoConfigurationEntry --作用:得到自动配置类的实体。而这些自动配置类会完成相应的自动装配。

(1) 查看主启动类

(2) 查看@EnableAutoConfiguration注解

(3) 查看AutoConfigurationImportSelector.class

(4)在getAutoConfigurationEntry打上断点

 随着springboot版本不同,默认加载的数量也不同

8. springboot整合数据源--连接数据库

连接我们的数据库----druid数据源----默认的数据源

 1.设置默认的数据源

(1)引入相关依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
         <!--mysql驱动  springBoot 2.7开始是-j  2.6才是-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

(2) 如果没有配置会报错

springboot自动配置会加载jdbc的自动配置类---读取springboot配置文件中数据源的信息,从而完成数据源的自动配置,如果没有配置就会是下面的报错得信息

(3)原因

在获取自动配置类上打上断点会发现自动装配了DataSource数据源

按两下shift键全局搜索DataSourceAutoConfiguration配置类

@EnableConfigurationProperties会加载数据源的属性,查看DataSourceProperties.class配置类

读取配置文件中前缀为spring.datasource的内容,没有就会抛出8.1.(2)图片的异常

(4)application配置文件中配置数据源.

#配置数据源---默认数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=(你数据库的账户)
spring.datasource.password=(你数据库的密码)
spring.datasource.url=jdbc:mysql://localhost:3306/(你数据库的名)?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true

(5)测试

@SpringBootTest
class Qy168Springboot03ApplicationTests {

    @Autowired
    private DataSource dataSource;//springboot帮你完成数据源的自动装配,自动加载到容器中
    @Test
    void contextLoads() throws SQLException {
        System.out.println(dataSource.getConnection());//没有就会报空
    }

}

输出结果

 2.设置Druid的数据源

(1)引入相关依赖

        <!--druid数据源的依赖,父类没有提供版本管理,需要自己加版本号-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.1</version>
        </dependency>

(2)修改配置文件

#配置数据源---加了druid的数据源
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=(你数据库的账户)
spring.datasource.druid.password=(你数据库的密码)
spring.datasource.druid.url=jdbc:mysql://localhost:3306/(你数据库的名)?serverTimezone=Asia/Shanghai
#初始化的连接池的个数
spring.datasource.druid.initial-size=5
#最多连接数量
spring.datasource.druid.max-active=10
#等待的连接数量---超出最多连接数就会等待
spring.datasource.druid.max-wait=5

(3)测试

默认放了五个连接数

9.springboot整合mybatis框架

ssm===>spring框架需要配置SqlSesssionFactoryBean对象,还有配置DAO接口的代理实现类。

springboot会自动配置SqlSesssionFactoryBean对象,必须引入starter依赖

(1)引入依赖

       <!--mybatis和springBoot整合的依赖 里面有jdbc的依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

 整合的依赖里面有jdbc的依赖,就可以不加jdbc的依赖,加上也不会报错,优先使用你加jdbc的依赖

 

(2) 创建实体类

package com

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

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

相关文章

《TypeScript 面试八股:高频考点与核心知识点详解》

“你好啊&#xff01;能把那天没唱的歌再唱给我听吗&#xff1f; ” 前言 因为主包还是主要学习js&#xff0c;ts浅浅的学习了一下&#xff0c;在简历中我也只会写了解&#xff0c;所以我写一些比较基础的八股&#xff0c;如果是想要更深入的八股的话还是建议找别人的。 Ts基…

SICAR 标准 KUKA 机器人标准功能块说明手册

功能块名称:LSicar_Robot_KUKA_PrD 目录 1. 概述 2. 功能说明 2.1 程序控制 2.2 状态监控 2.3 报警与故障处理 2.4 驱动控制 3. 关键参数说明 4. 操作步骤指南 4.1 初始化配置 4.2 运行控制 4.3 状态监控 5. 常见故障处理 6. 注意事项 附录1:程序段索引 附录…

linux中如何修改文件的权限和拥有者所属组

目录标题 chmod指令八进制形式权限修改文件拥有者所属组的修改umask有关内容 chmod指令 chmod指令可以用来修改人员的权限其形式如下&#xff1a; u代表的是拥有者&#xff0c;g代表的是所属组&#xff0c;o代表的是其他人&#xff0c;a表示所有人&#xff0c;如果你想增加权…

掌握Linux项目自动化构建:从零入门make与Makefile

文章目录 前言&#xff1a; 一、初识自动化构建工具1.1 什么是make/Makefile&#xff1f;1.2 快速体验 二、深入理解核心机制2.1 依赖关系与依赖方法2.2 伪目标的妙用2.3 具体语法a.makefile的基本雏形b.makefile推导原则&#xff01; 三、更加具有通用型的makefile1. 变量定义…

Jenkins 配置python项目和allure

Jenkins新建项目 新建ry-api-auto-test。 添加项目描述&#xff0c;选择gitee令牌。 源码管理&#xff0c;设置仓库地址和凭证。参考我上一篇文章的链接&#xff1a;配置gitee私人令牌和凭证 构建步骤&#xff0c;因为我Jenkins部署在Windows&#xff0c;因此选择batch。…

vue3:十一、主页面布局(进入指定菜单页面,默认锁定到左侧菜单)

一、效果 直接进入home页面&#xff0c;直接展开对应的菜单项 二、具体实现 1、菜单容器增加默认选中变量 在菜单容器中将默认展开菜单default-openeds修改为默认选中菜单default-active 2、引入useRoute方法 引入该方法为了获取当前页面的路径 import { useRoute } from …

【蓝桥杯】每日练习 Day13

前言 今天做了不少题&#xff0c;但是感觉都太水了&#xff0c;深思熟虑之下主播决定拿出两道相对不那么水的题来说一下&#xff08;其实还是很水&#xff09;。 两道问题&#xff0c;一道是日期问题&#xff08;模拟&#xff09;&#xff0c;一道是区间合并问题。 日期差值 …

【Docker系列七】Docker Compose 命令详解

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【AI学习】Transformer 模型

1,概念 是一种基于自注意力机制(Self-Attention Mechanism)的深度学习架构,在自然语言处理、计算机视觉等多个领域都有着极为重要的应用。 2,基本结构 1)编码器(Encoder) 通常由多个相同的编码器层堆叠而成。 每个编码器层包含了多头自注意力机制、前馈神经网络以及…

大数据学习栈记——HBase操作(shell java)

本文介绍HBase在shell终端的常见操作以及如何利用java api操作HBase&#xff0c;操作系统&#xff1a;Ubuntu24.04 参考&#xff1a; https://blog.51cto.com/u_16099228/8016429 https://blog.csdn.net/m0_37739193/article/details/73618899 https://cloud.tencent.com/d…

智能制造:物联网和自动化之间的关系

工业自动化 工业自动化是机器设备或生产过程在不需要人工直接干预的情况下按预期的目标实现测量、操纵等信息处理和过程控制的统称。 在传统的工业生产过程中&#xff0c;很多环节需要人工操作&#xff0c;比如设备调试、生产监控、质量检测等。然而&#xff0c;随着工业自动化…

Axure项目实战:智慧城市APP(三)教育查询(显示与隐藏交互)

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;教育查询 主要内容&#xff1a;教育公告信息&#xff0c;小升初、初升高、高考成绩查询&#xff1b;教育公告信息为传统的信息页面&#xff0c;小升…

01 设计模式和设计原则

类设计原则&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;&#xff1a;实现类要职责单一开闭原则&#xff08;Open Close Principle&#xff0c;OCP&#xff09;&#xff1a;对扩展开放&#xff0c;对修改关闭里氏替换原则…

Github 2025-03-23 php开源项目日报Top10

根据Github Trendings的统计,今日(2025-03-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10TypeScript项目1JavaScript项目1Shell项目1Laravel: 以优雅语法简化Web开发 创建周期:4028 天开发语言:PHP协议类型:MIT LicenseSt…

AIMB-ASMB-788B(PPC-MB-620B)RAID驱动安装(笔记版)

创建RAID后安装系统时看不到磁盘信息&#xff0c;以下案例是安装windows10系统时如何安装主板RAID驱动&#xff0c;由于是笔记版不做过多介绍。 RAID驱动链接&#xff1a;https://advdownload.advantech.com.cn/productfile/Downloadfile1/1-2MAHDQD/AIMB-788_788E_RAID_AHCI_…

深度分页优化思路

深度分页优化思路 思考以下问题 查询以下SQL的流程是怎么样的呢&#xff1f; 为什么只查询10条数据需要7秒&#xff1f; # 查询时间7秒 SELECT * FROM user ORDER BY age LIMIT 1000000, 10问题分析 为什么分页查询随着翻页的深入&#xff0c;会变得越来越慢。 其实&#xff0…

K8S学习之基础五十四:jenkins新建测试流水线

jenkins新建测试流水线 新建任务 node(testak) {stage(第1步:从gitee上下载源代码) {git url: "https://gitee.com/akang007/jenkins-sample"script {build_tag sh(returnStdout: true, script: git rev-parse --short HEAD).trim()}}stage(第2步&#xff1a;基…

HarmonyOS NEXT(九) :图形渲染体系

HarmonyOS NEXT&#xff08;九&#xff09; &#xff1a;图形渲染体系 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 HarmonyOS NEXT&#xff0…

SQLAlchemy关键词搜索技术深度解析:从基础过滤到全文检索

在数据驱动的应用开发中&#xff0c;基于关键词的模糊查询是常见的业务需求。SQLAlchemy作为Python生态中最流行的ORM框架&#xff0c;提供了多种实现关键词搜索的技术方案。本文将从性能、适用场景和技术复杂度三个维度&#xff0c;系统对比分析SQLAlchemy中关键词搜索的最佳实…

ES数据过多,索引拆分

公司企微聊天数据存储在 ES 中&#xff0c;虽然按照企业分储在不同的ES 索引中&#xff0c;但某些常用的企微主体使用量还是很大。4年中一个索引存储数据已经达到46多亿条数据&#xff0c;占用存储3.1tb, ES 配置 由于多一个副本&#xff0c;存储得翻倍&#xff0c;成本考虑…