2小时快速上手Spring Boot (廖师兄-imooc)

具备前置知识:

前置知识
1、利用maven构建项目

《项目管理利器maven》 http://www.imooc.com/learn/443

2、Spring注解

《Spring入门篇》http://www.imooc.com/learn/196

3、RESTful API

不需要去学SpringMVC


第一个SpringBoot程序

#### 三种运行方式

第一种: idea run2小时快速上手Spring Boot (廖师兄-imooc)_第1张图片
第二种 mvn spring-boot:run
2小时快速上手Spring Boot (廖师兄-imooc)_第2张图片
第三种 mvn clean package
2小时快速上手Spring Boot (廖师兄-imooc)_第3张图片
java -jar target/luckeymoney-0.0.1-SNAPSHOT.jar2小时快速上手Spring Boot (廖师兄-imooc)_第4张图片

自定义属性配置

数据库配置
2小时快速上手Spring Boot (廖师兄-imooc)_第5张图片
修改端口 访问路径
server.port=8081
server.servlet.context-path=/luckymoney
application.yml 与 application.properties 配置是一模一样
2小时快速上手Spring Boot (廖师兄-imooc)_第6张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第7张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第8张图片

全局 变量配置
minMoney
调用方法
@Value("${minMoney}")
private BigDecimal minMoney;
2小时快速上手Spring Boot (廖师兄-imooc)_第9张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第10张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第11张图片

minMoney: 1
description: 最少需要发1元
2小时快速上手Spring Boot (廖师兄-imooc)_第12张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第13张图片

2小时快速上手Spring Boot (廖师兄-imooc)_第14张图片
变量 如何在配置中使用
minMoney: 2
description: 最少需要发${minMoney}元
2小时快速上手Spring Boot (廖师兄-imooc)_第15张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第16张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第17张图片

上面都是 单个配置

下面是 配置类

limit:
minMoney: 2
maxMoney: 9999
description: 最少要发${limit.minMoney}元,最多${limit.maxMoney}元
2小时快速上手Spring Boot (廖师兄-imooc)_第18张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第19张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第20张图片

2小时快速上手Spring Boot (廖师兄-imooc)_第21张图片

开发环境 与 生产环境 分配
2小时快速上手Spring Boot (廖师兄-imooc)_第22张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第23张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第24张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第25张图片
mvn运行
mvn clean package
java -jar -Dspring.profiles.active=prod target/luckeymoney-0.0.1-SNAPSHOT.jar
在这里插入图片描述
2小时快速上手Spring Boot (廖师兄-imooc)_第26张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第27张图片

### 配置总结 ###
@Value
@Component
@ConfigurationProperties

### 多环境配置 ###

Controller

一、 @Controller 处理http请求
二、 @RestController Spring4之后新加的注解,原来返回json 需要@ResponseBody配合@Controller
三、@RequestMapping 配置url映射

模板渲染 thymeleaf 现在比较少用了,采用前后端分离技术


	org.springframework.boot
	spring-boot-starter-thymeleaf

2小时快速上手Spring Boot (廖师兄-imooc)_第28张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第29张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第30张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第31张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第32张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第33张图片

2小时快速上手Spring Boot (廖师兄-imooc)_第34张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第35张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第36张图片

@PathVariable 获取url中的数据
2小时快速上手Spring Boot (廖师兄-imooc)_第37张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第38张图片
@RequestParam 获取请求参数的值
2小时快速上手Spring Boot (廖师兄-imooc)_第39张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第40张图片
带默认值:0 如下,
2小时快速上手Spring Boot (廖师兄-imooc)_第41张图片
2小时快速上手Spring Boot (廖师兄-imooc)_第42张图片

spring-data-jpa

JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实行这一规范的产品有hibernate,TopLink等
2小时快速上手Spring Boot (廖师兄-imooc)_第43张图片
安装依赖 spring-data-jpa 与mysql 依赖


	org.springframework.boot
	spring-boot-starter-data-jpa



	mysql
	mysql-connector-java

配置连接数据库 mysql


spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/luckymoney?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

2小时快速上手Spring Boot (廖师兄-imooc)_第44张图片
创建一个实体类 Luckymoney
数据库中会自动生成相应的表 luckymoney

import javax.persistence.Entity;

类名  @Entity 注解

id 自增长

import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Id
@GeneratedValue
private Integer id;

创建一个空对象

public Luckymoney() {
}

代码如下:

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

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

创建一个spring-data-jpa接口,继承相应的JpaRepository 的所有方法
传入两个参数 一个 实体类名,实体类名的 id
代码如下:

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

public interface LuckymoneyRepository extends JpaRepository {
}

创建一个Service 类,专门处理 数据库相应方法

@Service
public class LuckymoneyService {

    @Autowired
    private LuckymoneyRepository repository;

    /*
    * Transactional
    * 事务 指数据库事务,不是java事务
    * MyISAM 数据库引擎是不支持事务的
    * InnoDB 数据库引擎 支持事务
    *
    * 举例:扣库存 -> 创建订单
    * */
    @Transactional
    public void  createTwo(){
        Luckymoney luckymoney1 = new Luckymoney();
        luckymoney1.setProducer("梁德强");
        luckymoney1.setMoney(new BigDecimal("520"));
        repository.save(luckymoney1);

        Luckymoney luckymoney2 = new Luckymoney();
        luckymoney2.setProducer("梁德强");
        luckymoney2.setMoney(new BigDecimal("1314"));
        repository.save(luckymoney2);
    }
}

创建一个Controller类:LuckymoneyController,处理相应的http请求的方法,并返回API数据

继承JpaRepository 的接口类 LuckymoneyRepository调用方法如下

@Autowired
private LuckymoneyRepository repository;

	一、
	Luckymoney luckymoney = new Luckymoney();
	luckymoney.setProducer(producer);
	luckymoney.setMoney(money);
	return  repository.save(luckymoney);

	二、
	return repository.findById(id).orElse(null);

	三、返回的是一个Optional对象 里面的值都是数据库返回的根据当前的id查询的值
	Optional optional = repository.findById(id);
	```
	Optional optional = repository.findById(id);
    if (optional.isPresent()){ //如果有内容 ,执行更新操作
        Luckymoney luckymoney = optional.get();
        luckymoney.setConsumer(consumer);
        return repository.save(luckymoney);
    }
    return null;
	```
	

封装处理数据库的相应方法,Service的 类LuckymoneyService 调用方法如下:

@Autowired
private LuckymoneyService service;
一、
@PostMapping("/luckymoney/two")
public void createTwo(){
    service.createTwo();

}

2小时快速上手Spring Boot (廖师兄-imooc)_第45张图片

事务管理

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

事务管理,指的是数据库事务 ,不是java事务

MyISAM 数据库引擎不支持事务

InnoDB数据库引擎支持事务

事务管理一般是放置 Service类的里面

如下:

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

 @Transactional
 public void  createTwo(){
     Luckymoney luckymoney1 = new Luckymoney();
     luckymoney1.setProducer("梁德强");
     luckymoney1.setMoney(new BigDecimal("520"));
     repository.save(luckymoney1);

     Luckymoney luckymoney2 = new Luckymoney();
     luckymoney2.setProducer("梁德强");
     luckymoney2.setMoney(new BigDecimal("1314"));
     repository.save(luckymoney2);
 }

代码如下:

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

import java.math.BigDecimal;

@Service
public class LuckymoneyService {

    @Autowired
    private LuckymoneyRepository repository;

    /*
    * Transactional
    * 事务 指数据库事务,不是java事务
    * MyISAM 数据库引擎是不支持事务的
    * InnoDB 数据库引擎 支持事务
    *
    * 举例:扣库存 -> 创建订单
    * */
    @Transactional
    public void  createTwo(){
        Luckymoney luckymoney1 = new Luckymoney();
        luckymoney1.setProducer("梁德强");
        luckymoney1.setMoney(new BigDecimal("520"));
        repository.save(luckymoney1);

        Luckymoney luckymoney2 = new Luckymoney();
        luckymoney2.setProducer("梁德强");
        luckymoney2.setMoney(new BigDecimal("1314"));
        repository.save(luckymoney2);
    }
}

你可能感兴趣的:(Spring,Boot)