SpringBoot2基础

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: haidianuser:username: zzjage: 18likes:   #数组- game- music- sleepusers:							 #对象数组格式一- name: Tomage: 4- name: Jerryage: 5
    users:							 #对象数组格式二-  name: Tomage: 4-   name: Jerryage: 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;@GetMappingpublic String getById(){System.out.println(country1);System.out.println(name1);System.out.println(likes1);System.out.println(users1);return "hello springboot";}
    
  • yaml文件中变量相互引用

    • baseDir: C:\window10temDir: 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: zzjpassword: zzj0806age: 18sex:
  • 声明一个类,属性名和yaml里面的一样,用于封装yam文件里对应的数据

  • 定义为Spring管控的bean

  • 指定加载的数据

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

3、整合第三方

3.1、Junit
  • @SpringBootTest(classes = JunitApplication.class)
    class Springboot2Test03JunitApplicationTests {//注入你要测试的对象@Autowiredprivate BookDao bookDao;@Testvoid 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.Driverurl: jdbc:mysql://localhost:3306/ssmusername: rootpassword: 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 {@Autowiredprivate BookDao bookDao;@Testvoid 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.Driverurl: jdbc:mysql://localhost:3306/ssmusername: rootpassword: zzj0806
      
  • bookDao不一样

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

    • @SpringBootTest
      class Springboot2Test05MybatisPlusApplicationTests {@Autowiredprivate BookDao bookDao;@Testvoid 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.Driverurl: jdbc:mysql://localhost:3306/ssmusername: rootpassword: 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.mzph.cn/news/604304.shtml

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

相关文章

K8s-应用数据

应用数据 1 应用数据解析 k8s应用数据类型和步骤解析 k8s如何使用数据功能 k8s使用各种数据类型的配置 2 应用数据实践 emptyDir实践 资源对象文件内容 apiVersion: v1 kind: Pod metadata:name: sswang-emptydir spec:containers:- name: nginx-webimage: kubernetes-reg…

Java线程同步机制

第1章&#xff1a;引言 大家好&#xff0c;我是小黑。今天咱们来聊聊并发编程&#xff0c;咱们经常听说并行、并发这些词&#xff0c;特别是在处理大量数据、高用户负载时&#xff0c;这些概念就显得尤为重要了。为什么呢&#xff1f;因为并发编程可以帮助咱们的应用程序更有效…

在Raspberry Pi Zero W中配置TFT LCD Framebuffer驱动

TFT LCD Framebuffer驱动配置 文章目录 TFT LCD Framebuffer驱动配置1、硬件准备2、软件配置2.1 启用SPI驱动2.2 TFT LCD设备驱动树配置 本文将以ILI9341 LCD为例&#xff0c;将详细介绍如何配置TFT LCD的Framebuffer驱动。 1、硬件准备 Raspberry Pi Zero W开发板一个&#x…

[AutoSar]基础部分 RTE 06 对runnable的触发和SWC的影响

目录 关键词平台说明一、runnable二、RTE的event2.1Mode类型event2.2周期触发类型2.3 数据交互触发 三、internal runnable value四、专属运行区指定五、per_instance memory 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商T…

UG装配-动画制作

制作装配动画用到的命令是序列 制作动画前&#xff0c;先将所有约束取消 当我们在装配导航器中装配好产品后&#xff0c;可以在序列中编辑生产动态装配或爆炸动画&#xff1b; 需要注意的是&#xff0c;如果是希望创建装配或爆炸动画&#xff0c;需要先将所有约束取消&#…

mac版viso软件 流程图软件omnigraffile

OmniGraffle 是一款由 The Omni Group 开发的绘图工具&#xff0c;主要用于创建各种类型的图表、流程图、组织结构图、网站地图等。它提供了丰富的绘图工具和功能&#xff0c;包括形状、线条、文本、颜色、样式等&#xff0c;可以帮助用户轻松地创建出精美的图表和图形。 OmniG…

Micro-app 微前端框架demo介绍

Micro-app 框架 1、框架安装 npm i micro-zoe/micro-app --save2、子应用对应的view页面 <template><div><!-- name(必传)&#xff1a;应用名称url(必传)&#xff1a;应用地址&#xff0c;会被自动补全为http://localhost:3000/index.htmlbaseroute(可选)&…

react+AntDesign 之 pc端项目案例

1.环境搭建以及初始化目录 CRA是一个底层基于webpack快速创建React项目的脚手架工具 # 使用npx创建项目 npx create-react-app react-jike# 进入到项 cd react-jike# 启动项目 npm start2.安装SCSS SASS 是一种预编译的 CSS&#xff0c;支持一些比较高级的语法&#xff0c;…

3D点云上的深度学习综述

1 Title Deep Learning for 3D Point Clouds: A Survey&#xff08;Yulan Guo; Hanyun Wang; Qingyong Hu; Hao Liu; Li Liu; Mohammed Bennamoun&#xff09;【IEEE Transactions on Pattern Analysis and Machine Intelligence 2020】 2 Conclusion Deep learning on point…

Android开发编程从入门到精通,安卓技术从初级到高级全套教学

一、教程描述 本套教程基于JDK1.8版本&#xff0c;教学内容主要有&#xff0c;1、环境搭建&#xff0c;UI布局&#xff0c;基础UI组件&#xff0c;高级UI组件&#xff0c;通知&#xff0c;自定义组件&#xff0c;样式主题&#xff1b;2、四大组件&#xff0c;Intent&#xff0…

(九)One-Wire总线-DS18B20

文章目录 One-Wire总线篇复位和应答读/写0&#xff0c;1 DS18B20篇原理图概述最主要特性几个重要的寄存器&#xff08;部分要掌握&#xff09;存储有数字温度结果的2个字节宽度的温度寄存器寄存器描述&#xff1a;寄存器说明&#xff1a; 一个字节的过温和一个字节的低温&#…

msckf_vio在ubuntu20.04中的编译

1.新建catkin workspace文件夹&#xff0c;并在其中新建src文件夹&#xff0c;并将源码clone至src内。 源码地址&#xff1a;https://github.com/KumarRobotics/msckf_vio 目录层级示意如下&#xff0c;build和devel不必新建&#xff0c;后续指令会自动新建。 2. 在编译之前…

Python 面向对象之反射

Python 面向对象之反射 【一】概念 反射是指通过对象的属性名或者方法名来获取对象的属性或调用方法的能力反射还指的是在程序额运行过程中可以动态获取对象的信息(属性和方法) 【二】四个内置函数 又叫做反射函数 万物皆对象&#xff08;整数、字符串、函数、模块、类等等…

第02章_变量与进制

第02章_变量与进制 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题脉络 1、关键字(keyword) 定义&#xff1a;被C语言赋予了特殊含义&#xff0c;用做专门用途的字符串&#xff08;或单…

力扣:438. 找到字符串中所有字母异位词 题解

Problem: 438. 找到字符串中所有字母异位词 438. 找到字符串中所有字母异位词 预备知识解题思路复杂度Code其它细节推荐博客或题目博客题目滑动窗口哈希表 预备知识 此题用到了双指针算法中的滑动窗口思想&#xff0c;以及哈希表的运用。c中是unordered_map。如果对此不了解的u…

二、UI文件设计与运行机制

一、UI文件设计与运行机制 1、创建工程 2、添加控件&#xff0c;实现按钮点击 &#xff08;1&#xff09;添加控件 &#xff08;2&#xff09;添加信号和槽 2、分析项目结构 test_02test_02.pro Qt工程文件Headerswidget.h 设计的窗体类的头文件Sourcesmain.cpp 主程序入…

rk3588中编译带有ffmpeg的opencv

有朋友有工程需要&#xff0c;将视频写成mp4&#xff0c;当然最简单的方法当然是使用opencv的命令 cv::VideoWriter writer;bool bRet writer.open("./out.mp4", cv::VideoWriter::fourcc(m, p, 4, v), 15, cv::Size(640, 512), 1); 但是奈何很难编译成功&#xff…

Python | 基于Mediapipe框架的手势识别系统

一、项目要求 1、题目 本题着力于解决会商演示系统中的非接触式人机交互问题&#xff0c;具体而言&#xff0c;其核心问题就是通过计算机视觉技术实现对基于视频流的手势动作进行实时检测和识别。通过摄像头采集并识别控制者连续的手势动作&#xff0c;完成包括点击、平移、缩放…

离散数学1

注&#xff1a;线性代数已经更新了最大部分的内容&#xff0c;因此过段时间再补充剩余内容。 小王能歌善舞。因此&#xff0c;小王必须得会唱歌也必须得会跳舞&#xff0c;才满足题意 小王能唱歌或者小王能跳舞。因此&#xff0c;小王会唱歌也会跳舞满足。小王不会唱歌但会跳舞…

JavaScript常用事件演示

文章目录 一、在JavaScript中什么是事件&#xff1f;二、什么是JavaScript 常用事件&#xff1f;三、常用JS事件代码示例:四、事件总结 一、在JavaScript中什么是事件&#xff1f; JavaScript 使我们有能力创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个…