Spring Boot学习(4)

Spring Boot学习(4)

REST风格

简介:
优点:
  • 隐藏资源的访问行为,无法通过地址得知资源是何种操作
  • 书写简化
注意:
  • 上述行为是约定方式,约定方式不是规范,可以打破,所以称为REST风格,而不是REST规范 但是由于使用REST风格的公司越来越多,也就慢慢都认为它是一种规范(都去遵守它了)。
  • 描述模块名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如users、books….。
实例步骤:
  1. 设定http请求动作(动词)
  2. 设定请求参数(路径变量)
JAVA
@RestController
@RequestMapping("/users")
public class MyController {
    //保存用户
    @PostMapping
    public String save(){
        System.out.println("user save...");
        return "{'module':user save}";
    }
    //删除用户
    @DeleteMapping("/{id}")
    public String delete(@PathVariable Integer id){
        System.out.println("user delete..."+id);
        return "{'module':user delete}";
    }
    //修改用户
    @PutMapping
    public String update(@RequestBody User user){
        System.out.println("user update..."+user);
        return "{'module':user update}";
    }
    //获取指定用户
    @GetMapping("/{id}")
    public String getById(Integer id){
        System.out.println("user getById..."+id);
        return "{'module':user getById}";
    }
    //获取全部用户
    @GetMapping
    public String getAll(){
        System.out.println("user getAll...");
        return "{'module':user getAll}";
    }
}

配置文件

配置文件(application.properties)前面提到可以修改Springboot内置的端口号

PROPERTIES
server.port=8080

还可以修改banner、log等配置信息

更多的、详细的配置信息都在https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties中

image-20220120211025873

注意:

  • 配置文件中的内容要与你导入的依赖相关,如果你没有导入相关的依赖那么配置的内容是不会生效的,例如没有导入tomcat的依赖,那么配置文件中修改server.port是不会有高亮提示的也不生效。
配置文件的格式
  • .properties(传统格式/默认格式)
  • .yaml
  • .yml(主流)

上述三种配置文件同时存在的执行的优先级(会加载覆盖)

是properties >> yml >> yaml

但上述情况一般不会出现


yaml
  • YAML(YAML Ain’t Markup Language),一种数据序列化格式

  • 优点:

    • 容易阅读
    • 容易与脚本语言交互
    • 以数据为核心,重数据格式
  • YAML文件扩展名

    • .yaml
    • .yml(主流)
  • 语法规则

    • 大小写敏感
    • 属性层级关系使用多行描述,每行结尾使用冒号结束
    • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
    • 属性值前面添加空格(属性名与属性之间使用冒号+空格作为分隔)
    YAML
    country: china
    
    Java程序读取
    • 使用Spring的IOC机制使用@Value注入

      JAVA
      @Value("${country}")//读取键值对中的值
      private String Country;
      
      • 使用java类读取 (YAML类)
    JAVA
    static {
    		Yaml yaml = new Yaml();
    		try (InputStream in = YamlReader.class.getClassLoader().getResourceAsStream("application.yml");) {
    			properties = yaml.loadAs(in, HashMap.class);
    		} catch (Exception e) {
    			log.error("Init yaml failed !", e);
    		}
    	}
    
    • 使用环境变量对象来存储yaml配置文件中的键值对(使用@Autowire注入赋值)用来应对当yaml配置文件中对象过多的情况
    JAVA
    @Autowired
        private Environment env;
        
    System.out.println(env.getProperty("server.port"));
    System.out.println(env.getProperty("Country"));
    
    • 使用自定义类封装yaml配置文件中的数据

      application.yaml

      YML
      User:
        name: 丁杨维
        age: 20
      

      自定义User类

      JAVA
      
      @Component//将对象的生命周期交给容器管理 也为了容器将配置文件中的信息赋值给该对象
      @ConfigurationProperties(prefix = "user")
      public class User {
          private String name;
          private Integer age;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public Integer getAge() {
              return age;
          }
      
          public void setAge(Integer age) {
              this.age = age;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "name='" + name + '\'' +
                      ", age=" + age +
                      '}';
          }
      }
      

      Controller.java

      JAVA
      @RestController
      @RequestMapping("/books")
      public class BookController {
          @Autowired
          private User user;
          @GetMapping
          public String getById(){
              System.out.println(user);
              return null;
          }
      }
      

      结果

      image-20220120224222972

    • yaml文件中值的相互引用 直接使用${键名}即可

YAML
BaseDir: c\windows
TempDir: ${BaseDir}\temp
#如果有转义字符想要显示出来 就加上双引号 如这里\t就是一个转义字符
TempDir: "${BaseDir}\temp"

注意:

  • 虽然配置文件格式多 单文件名可不是乱取的 名字一定是application.xxx才行
  • 如果idea没有识别你的yaml文件或是yml文件为springboot配置文件(前提是文件名是applicaiton.xxx) 可以在Project Struct中设置

image-20220120213544643

选择Facts 选择Configuration Files 在点击那个绿叶标志

image-20220120213633139

点击+号找到你的文件

image-20220120213807493

SpringBoot整合第三方技术

**注意:**如果使用的第三方技术无法在Spring Initializr中勾选到 则需要手动添加(maven中央仓库中查找)

SpringBoot整合Junit

使用Spring Initializr创建一个普通的SpringBoot程序(啥都不选) 会自动导入test依赖

这是因为maven创建的项目,生命周期中离不开test的原因,所以不用我们导入它会自动引入。

XML
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependenc

BookDao.java接口

JAVA
public interface BookDao {
    void save();
}

BookImpl.java实现类

JAVA
@Repository
public class BookImpl implements BookDao {

    @Override
    public void save() {
        System.out.println("book save");
    }
}

Springboot05ApplicationTests.java

JAVA
@SpringBootTest
class Springboot05ApplicationTests {
    @Autowired
    private BookImpl book;
    @Test
    void contextLoads() {
        book.save();
    }
}

运行测试类获得结果

image-20220120230704919

注意:

使用测试类时要将测试类放在与classes目录下引导类的路径呈同级或子级关系 否则测试类会找不到**@SpringBootConfiguration**而出现异常,而引导类的注解中包含@SpringBootConfiguration 所以引导类也是一个SpringBootConfiguration。

解决方案
  1. 将测试类放在classes目录下与引导类的路径呈同级或是子级关系的包下。
  2. 使用@ContextConfiguration(classes=…)注解指定引导类
  3. 使用@SpringBootTest(classes=…)注解指定引导类
SpringBoot整合Mybatis
创建
  1. 使用Spring Initializr创建,需要勾选SQL中的MySQL Driver和MyBatis Framework,根据需要勾选WEB。

image-20220120232906258

Mybatis与SpringBoot整合的依赖以及JDBC的依赖

XML
      <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
          <version>2.2.1</version>
      </dependency>
<dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <scope>runtime</scope>
      </dependency>
  1. 配置数据库连接信息

application.yml

YML
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/my_db
    username: root
    password: devil
  1. 写实体类

Student.java

JAVA
package com.dyw.springboot06mybatis.Domain;

/**
 * Devil
 *
 * @create 2022-01-20-23:36
 */
public class Student {
    private int id;
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  1. 写StudentDao接口 写入相关操作

StudentDao.java

JAVA
@Mapper
public interface StudentDao {
    @Select("select id,name,age from student order by id")
    List<Student> selectStudents();
}

如果不适用配置文件那么则加入**@Mapper**注解 就类似于配置文件 自动代理 在里面使用@Select注解(查找)配置操作 @Update(修改/更新)….

执行测试类

image-20220120234846000

注意:

如果出现了serverTimezone异常 需要在配置文件URL后加入?serverTimezone=UTC(时区任意)

SpringBoot整合Mybatis-Plus

直接导入相应的依赖mybatis-plus-boot-starter即可

并且在配置文件中写上数据库相关配置即可


SpringBoot整合Mybatis+Druid

需要导入druid的依赖

XML
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

application.yml配置数据源类型

方式一: 在spring.datasource中配置type为DruidDataSource

YML
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/my_db?serverTimezone=UTC
    username: root
    password: devil
    type: com.alibaba.druid.pool.DruidDataSource

方式二: 直接在spring.datasource.druid中配置数据源信息

YML
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/my_db?serverTimezone=UTC
      username: root
      password: devil
YML
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/my_db?serverTimezone=UTC
    username: root
    password: devil
    type: com.alibaba.druid.pool.DruidDataSource

方式二: 直接在spring.datasource.druid中配置数据源信息

YML
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/my_db?serverTimezone=UTC
      username: root
      password: devil

推荐第二种

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值