springboot入门-快速上手springboot

前言

        说实话使用springboot已经有两年多快三年了,但是却没怎么去好好总结梳理一下关于springboot相关知识点。今天本着学习与回顾的目的打算就springboot的使用方法以及相关知识点,展开一个专题由浅入深的梳理一下springboot的相关知识点。

        本次专题打算分,如下四个阶段展开:

  1. springboot入门–快速上手springboot
  2. springboot进阶–简单web开发
  3. springboot实战–企业级web开发
  4. 深入理解springboot

        好了废话不多说了,进入主题开始我们的第一个章节(springboot入门–快速上手springboot)

springboot入门

目的

        这篇博文主要目的是初步认识理解springboot,以一个简单实例的形式方式展开,让大家能够快速上手springboot。

开发环境

  1. 开发工具:IntelliJ IDEA 2017.3.5 x64
  2. jdk版本:java version “1.8.0_161”
  3. maven版本:Apache Maven 3.5.3
  4. MySQL版本:5.6.17

主要知识点

  1. 快速初始化springboot工程
  2. springboot controller之hello world
  3. springboot配置管理
  4. springboot数据库操作
  5. 简单事物管理

什么是springboot

        首先我们分别看一看百度百科与springboot官网对springboot的简述。

        SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决(摘自:百度百科)

        Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.

        We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.(摘自:spring官网)

        通过百度百科和spring官网对springboot的介绍我们可以知道,springboot是spring全新一代的轻量级框架,其主要目是为了简化spring应用的配置。并且通过依赖管理等方式,使得很多原本需要通过复杂配置的基础工程,都能实现一键式的开箱即用。

        这里我们只对springboot是什么做一个简单的概述,要想彻底弄明白它到底是个啥,后面的章节会详细介绍。因为经验告诉我们,很多东西用着用着就这道它到底是个啥了。

        当然如果你阅读官方文档的能力比较强,直接阅读springboot官方文档,那才是最好的学习springboot的文档,作为一个开发者如果你的外语水平比较好,还是建议多去阅读一下官方文档。

第一个springboot工程构建

springboot工程构建方法

        通常springboot工程的构建方法有两种:

  1. 通过springboot工程初始化网站–start.spring.io初始化springboot应用
  2. 通过IntelliJ IDEA等IDE工具初始化springboot应用

构建步骤(IntelliJ IDEA)

  1. 打开idea点击file->new->project选择Spring Initializr

在这里插入图片描述

        我们会发现其实通过idea构建springboot工程,其实还是通过start.spring.io来构建的。

  1. 点击Next输入group artifactid等信息,选择Java版本为Java8

在这里插入图片描述

  1. 点击Next选择springboot的版本,我这里选择的是2.3.3,选择需要添加的依赖(启动器),此时我们只需要一个Web启动器即可。当然对于springboot的版本,你也可以选择其他版本,但是不要选择SNAPSHOT版本。

在这里插入图片描述

  1. 点击Next,点击Finish完成项目创建,其实截止到这里我们已经完成了工程的构建,但是因为我们还要进行后续springboot进阶的学习,所以我们这里还有一个工作要做,就是你用git进行工程初始化,以便于后续我们将代码托管到github。

  2. 利用git bash进入工程目录输入git init初始化工程,接着检出一个功能分支feature/primer-springboot用于我们这次springboot入门的开发。

  3. 新建一个controller包,在controller包下新建一个HelloController类,按照springmvc的使用方式创建一个测试接口

@RestController
public class HelloController {

    @GetMapping("/hello")
    public Map<String, Object> hello(){
        Map<String, Object> result = new HashMap<>();
        result.put("msg", "Hello springboot");
        return result;
    }

}
  1. 运行启动类LearnSpringbootApplication启动该应用,如果程序没有报错。在浏览器输入localhost:8080/hello能正常返回结果信息,则说明我们的第一个springboot应用启动成功了。

springboot配置管理

配置简介

        springboot因为约定优于配置,对于每一个springboot应用都会默认创建一个并且引入application.properties文件,对于许多配置信息我们也只需遵循约定优于配置即可。例如指定服务运行端口端口为8081,只需在application.properties配置文件中,添加server.port=8081即可,淡然springboot也支持yaml文件格式,我们可以将默认的application.properties文件修改为application.yml。

# tomcat端口号
server:
  port: 8081
自定义属性
自定义单个属性
  • 定义单个属性
# 自定义属性
num: 1
value: ${num}
  • 获取单个属性
    @Value("${num}")
    private Integer num;

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

    @GetMapping("value")
    public String getValue(){
        return "num is\t" + num + "\t" + "value is\t" + value;
    }
自定义多个属性
# 自定义多个属性
learn:
  subject: springboot
  time: 2h
  grade: primer
@Component
@ConfigurationProperties(prefix = "learn")
public class LearnConfig {

    private String subject;

    private String time;

    private String grade;

    public LearnConfig() {
    }

    public LearnConfig(String subject, String time, String grade) {
        this.subject = subject;
        this.time = time;
        this.grade = grade;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }
}
  • 获取多个属性
    @Autowired
    private LearnConfig learnConfig;

    @GetMapping("/config")
    public Map<String, Object> getConfig(){
        Map<String, Object> result = new HashMap<>();
        result.put("msg", learnConfig);
        return result;
    }
不同环境配置管理

        对于springboot的配置管理也非常简单,我们只需要建立不同环境的配置文件,然后在发布程序的时候指向对应的发布环境即可。例如:

  • 配置
  1. 建立开发环境配置文件:application-dev.yml
  2. 建立生产环境配置文件:application-prod.yml
  3. 在主配置文件中application.yml添加spring.profiles.active=dev或者prod分别指向对应的环境。
spring:
  profiles:
    active: dev
  • 发布
  1. 使用java -jar -Dspring.profiles.active=prod target/learn-springboot-0.0.1-SNAPSHOT.jar命令启动服务指向要发布的环境。

Controller层应用

restful api 接口
package com.itxiaoyuaiit.learnspringboot.controller;

import model.User;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName RestController
 * @Description Restful Api 测试
 * @Author wuyuqing
 * @Date 2020/8/23 19:42
 * @Version 1.0
 */
@RestController
public class RestFulApiController {

    /**
     * C
     * @return result
     */
    @PostMapping("/user")
    public Map<String, Object> create(@RequestBody User user){
        Map<String, Object> result = new HashMap<>();
        result.put("msg", user);
        return result;
    }

    /**
     * R
     * @return result
     */
    @GetMapping("/user/{id}")
    public Map<String, Object> reader(@PathVariable("id") String id){
        Map<String, Object> result = new HashMap<>();
        result.put("msg", id);
        return result;
    }

    /**
     * U
     * @return result
     */
    @PutMapping("/user")
    public Map<String, Object> update(@RequestBody User user){
        Map<String, Object> result = new HashMap<>();
        result.put("msg", user);
        return result;
    }

    /**
     * D
     * @return result
     */
    @DeleteMapping("/user/{id}")
    public Map<String, Object> detele(@PathVariable("id") String id){
        Map<String, Object> result = new HashMap<>();
        result.put("msg", id);
        return result;
    }

}

页面返回接口
  1. 添加模板引擎
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
  1. 添加简单模板页面
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div style="text-align: center;margin:0 auto;width: 1000px; ">
    你的学习的科目 <span th:text="${config.subject}"></span><br>
    你的学习的时间 <span th:text="${config.time}"></span><br>
    你的学习的难度 <span th:text="${config.grade}"></span><br>
</div>

</body>
</html>
  1. 添加页面返回接口
package com.itxiaoyuaiit.learnspringboot.controller;

import com.itxiaoyuaiit.learnspringboot.config.LearnConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @ClassName IndexController
 * @Description TODO
 * @Author wuyuqing
 * @Date 2020/8/23 19:36
 * @Version 1.0
 */
@Controller
public class IndexController {

    @Autowired
    private LearnConfig learnConfig;

    @GetMapping("index")
    public String index(Model model) {
        model.addAttribute("config", learnConfig);
        return "index";
    }

}

需要注意当使用thymeleaf作为模板引擎,返回html页面时,应该使用@Controller注解而不是@RestController,@RestController实际上等于@Controller+@ResponseBody

springboot数据操作

        这里我们使用spring-boot-starter-data-jpa来对数据进行操作,spring-boot-starter-data-jpa只是一套规范默认采用hibernate实现,hibernate框架对于我们的单标操作,以及ORM逆向工程使用起来都特变简单。所以我们这里使用springboot官方推荐的spring-boot-starter-data-jpa来进行数据库的相关操作。

数据库操作步骤
  1. 添加jpa依赖
        <!-- jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- mysql链接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
  1. 添加数据库配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
    username: root
    password: ******
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  1. 添加数据库操作接口dao,其实这里因为使用是hibernate框架,所以该接口叫做*repository更加合理。
package com.itxiaoyuaiit.learnspringboot.dao;

import com.itxiaoyuaiit.learnspringboot.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @InterfaceName UserDao
 * @Description TODO
 * @Author wuyuqing
 * @Date 2020/8/23 23:55
 * @Version 1.0
 */
public interface UserDao extends JpaRepository<User, Integer> {

}

  1. 编辑CRUD控制层接口
package com.itxiaoyuaiit.learnspringboot.controller;

import com.itxiaoyuaiit.learnspringboot.dao.UserDao;
import com.itxiaoyuaiit.learnspringboot.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

/**
 * @ClassName RestController
 * @Description Restful Api 测试
 * @Author wuyuqing
 * @Date 2020/8/23 19:42
 * @Version 1.0
 */
@RestController
public class RestFulApiController {

    @Autowired
    private UserDao userDao;

    /**
     * C
     * @return result
     */
    @PostMapping("/user")
    public Map<String, Object> create(@RequestBody User user){
        Map<String, Object> result = new HashMap<>();
        user = userDao.save(user);
        result.put("msg", user);
        return result;
    }

    /**
     * R
     * @return result
     */
    @GetMapping("/user/{id}")
    public Map<String, Object> reader(@PathVariable("id") Integer id){
        User user = userDao.findById(id).get();
        Map<String, Object> result = new HashMap<>();
        result.put("msg", user);
        return result;
    }

    /**
     * U
     * @return result
     */
    @PutMapping("/user")
    public Map<String, Object> update(@RequestBody User user){
        Map<String, Object> result = new HashMap<>();
        user = userDao.save(user);
        result.put("msg", user);
        return result;
    }

    /**
     * D
     * @return result
     */
    @DeleteMapping("/user/{id}")
    public Map<String, Object> detele(@PathVariable("id") Integer id){
        Map<String, Object> result = new HashMap<>();
        userDao.deleteById(id);
        result.put("msg", id);
        return result;
    }

}

  • 至此我们的springboot快速入门就到此结束了,源码地址

总结

        该章节主要用于springboot的快速入门,主要涉及以下springboot相关的知识。

  1. 什么是springboot
  2. springboot工程构建
  3. springboot配置管理
  4. springboot Controller使用
  5. springboot简单页面返回
  6. springboot jpa数据库操作
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值