SpringBoot2基础

2024-01-08 00:12:46

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

文章来源:https://blog.csdn.net/weixin_51713937/article/details/135445978
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。