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 注释可以把方法变成事务

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玩转JavaEE

Spring Cloud中声明式服务调用Feign

前面几篇文章我们详细的介绍了Ribbon、RestTemplate、Hystrix组件,这些组件是我们Spring Cloud中非常基础的组件,小伙伴们在使用的...

77511
来自专栏颇忒脱的技术博客

Spring MVC异步处理简介

本文讲到的所有特性皆是基于Servlet 3.0 Async Processing的,不是基于Servlet 3.1 Async IO的。

3163
来自专栏ImportSource

1.7分钟学会Spring Boot的CommandLineRunner

本文介绍一个非常酷的Spring Boot接口,名字叫做CommandLineRunner。 使用这个接口,你可以在Spring的Bean们以及Applica...

2936
来自专栏Android 研究

Android跨进程通信IPC之5——Binder的三大接口

本片文章的主要目的是让大家对Binder有个初步的了解,既然是初步了解,肯定所是以源码上的注释为主,让大家对Binder有一个更直观的认识。PS:大部分注释我是...

1575
来自专栏一个会写诗的程序员的博客

使用 Java REPLJava REPL

https://github.com/albertlatacz/java-repl/releases

682
来自专栏后台及大数据开发

CentOS下 elasticsearch集群安装

4.修改/root/elasticsearch-node3/config/elasticsearch.yml 为如下内容(注意红色部分为三个节点不一致的地方)

1132
来自专栏Ryan Miao

Spring-Boot - 初步搭建

official document:http://projects.spring.io/spring-boot/ 项目代码: https://github.co...

2674
来自专栏jeremy的技术点滴

Spring Boot学习备忘

3224
来自专栏Albert陈凯

lombok让你提高代码整洁度的神器附教程及原理分析

在Java编程的过程中,我们在Code Entity的时候通常使用 IDE的generator来生成 get set toSting equals hashco...

3514
来自专栏ios 技术积累

Spring 常用注解

@Autowired它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。

1407

扫码关注云+社区

领取腾讯云代金券