Spring Boot 快速入门


Spring Boot 快速入门

通过Idea构建项目

![屏幕快照 2018-10-28 下午9.18.03](Spring-Boot-快速入门/屏幕快照 2018-10-28 下午9.18.03.png)

next

![屏幕快照 2018-10-28 下午9.20.10](Spring-Boot-快速入门/屏幕快照 2018-10-28 下午9.20.10.png)

起个名字next

![屏幕快照 2018-10-28 下午9.20.58](Spring-Boot-快速入门/屏幕快照 2018-10-28 下午9.20.58.png)

选择版本和web 。next

finish

项目目录结构

├── src

│ ├── main

│ │ ├── java

│ │ │ └── com

│ │ │ └── example

│ │ │ └── girl

│ │ │ ├── GirlApplication.java

│ │ │ └── MyController.java

│ │ └── resources

│ │ ├── application.properties

│ │ ├── static

│ │ └── templates

Spring Boot的启动方式

1.在项目中直接run

2.命令行通过maven运行

需要先安装maven并配置好

使用命令 mvn spring-boot:run

例如:

Anbingxu-MBP:girl bxan$ mvn spring-boot:run

3.先打包再运行

打包方式就不具体介绍了,请使用搜索引擎。

然后通过 java -jar 【打完包后的名称】

4.通过maven打包并运行

(1)进入项目目录通过maven使用使用命令 mvn install打包

Anbingxu-MBP:girl bxan$ mvn install
[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------------< com.example:girl >--------------------------
[INFO] Building girl 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------

注意:如果下载相关依赖速度缓慢请使用国内的镜像

(2)然后进入target目录 java -jar girl-0.0.1-SNAPSHOT.jar

Anbingxu-MBP:girl bxan$ cd target/

Anbingxu-MBP:target bxan$ java -jar girl-0.0.1-SNAPSHOT.jar

获取配置文件内容

普通properties

比如application.properties

server.port=10086
server.servlet.context-path=/girl

yaml

在resources中新建application.yaml

server:
  port: 10086
  servlet:
    context-path: /girl

配置文件

比如在yaml配置文件中加入属性cupSize: 36D

我们可以使用**@value(“${cupSize}”) private String cupSize;** Spring Boot会为你自动注入该属性的值。


在配置文件中引用其他属性的方法

cupSize: 36D
age: 18
content: "cupSize:${cupSize} and age=${age}"

将配置文件的内容映射为Java Bean

girl:
  cupSize: B
  age: 18
package com.example.girl;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {
    private String cupSize;
    private Integer age;

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "GirlProperties{" +
                "cupSize='" + cupSize + '\'' +
                ", age=" + age +
                '}';
    }
}

通过@Autowired注解自动装配完成使用。

@Autowired
private GirlProperties girlProperties;

生产环境和开发环境配置

1.新建两个配置文件

application-dev.yaml

application-prod.yaml

2.在主配置文件application.yaml写入

spring:
  profiles:
    active: prod

active: [配置文件的名称 (值使用“-” 后面的内容)]

3.修改active即可切换环境

4.运行即可

(注意:若使用maven打包并运行 可以通过jar -jar xxxxx –spring.profiles.active=prod 来指定环境)

有关配置文件的几个注解

@value

可以实现配置文件内容的注入

@Compontent

可以通过使用该注解 让spring帮我门把Java Bean扫入IOC容器中

@ConfigurationProperties

通过该注解可以将配置文件映射为java bean

控制器Controller相关注解

@Contorller

处理http请求

@RestContorller

@RestController = @Controller + @ResponseBody

@RequestMapping

完成url映射

@GetMapping

一下两行代码效果一样

@RequestMapping(value = "/hello",method = RequestMethod.GET)
@GetMapping(value = "/hello")

@PostMapping

同上

路由参数相关的注解

@PathVariable

通过该注解可以获取url中的一个仅一个参数 通常作用与REST风格相关

@PostMapping(value = "/hello/{id}")
public String say(@PathVariable("id")Integer id)

@RequestParam

通常url中带有多个参数时使用

localhost:10088/girl/hello?id=1&name=an

@PostMapping(value = "/hello")
    public String say(@RequestParam("id") Integer id,@RequestParam("name") String name)

请求参数是否required以及default

@RequestParam(value = "id",required = false,defaultValue = "0")
@PathVariable(value = "id",required = false) //Path!Variable没有default

spring data jpa

spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: mysql123
    url: jdbc:mysql://localhost:3306/dbgirl?autoReconnect=true&useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true

ddl-auto: create可选属性 update、create 、create-drop、none、valid

create每次运行若数据库中的表已存在会删除并重建。

update则为更新 会保留之前存在的数据

create-drop 程序终止 则删除

none: 什么都不做

valid

Spring Boot Jpa

增删查该实战

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.12</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

MyGirl

package com.example.girl;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class MyGirl {
    @Id
    @GeneratedValue
    private Integer id;

    private String name;
    private Integer age;
    private String cupSize;

    public MyGirl() {
    }

    public Integer getId() {
        return id;
    }

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

    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;
    }

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

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

GirlRepository

package com.example.girl;

import org.springframework.data.jpa.repository.JpaRepository;

public interface GirlRepository extends JpaRepository<MyGirl,Integer> {

}

GirlController

package com.example.girl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class GirlController {
    @Autowired
    GirlRepository girlRepository;

    //查询所有女生
    @GetMapping("/girls")
    public List<MyGirl> girlList() {
        return girlRepository.findAll();
    }

    //添加一个女生
    @PostMapping("/girls")
    public MyGirl addGirl(@RequestParam("name") String name,
                          @RequestParam("age") Integer age,
                          @RequestParam String cupSize) {
        MyGirl myGirl = new MyGirl();
        myGirl.setAge(age);
        myGirl.setCupSize(cupSize);
        myGirl.setName(name);
        MyGirl save = girlRepository.save(myGirl);
        return save;
    }

    //查询一个女生
    @GetMapping("/girls/{id}")
    public MyGirl getOneGirl(@PathVariable("id") Integer id) {
        return girlRepository.getOne(id);
    }
//    删除一个女生
    @DeleteMapping("/girls/{id}")
    public void deleteOneGirl(@PathVariable("id")Integer id){
         girlRepository.deleteById(id);
    }

    //更新一个女生
    @PutMapping("/girls/{id}")
    public MyGirl update(@PathVariable("id")Integer id,@RequestParam("name") String name,
                         @RequestParam("age") Integer age,
                         @RequestParam String cupSize) {
        MyGirl myGirl = new MyGirl();
        myGirl.setName(name);
        myGirl.setCupSize(cupSize);
        myGirl.setAge(age);
        myGirl.setId(id);
        MyGirl save = girlRepository.save(myGirl);
        return save;

    }

}

文章作者: Bxan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Bxan !
  目录