2小时Spring Boot红包程序 尽显极客浪漫Style

2小时Spring Boot红包程序 尽显极客浪漫Style

第1章 【惊鸿一瞥】花絮引导

导学将以幽默风趣的风格,让你了解一下普罗大众眼中的“程序员”。

1-1 【开篇有惊喜】精彩花絮之课程引导

SpringBoot使配置、部署、编码、监控变得简单。

SpringMVC => SpringBoot

SpringBoot的特点:

  1. 化繁为简,简化配置
  2. 备受关注,是下一代框架
  3. 微服务的入门级微框架

SpringBoot ==> SpringCloud ==> 微服务

课程介绍:

  1. 第一个SpringBoot程序
  2. 自定义属性配置
  3. Controller的使用
  4. spring-data-jpa
  5. 事务管理

注:

  1. 具备必要的前置知识
    • 利用maven构建项目
    • Spring注解
    • RESTful API
  2. 不需要去学SpringMVC
  3. Java、Maven等版本保持一致

第2章 【初遇】坐而论“道”之SpringBoot

与SpringBoot初遇。坐而论“道”之SpringBoot是什么?

2-1 初遇SpringBoot

第3章 【初识】从前,车马很慢,书信很远,一生只够爱一人

人生第一个SpringBoot程序

3-1 人生中第一个SpringBoot程序

版本一致:

java -version
mvn -version

SpringBoot版本:

SNAPSHOT(快照版)只做一个存档,并不是Linux版本.

配置Maven阿里云镜像地址:

<!-- settings.xml -->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

请求方法注解:

  1. 新版@GetMapping(“/hello”)
  2. 老版@RequestMapping(value=”/hel1o”,method=RequestMethod.GET)

Sprint Boot里内嵌了一个Tomcat

# 启动SpringBoot程序
mvn spring-boot:run

# 程序打包
mvn clean package
# 运行程序
java -jar -Dspring.profiles.active=prod luckymoney.jar

第4章 【君子之交-淡如水】

SpringBoot配置知多少

4-1 项目属性配置知多少

项目配置:

# application.properties
server.port=8081
server.servlet.context-path=/luckymonel
servert: 
  port: 8081
  servlet: 
    context-path: /luckymoney

minMoney: 1
description: 最少要发${minMoney}元

limit: 
  minMoney: 1
  maxMoney: 10
  description: 最少要发${limit.minMone}元,最多${limit.maxMoney}元

单配置属性值:

@Value("${minMoney}")
private BigDecimal minMoney;
@Value("${description}")
private String description;

组项目属性值:

@Data
@Component
@ConfigurationProperties(prefix = "limit")
public class LimitConfig {
    private BigDecimal minMoney;
    private BigDecimal maxMoney;
    private String description;
}
@Autowired 
private LimitConfig limitConfig;

项目环境:

  • application-dev.yml:开发环境的配置

  • application-prod.yml是生产环境的配置

  • application-test.yml是测试环境的配置

  • application.yml中配置要运用的环境配置

    spring:
      profiles:
        active: dev
    mvn clean package
    java -jar -Dspring.profiles.active=prod luckymoney.jar

配置总结:

@Value
@Component
@ConfigurationProperties

第5章 【人生若只如初见】从“程序”的入口开始

还记得《北京东路的日子》那首歌….开始的开始,我们还是孩子…现在本章内容将从基于SpringBoot的“红包收发 ”程序的入口开始,实现极客专属的浪漫红包表白程序学习之旅。摒弃枯燥乏味的理论,让你尽情撸一把红包代码,Show一场法式浪漫。…

5-1 Controller:从红包程序的入口开始

注解 说明
@Controller 处理http请求
@RestController Spring4之后新加的注解,原来返回JSON需要@ResponseBody配合@Controller
@RequestMapping 配置url映射

模板的使用:

  1. 添加POM依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
  2. 创建文件/resources/templates/index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>欢迎学习SpringBoot!</h1>
    </body>
    </html>
  3. 使用模板

    @Controller
    public class HelloController {
        @Autowired
        private LimitConfig limitConfig;
    
        @GetMapping("/hello")
        public String say() {
            return "index";
        }
    }

注:

  1. @Controller + @ResponseBody = @RestController
  2. @GetMapping({“/hello”, “/hi”})
  3. 类注解@RequestMapping(“/hello”)
注解 说明
@PathVariable 获取URL中的数据
@RequestParam 获取请求参数的值

注:

  1. /luckymoney/hello/say/100

    @GetMapping(value=”/{id}/say”)

    @PathVariable(“id”) Integer id

  2. /luckymoney/hello/say?id=100

    @RequestParam(value=”id”, required=false, defaultValue=”0”) Integer id

注:

  • Post使用form-data
  • Put使用x-www-form-urlencoded

第6章 【收获人生”红颜”知己】

收获“女神”总是需要套路的,正所谓“自古深情留不住,总是套路得人心”

6-1 关于红包收发之操作数据库(上)

数据库操作

Spring-Data-Jpa -> MySQL

Spring-Data-JPA

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

Spring-Data-JPA就是对Hibernate的整合

RESTful API设计:

请求类型 请求路径 功能
GET /luckymoneys 获取红包列表
POST /luckymoneys 创建一个红包
GET /luckymoneys/id 通过id查询红包
PUT /luckymoneys/id 通过id更新红包

步骤:

  1. 添加POM依赖

    <dependency>
        <groupId>org.springf ramework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
  2. 配置数据库信息和Spring-Data-JPA信息

    spring: 
      datasource: 
        driver-class-name: com.mysql.cj.jdbc.Driver
        ur1: jdbc:mysql://127.0.0.1:3306/luckymoney?characterEncoding=utf-8
        username: root
        password: 123456
      jpa: 
        hibernate: 
          ddl-auto: create
        show-sql: true

    MySQL可视化工具:

    • Mac:Sequel Pro
    • Windows:Navicat

    ddl-auto参数:

    参数 说明
    create 运行时自动创建表。每次程序运行都会创建空表,如果已存在则会先删除表
    create-drop 应用停下来的时候就会把表删除
    none 不做任何操作。
    update 运行时自动创建表。当已存在表则不会操作
    validate 验证实体属性是否和表结构一致,不一致则会报错。
  3. 创建实体类

    @Entity
    public class Luckymoney {
        @Id
        @GenerateValue
        private Integer id;
        private BigDecimal money;
        /** 发送方 */
        private String producer;
        /** 接收方 */
        private String consumer;
        // 无参构造函数。必须要有,否则报错
        // ...getter and setter...
    }
  4. 运行程序

6-2 关于红包收发之操作数据库(下)

  1. Dao

    public interface LuckmoneyRepository extends JpaRepository<Luckymoney, Integer> {
    }
  2. Controller

    @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.setConsumer(consumer);
                return repository.save(luckymoney);
            }
            return null;
        }
    }

注:

  • Post使用form-data
  • Put使用x-www-form-urlencoded

第7章 【搞定并发就要在一起】

搞定并发,任何压力都无法阻挡我们在一起

7-1 关于事务:红包并发中的事务

事务:

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

实现实务操作:

  1. 编写Service发送两个红包

    @Service
    public class LuckymoneyService {
        @Autowired
        private LuckmoneyRepository repository;
        /**
         * 事务 指数据库事务
         * 扣库存 > 创建订单
         */
        @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);
        }
    }
    
  2. 调用Service方法发送红包

    @PostMapping("/luckymoneys/two")
    public void createTwo() {
        service.createTwo();
    }

事务失败原因:数据库默认为MyISAM不支持事物回滚,需要设置为InnoDB

解决方法: 改为INNODB

更改语句:

ALTER TABLE luckymoney ENGINE=INNODB;

事务失败原因:SpringBoot2.*实体的默认引擎为MyISAM不支持事务,需要配置引擎为为innoDB
解决方法:在application.yml添加配置

spring: 
    jpa: 
        database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

只有查询的时候不加事务,其它任何操作都要加事务。

进行添加操作的时候,如果要求,要么全部添加成功,要么全部失败

@Transactional事务处理注解的使用方法,在Service进行事务处理

第8章 【时光不老我们不散】

时光不老,我们不散。从“实战课程”再次出发?我们一起约?

8-1 总结:精华提炼,经典再现

  1. SpringBoot介绍

    • 是什么

      SpringBoot是新一代框架,简化了开发过程,提升开发效率。底层还是Spring

    • 为什么要学

      好处多,发展趋势

  2. 第一个SpringBoot应用

    • IDEA创建
    • 官网下载创建
  3. 项目配置

    • 单个配置@Value
    • 对象配置@ConfigurationProperties
    • 区分环境:开发、生产环境使用不同的配置
  4. Controller的使用

    • 方式
      • Controller
      • ResponseBody
      • RestController
    • 获取参数
      • PathVariable
      • RequestParam
  5. 数据库操作

    • Spring-Data-JPA

      extents JpaRepository

      • save()
      • findById
      • findAll
  6. 事务

    特指数据库的事务

    @Transactional

廖师兄课程学习顺序:

  1. SpringBoot入门
  2. SpringBoot进阶
  3. SpringBoot微信点餐实战
  4. SpringCloud微服务实战

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tuyrk@qq.com

文章标题:2小时Spring Boot红包程序 尽显极客浪漫Style

文章字数:2.3k

本文作者:神秘的小岛岛

发布时间:2019-12-09, 20:46:54

最后更新:2019-12-09, 20:48:21

原始链接:https://www.tuyrk.cn/imooc/328-2Hours-SpringBoot/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏