SpringBoot2基础

news2024/9/24 21:23:42

SpringBoot2

一、初始化项目

  • ①、创建project

    • image-20240104140310546
  • ②、构建maven项目

    • image-20240104140412813

    • image-20240104140442376

    • image-20240104140743820

    • 如果选项里没有8的,可以最顶上镜像换成阿里巴巴的:https://start.aliyun.com/

    • image-20240104140922464

    • image-20240104142110906

  • image-20240104152339060

  • 直接在main函数运行就行

二、SpringBoot入门

1、复制工程

  • 原则

    • 保留工程基础结构
    • 抹掉原始工程痕迹
  • 做个工程模板

    • 1、保留一个原始带controller的工程
    • 2、复制下来,把名字改成springboot2_0x_xxxxxxxxxxxx
    • image-20240104220255031
    • 3、修改文件,修改pom.xml文件
    • image-20240104220324695
    <artifactId>springboot2_test02</artifactId>
    <!--把这个名字改成springboot2_0x_xxxxxxxxxxxx-->
    
    • 删除pom.xml文件里面的name标签
    • 把文件删除只剩src和pom.xml文件
    • image-20240104220338698
    • 保留下来使用

2、基础配置

2.1、属性配置
  • 修改配置

    • properties

    • # 服务器的端口配置
      server.port=8080
      
  • yml格式**(主流)**

    • server:
        port: 8080
      
  • yaml

    • server:
        port: 8080
      
  • 当三个配置文件都存在时,properties > yml > yaml ,三者是共存叠加,并相互覆盖

2.2、yaml格式文件
2.2.1、优点
  • 容易阅读

  • 容易与脚本语言交互

  • 以数据为核心,重数据轻格式

  • 主流后缀为 .yml

2.2.2、yaml语法规则
  • 大小写敏感

  • 属性层级关系使用多行描述,每行结尾使用冒号结束

  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

  • #号 表示注释

  • country: china
    province: beijing
    city: beijing
    area: haidian
    
    user:
      username: zzj
      age: 18
    
    likes:   #数组
      - game
      - music
      - sleep
      
    users:							 #对象数组格式一
      - name: Tom
       	age: 4
      - name: Jerry
        age: 5
    users:							 #对象数组格式二
      -  
        name: Tom
        age: 4
      -   
        name: Jerry
        age: 5			    
    users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]	#对象数组缩略格式
    
2.2.3、读取yaml数据
  • //Rest模式
    @RestController
    @RequestMapping("/books")
    public class BookController {
    
        //读取yaml的单一数据
        @Value("${country}")
        private String country1;
        //读取对象数据
        @Value("${user.username}")
        private String name1;
        //读取数组里的数据
        @Value("${likes[1]}") //索引是从0开始的
        private String likes1;
        //读取数组对象里的数据
        @Value("${users[1].age}") //索引是从0开始的
        private String users1;
    
    
        @GetMapping
        public String getById(){
            System.out.println(country1);
            System.out.println(name1);
            System.out.println(likes1);
            System.out.println(users1);
            return "hello springboot";
        }
    
  • yaml文件中变量相互引用

    • baseDir: C:\window10
      
      temDir: C:\window\temp
      temDir1: ${baseDir}\temp  
      #下面这个引用了baseDir,当baseDir改变时,temDir1也会发生改变
      
    • image-20240105163241377

2.2.4、读取全部数据
  •     @Autowired   //使用自动装配将所有数据封装到一个对象 Environment 中
        private Environment env;  //这里面存着所有数据
    //通过Environment对象获取数据
    	System.out.println(env.getProperty("temDir1"));
        System.out.println(env.getProperty("user.username"));
        System.out.println(env.getProperty("likes[1]"));
    
2.2.5、指定数据封装读取
  • #当我们想要在yaml里面单独读取这个时
    user:
      username: zzj
      password: zzj0806
      age: 18
      sex:
  • 声明一个类,属性名和yaml里面的一样,用于封装yam文件里对应的数据

  • 定义为Spring管控的bean

  • 指定加载的数据

    • @Component
      @ConfigurationProperties(prefix = "user")
      public class MyUser {
      

3、整合第三方

3.1、Junit
  • @SpringBootTest(classes = JunitApplication.class)
    class Springboot2Test03JunitApplicationTests {
    	//注入你要测试的对象
        @Autowired
        private BookDao bookDao;
        @Test
        void contextLoads() {
            //执行要测试的对象对应的方法
            bookDao.save();
        }
    }
    
  • 注意:测试类所在的位置的路径 要 和main方法所在的引导类的路径一致,不一致时要进行额外操作

    • image-20240105214618637
  • 当二者路径不一样时,会导致测试类找不到引导类了,就找不到IOC容器,可以用@SpringBootTest来指定路径

    • image-20240105214831773
  • 总结

    1. 导入测试对应的starter
    2. 测试类使用@SpringBootTest修饰
    3. 使用自动装配的形式添加要测试的对象
    4. 测试类如果存在于引导类所在包或子包中无需指定引导类
    5. 测试类如果不存在于引导类所在的包或子包中需要通过classes属性指定引导类
3.2、mybatis
3.2.1、创建工程
  • 创建到这个位置时,和Junit不一样了

    • image-20240106193235698
  • 将application.propertis文件改成yml文件后缀,并配置数据库信息

    • #配置相关信息
      spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ssm
          username: root
          password: zzj0806
      
  • 创建数据库表tbl_book

    • image-20240106220743307
    • image-20240106220756835
  • 创建bookDao接口和实体类对象

    • public class Book {
          private Integer id;
          private String type;
          private String name;
          private String description;
      
          public Integer getId() {
              return id;
          }
      
    • @Mapper
      public interface BookDao {
          @Select("select * from tbl_book where id = #{id}")
          public Book getById(Integer i);
      }
      
  • 写测试方法

    • @SpringBootTest
      class Springboot2Test04MybatisApplicationTests {
      
          @Autowired
          private BookDao bookDao;
      
          @Test
          void contextLoads() {
              System.out.println(bookDao.getById(6));
          }
      
      }
      
  • 总结

    1. 整合操作需要勾选MyBatis技术,也就是导入MyBatis对应的starter

    2. 数据库连接相关信息转换成配置

    3. 数据库SQL映射需要添加@Mapper被容器识别到

    4. MySQL 8.X驱动强制要求设置时区

      • 修改url,添加serverTimezone设定
      • 修改MySQL数据库配置
    5. 驱动类过时,提醒更换为com.mysql.cj.jdbc.Driver

3.3、mybatis-plus
  • <!-- mybatis-plus -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.5.4</version>
            </dependency>
    
  • yml的配置一样

    • #配置相关信息
      spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ssm
          username: root
          password: zzj0806
      
  • bookDao不一样

    • //不用写sql语句和方法了,MP里面有方法
      @Mapper
      public interface BookDao extends BaseMapper<Book> {
      
      }
      
  • 测试的方法,不是自己的写的,是MP里面内置的

    • @SpringBootTest
      class Springboot2Test05MybatisPlusApplicationTests {
      
          @Autowired
          private BookDao bookDao;
      
          @Test
          void contextLoads() {
              System.out.println(bookDao.selectById(2));
          }
      
      }
      
3.4、druid
  • <!-- pom.xml导入druid的坐标 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.20</version>
    </dependency>
    
    
  • #配置druid数据源,就修改配置信息即可
    spring:
      datasource:
        druid:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ssm
          username: root
          password: zzj0806
    

4、整合案例

4.1、项目架构
  • image-20240107215848280
4.2、yml配置信息
  • image-20240107215929645
4.3、dao层
  • 使用lombok快速初始化实体类对象
    • image-20240107220051124
  • 创建bookDao接口,使用了mybatis-plus快速开发—继承baseMapper
    • image-20240107220131100
4.4、service层
  • 创建bookService接口,并使用mybatis-plus快速开发—继承 IService

    • image-20240107220345461
  • 创建实现类 bookServiceImp,并使用mybatis-plus快速开发----继承 ServiceImpl,并实习bookService接口

    • image-20240107220506274
4.5、controller层
  • 创建类 R 来实现传输两层数据,一层状态flag,一层数据data
    • image-20240107220723603
  • 创建controller类,并使用rust风格,并采用两层数据返回前端
    • image-20240107220845732
    • image-20240107220907358
  • 因为使用了分页功能,要创建一个mybatis-plus的分页拦截器
    • image-20240107221024457
4.6、前端

题注不太会,稍稍自动生成一下

  • image-20240107221148008

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

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

相关文章

Java SE入门及基础(4)

Java 中的数据类型 1.数据的概念 数据就是信息的符号表示。 比如&#xff1a; 小米手机 红米 10 元 5 年 刘德华 帅 50 188 富豪 2.数据类型 生活中我们常见的数据类型&#xff1a; Java中的数据类型分为 基本数据类型 和 引用数据类型 两大类 Java 中…

Java学习苦旅(二十四)——Java中的内部类

本篇博客将讲解Java中的内部类。 文章目录 内部类本地内部类实例内部类静态内部类匿名内部类 结尾 内部类 本地内部类 本地内部类是定义在方法当中的类。例如&#xff1a; public class Test {public void fun() {class Test {public int a;}} }本地内部类只能在当前方法中…

大数据毕业设计:新闻情感分析系统 舆情分析 NLP 机器学习 爬虫 朴素贝叶斯算法(附源码+论文)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

基于SSM的游戏资源管理系统+vue论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

Linux第11步_解决“挂载后的U盘出现中文乱码”

学习完“通过终端挂载和卸载U盘”&#xff0c;我们发现U盘下的中文文件名会出现乱码&#xff0c;现在讲解怎么解决这个问题。其实就是复习一下“通过终端挂载和卸载U盘”&#xff0c;单独讲解&#xff0c;是为了解决问题&#xff0c;一次性搞好&#xff0c;我们会不长记性。 在…

Mac M1 Parallels Debian10 Install Gitlab

安装Debian10 Debian10百度网盘下载链接: https://pan.baidu.com/s/1ovBWIhTpljIVOxEkjJQjkQ?pwd6666 提取码: 6666 –来自百度网盘超级会员v7的分享 # 1.install # 2.localtion: 中国 → 语言: 中文&#xff08;简体&#xff09; # 3.网络 默认、自动配置 # 4.主机名域名(随意…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第二天-Linux开发板外设练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

总420+,专业120+南京大学851信号与系统电子信息考研经验通信,电子信息

今年考研数学130&#xff0c;专业课120&#xff0c;总分420顺利被南京大学电通录取&#xff0c;梦圆南大&#xff0c;这一年的复习有过迷茫&#xff0c;有过犹豫&#xff0c;最后都坚持过来了&#xff0c;总结一下自己的复习经验&#xff0c;希望对大家有所帮助。数学 5-8月数…

消除字母Scratch-第14届蓝桥杯Scratch省赛真题第6题

6. 消除字母&#xff08;100分&#xff09; 编程实现&#xff1a;消除字母。 具体要求&#xff1a; 1). 点击绿旗&#xff0c;角色、背景如图所示&#xff08;创建1个字母表&#xff0c;并存入26个字母&#xff09;&#xff1b; 2). 等待1秒&#xff0c;阿拉蕾说&#xff1…

深入C++继承:面向对象编程的核心概念

C是一种功能强大的编程语言&#xff0c;支持面向对象编程&#xff08;OOP&#xff09;范式。在面向对象编程中&#xff0c;继承是一种重要的概念&#xff0c;它使得我们能够创建具有层次结构的类&#xff0c;并实现代码的重用和扩展。本文将深入探讨C中的继承机制&#xff0c;介…

在drawio中使用BPMN2.0绘制详细的业务流程图和编排模型

在drawio中使用BPMN2.0绘制详细的业务流程图和编排模型 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功…

freertos——任务通知知识总结与任务通知模拟及信号量实验、消息邮箱实验、事件标志组实验

1.任务通知概念 任务通知&#xff1a;用来通知任务的&#xff0c;任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值&#xff0c;不需要另外创建一个结构体可以直接接受别人发过来的通知 2.任务通知的优势及劣势 任务通知的优势&#xff1a; 效率更高 &#xff…

基于Python+Django,开发一款房屋租赁系统

学习文档 学习过程中&#xff0c;遇到问题可以咨询作者 功能介绍 平台采用B/S结构&#xff0c;后端采用主流的PythonDjango进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括&#xff1a;首页、房屋详情页、用户中心模块。…

卫星互联网与MEC融合方案研究

卫星互联网与MEC融合方案研究 作者&#xff1a;温特、王立中、司鹏、颜明明、马恬、郭伊蒙 中国卫通集团股份有限公司 本文首发&#xff1a;第十九届卫星通信学术年会 摘 要&#xff1a;在卫星互联网中引入移动边缘计算(MEC)技术可有效提高用户体验质量&#xff0c;降低运营成…

关掉RHEL 8安装软件包订阅注册

关掉RHEL订阅注册&#xff1a;&#xff08;关掉之后&#xff0c;在YUM的时候就不会有提示注册的信息了&#xff09; cd /etc/yum/pluginconf.d/ ls vim subscription-manager.conf可以看到enabled1&#xff0c;这个数值表明此时是允许订阅注册的。 此时安装软件包时&#xff…

kubectl的插件安装工具krew

最近得知一个kubectl插件安装工具&#xff0c;叫做krew。 官网地址是&#xff1a;Krew – kubectl plugin manager 安装krew 按照官网的做法&#xff0c;一直安装失败&#xff0c;于是拆解步骤&#xff0c;一步一步下载离线安装。 1、下载krew.yaml 地址&#xff1a;https:…

thinkphp6实现简单定时任务

thinkphp6实现定时任务 创建定时任务文件定义指令编写Test.php代码运行测试 创建定时任务文件 Test类名根据自己的需要修改 php think make:command Test testcommand文件夹在app目录下没有需要自己创建 运行上面的命令后会在command下 多一个Test.php文件 定义指令 在conf…

Stable Diffusion 系列教程 - 6 Dreambooth及训练

Stable-Diffusion、Imagen等文生图大模型已经具备了强大的生成能力&#xff0c;假设我们的Prompt为 [Cyberpunk Style]&#xff0c;SD或许能很快画出赛博朋克风格的一幅画。但你作为一个不知名的人&#xff0c;不能奢求SD在训练的时候把你自己想要的风格也加进去吧&#xff1f;…

爬虫实战3-js逆向入门:以黑猫投诉平台为例

目录 引言 逆向过程 步骤一&#xff1a;找到参数对应js代码位置 步骤二&#xff1a;分析参数值的生成逻辑 步骤三&#xff1a;确定函数u的具体内容 步骤四&#xff1a;使用python实现请求参数的生成 投诉信息爬取 引言 下面是一张主流网页加密方法的思维导图&#xff0…

Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行

环境: Rustdesk1.19 问题描述: Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行 解决方案: 1.查看源代码 pub async fn start_all() {crate::hbbs_http::sync::start();let mut nat_tested = false;check_zombie()