Spring Boot - 基本知识

前言

SpringBoot和SpringMVC区别

两者没有必然的联系,SpringBoot相当于SpringMVC的升级版

SpringBoot特点

1.化繁为简,简化配置
2.备受关注,是下一代框架
3.微服务的入门级微框架
当前流行架构是微服务,Spring家族为微服务提供一整套组件统称SpringCloud,SpringCloud是建立在SpringBoot的基础之上的,学习SpringBoot是为以后微服务打基础。
在这里插入图片描述

1.第一个SpringBoot程序

⚠️注意:请尽可能的保持版本一致

  • jdk :1.8.191
  • maven:3.5.3
  • SpringBoot:2.1.3
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ⚠️注意:Spring Boot版本一定要选正式版,即版本号后没有(SANPSHOT)字样。带有(SANPSHOT)字样的版本只提供一个快照功能。
    在这里插入图片描述
    在这里插入图片描述
    ⚠️删除以下不需要的文件
    在这里插入图片描述

⚠️在pom.xml中手动更改SpringBoot版本为2.1.3,目的是为了与此教程一致,避免因版本不同造成的问题。
在这里插入图片描述

运行项目
在这里插入图片描述

HelloWorld
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.自定义属性配置

配置方式

方式一:在application.properties中配置
在这里插入图片描述
在这里插入图片描述
方式二:在application.yml中配置(推荐)
⚠️其实两者写法没有区别,只不过是展示方式不同,后者会将相同内容折叠起来,更加清晰,故推荐。
⚠️配置中key:后一定要加一个空格,复制不符合文件格式,项目启动会报错
在这里插入图片描述
在这里插入图片描述

使用

方式一:单个配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方式二:配置类

在这里插入图片描述
在这里插入图片描述
⚠️出现此提示的解决办法:Maven引入依赖

<dependency>
   <groupId> org.springframework.boot </groupId>
   <artifactId> spring-boot-configuration-processor </artifactId>
   <optional> true </optional>
</dependency>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版本控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.Controller的使用

注解位置说明举例
@Controller类名处理Http请求
@ResponseBody类名、方法名返回数据
@RestController类名Spring4后新加
@RestMapping类名配置url映射@RestMapping(“/hello”)
@gettMapping方法名get请求@gettMapping(“/say”)
@postMapping方法名post请求@postMapping(“/say”)
@RequestMapping类名、方法名get、post请求@RequestMapping(“/say”)
@PathVariable方法参数中获取url中的数据
@RequestParam方法参数中获取请求参数的值
在这里插入图片描述
⚠️@Controller + @ResponseBody = @RestController
⚠️@GetMapping 可以传入数组

⚠️@PathVariable
在这里插入图片描述
在这里插入图片描述

4.Spring-Data-Jap

定义

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

设计

在这里插入图片描述

在pom.xml中添加依赖

⚠️不用填写版本号,SpringBoot已经为我们选择号了版本,SpringBoot的优点之一
⚠️添加完依赖记得Maven-》reimport

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

数据库操作

在application.yml配置

⚠️?characterEncoding=utf-8 解决插入数据库中文乱码问题

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://172.0.0.1:3306/luckymoney?characterEncoding=utf-8
    username: root
    password: 123456

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

创建数据库 luckymoney

创建表

⚠️ 不需要执行sql
⚠️@GeneratedValue 自增
1.创建Luckymoney实体类
在这里插入图片描述

package com.imooc.luckymoney;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.math.BigDecimal;

/**
 *
 * @author 背影男神
 * @date 2020/7/11
 */
@Entity
public class Luckymoney {

    @Id
    @GeneratedValue
    private Integer id;

    private BigDecimal money;

    /**
     * 发送方
     */
    private String producer;

    /**
     * 接收方
     */
    private String consumer;

    public Luckymoney(){

    }

    public Integer getId() {
        return id;
    }

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

    public BigDecimal getMoney() {
        return money;
    }

    public void setMoney(BigDecimal money) {
        this.money = money;
    }

    public String getProducer() {
        return producer;
    }

    public void setProducer(String producer) {
        this.producer = producer;
    }

    public String getConsumer() {
        return consumer;
    }

    public void setConsumer(String consumer) {
        this.consumer = consumer;
    }
}

2.运行后则自动创建表

功能编写

1.创建LuckymoneyRepository 接口文件
在这里插入图片描述

package com.imooc.luckymoney;

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

/**
 *
 * @author 背影男神
 * @date 2020/7/18
 */
public interface LuckmoneyRepository extends JpaRepository<Luckymoney,Integer> {
}

2.创建LuckymoneyController.java

package com.imooc.luckymoney;

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

import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;

/**
 *
 * @author 背影男神
 * @date 2020/7/18
 */
@RestController
public class LuckymoneyController {

    @Autowired
    private LuckmoneyRepository repository;

    /**
     * 获取红包列表
     */
    @GetMapping("/luckymoneys")
    public List<Luckymoney> list(){
        return repository.findAll();
    }

    /**
     * 创建红包(发红包)
     */
    @PostMapping("/luckymoneys")
    public Luckymoney create(@RequestParam("producer") String producer, @RequestParam("money")BigDecimal money){
        Luckymoney luckymoney = new Luckymoney();
        luckymoney.setProducer(producer);
        luckymoney.setMoney(money);
        return repository.save(luckymoney);
    }

    /**
     * 通过id查询红包
     */
    @GetMapping("/luckymoneys/{id}")
    public Luckymoney findById(@PathVariable("id") Integer id){
        return repository.findById(id).orElse(null);
    }

    /**
     * 更新红包
     */
    @PutMapping("/luckymoneys/{id}")
    public Luckymoney update(@PathVariable("id") Integer id,@RequestParam("consumer") String consumer){
        Optional<Luckymoney> optional = repository.findById(id);
        if(optional.isPresent()){
            Luckymoney luckymoney = optional.get();
            luckymoney.setId(id);
            luckymoney.setConsumer(consumer);
            return repository.save(luckymoney);
        }
        return  null;
    }
}

3.测试
(1)获取红包列表
在这里插入图片描述

(2)创建红包(发红包)
在这里插入图片描述
在这里插入图片描述
(3)通用id查询红包
在这里插入图片描述
在这里插入图片描述
(4)更新红包
在这里插入图片描述
在这里插入图片描述

5.事物管理

定义

数据库事务,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行

使用

⚠️一般存在于service方法
⚠️事务不是java方法,而是由数据库提供的,有的数据库引擎不支持事物操作。如maysql的MyISAM就不支持,innoDB就支持

1、创建service
在这里插入图片描述

package com.imooc.luckymoney;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;

/**
 *
 * @author 背影男神
 * @date 2020/7/25
 */
public class LuckymoneyService {
    @Autowired
    private LuckmoneyRepository repository;

    /**
     * 发送两个红包
     */
    @Transactional
    public void createTwo(){
        Luckymoney luckymoney1 = new Luckymoney();
        luckymoney1.setProducer("发送人1");
        luckymoney1.setMoney(new BigDecimal("520"));
        repository.save(luckymoney1);

        Luckymoney luckymoney2 = new Luckymoney();
        luckymoney2.setProducer("发送人2");
        luckymoney2.setMoney(new BigDecimal("1314"));
        repository.save(luckymoney2);
    }
}

2、在conroller写调用方法

package com.imooc.luckymoney;

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

import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;

/**
 *
 * @author 背影男神
 * @date 2020/7/18
 */
@RestController
public class LuckymoneyController {

    @Autowired
    private LuckmoneyRepository repository;

    @Autowired
    private LuckymoneyService service;

    /**
     * 获取红包列表
     */
    @GetMapping("/luckymoneys")
    public List<Luckymoney> list(){
        return repository.findAll();
    }

    /**
     * 创建红包(发红包)
     */
    @PostMapping("/luckymoneys")
    public Luckymoney create(@RequestParam("producer") String producer, @RequestParam("money")BigDecimal money){
        Luckymoney luckymoney = new Luckymoney();
        luckymoney.setProducer(producer);
        luckymoney.setMoney(money);
        return repository.save(luckymoney);
    }

    /**
     * 通过id查询红包
     */
    @GetMapping("/luckymoneys/{id}")
    public Luckymoney findById(@PathVariable("id") Integer id){
        return repository.findById(id).orElse(null);
    }

    /**
     * 更新红包
     */
    @PutMapping("/luckymoneys/{id}")
    public Luckymoney update(@PathVariable("id") Integer id,@RequestParam("consumer") String consumer){
        Optional<Luckymoney> optional = repository.findById(id);
        if(optional.isPresent()){
            Luckymoney luckymoney = optional.get();
            luckymoney.setId(id);
            luckymoney.setConsumer(consumer);
            return repository.save(luckymoney);
        }
        return  null;
    }

    /**
     * 发送两个红包
     */
    @PostMapping("/luckymoneys/two")
    public void createTwo(){
        service.createTwo();
    }
}

总结

  • SpringBoot介绍
    • 是什么?
      是新一代框架,为了简化开发过程,提升开发效率,底层还是spring
  • 第一个SpringBoot应用
    • idea创建
    • 官网创建
  • 项目配置
    • 单个配置@Value
    • 对象配置@ConfigurationProperties
    • 区域环境
  • Controller的使用
    • 方式
      • @Controller
      • @ResponseBody
      • @RestController
        等同于Controller+ResponseBody
    • 获取参数
      • @PathVariable
        从url中获取
      • @RequestParam
  • 数据库操作
    • Spring-Data-Jpa组件
      • extends JpaRepository
        • save
        • findByid
        • findAll
  • 事务
    • 特指数据库事务
    • @Transactional
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值