0%

Spring Boot 简单入门

SpringBoot

1. Hello World

@RestController
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello_world() {
        return "Hello World";
    }
}

2. 运行方式

  1. 直接运行Application
  2. mvn spring-boot:run
  3. mvn install cd target java -jar xxx-0.0.1-SNAPSHOT

3. 项目属性配置

在resources/application.properties中写入配置

端口

server.port=5000

网站访问前缀

server.servlet.context-path=/front

eg: http://127.0.0.1:5000/front/hello

配置文件还可以是application.yml

server:
  port: 5000
  servlet:
    context-path: /front

获取配置文件内容

age: 18

@Value("${age}")
private Integer age;

配置进行分组

girl:
  gradeNum: B
  age: 18

  content: "gradeNum: ${girl.gradeNum}, age: ${girl.age}"

这里再创建一个类GirlProperties

@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {

    private String gradeNum;
    private Integer age;
    private String content;

    getter setter省略
}

@Autowired
private GirlProperties girlProperties;

配置不同环境下使用的配置文件(开发环境/生产环境)

创建新的application-xxx.yml

application.yml的内容:
spring:
profiles:
active: xxx

当使用java -jar 运行时,可以添加参数选择配置文件
java -jar xxx-0.0.1-SNAPSHOT –spring.profiles.active=xxx

4. Controller的使用

@Controller 处理HTTP请求
@RestController Spring4新增的注解,原来返回json,等同于@ResponseBody加上@Controller
@RequestMapping 配置URL映射

@Controller需要配合模板使用
使用Sring官方模板

<dependency>
    <groupId>org.springframe.boot</groupId>
    <artifactId>sprint-boot-starter-thymeleaf</artifactId>
</dependency>

然后在resources/templates下创建模板文件
假设创建一个名为index.html的文件
然后在映射函数中return “index”即可

由于一般开发为前后端分离,所以不推荐使用模板,模板对性能损耗也大。

@RequestMapping多URL映射
使用集合

@RequestMapping(value = {"/hello", "/hi"}, method = RequestMethod.GET)

还可以给整个类设置URL

@RestController
@RequestMapping("/hello")
public class HelloController {


    @Autowired
    private GirlProperties girlProperties;

    @RequestMapping(value = "/say", method = RequestMethod.GET)
    public String say() {
        return girlProperties.getContent();
    }
}

最后访问:http://127.0.0.1:5000/hello/say

如果@RequestMapping不加method,则所有方法均可访问,多方式访问使用集合

如何处理URL的参数

@PathVariable 获取URL中的数据
@RequestParam 获取请求参数的值
@GetMapping 组合注解

@RequestMapping(value = "/say/{id}", method = {RequestMethod.POST, RequestMethod.GET})
public String say(@PathVariable("id") Integer id) {
    return "Hello "+ id;
}
http://127.0.0.1:5000/hello/say/1
这个方法不传id会显示404

@RequestMapping(value = "/say", method = {RequestMethod.POST, RequestMethod.GET})
public String say(@RequestParam("id") Integer id) {
    return "Hello "+ id;
}
http://127.0.0.1:5000/hello/say?id=1
//这个方法如果不传id会显示null

@RequestMapping(value = "/say", method = {RequestMethod.POST, RequestMethod.GET})
public String say(@RequestParam(name = "id", required = false, defaultValue = "0") Integer id) {
    return "Hello "+ id;
}
//这个方法可以设置默认值(defaultValue),是否必须传这个值(required)

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
这些组合注解可以指定Mapping的方法

数据库的操作

Spring-Data-Jpa

JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。

RESTful API设计
GET /girls 获取女生列表
POST /girls 创建一个女生
GET /girls/id 通过id查找一个女生
PUT /girls/id 通过id更新一个女生
DELETE /girls/id 通过id删除一个女生

添加依赖

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

<!--mysql-connector-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

配置jpa和mysql

编写接口继承JpaRepository

public interface GirlRepository extends JpaRepository<Girl, Integer> {

    // 通过年龄查询
    public List<Girl> findByAge(Integer age);
}

进行CRUD

package com.yingjoy.demo.controller;

import com.yingjoy.demo.Girl;
import com.yingjoy.demo.GirlRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class GirlController {

    @Autowired
    private GirlRepository girlRepository;

    /**
     * 查询女生列表
     */
    @GetMapping(value = "/girls")
    public List<Girl> girlList() {
        return girlRepository.findAll();
    }

    /**
     * 新增女生
     */
    @PostMapping(value = "/girls")
    public Girl girlAdd(@RequestParam("gradeNum") String gradeNum,
                        @RequestParam("age") Integer age) {
        Girl girl = new Girl();
        girl.setgradeNum(gradeNum);
        girl.setAge(age);

        return girlRepository.save(girl);
    }

    /**
     * 查询女生
     */
    @GetMapping(value = "/girls/{id}")
    public Girl girlFindOne(@PathVariable("id") Integer id) {
        return girlRepository.findById(id).get();
    }

    /**
     * 更新女生
     */
    @PutMapping(value = "/girls/{id}")
    public Girl girlUpdate(@PathVariable("id") Integer id,
                           @RequestParam("gradeNum") String gradeNum,
                           @RequestParam("age") Integer age) {
        Girl girl = girlRepository.findById(id).get();
        girl.setId(id);
        girl.setgradeNum(gradeNum);
        girl.setAge(age);
        return girlRepository.save(girl);
    }

    /**
     * 删除女生
     */
    @DeleteMapping(value = "/girls/{id}")
    public void girlDelete(@PathVariable("id") Integer id) {
        Girl girl = girlRepository.findById(id).get();
        girlRepository.delete(girl);
    }

    /**
     * 按照年龄查询
     */
    @GetMapping("/girls/a/{age}")
    public List<Girl> girlFindByAge(@PathVariable("age") Integer age) {
        return girlRepository.findByAge(age);
    }

}

注:put方法需要使用x-www-form-urlencoded传递数据,不能使用form-data

事务管理

@Transactional 注释可以把方法变成事务