2小时Spring Boot红包程序 尽显极客浪漫Style
目录
第1章 【惊鸿一瞥】花絮引导
导学将以幽默风趣的风格,让你了解一下普罗大众眼中的“程序员”。
1-1 【开篇有惊喜】精彩花絮之课程引导
SpringBoot使配置、部署、编码、监控变得简单。
SpringMVC => SpringBoot
SpringBoot的特点:
- 化繁为简,简化配置
- 备受关注,是下一代框架
- 微服务的入门级微框架
SpringBoot ==> SpringCloud ==> 微服务
课程介绍:
- 第一个SpringBoot程序
- 自定义属性配置
- Controller的使用
- spring-data-jpa
- 事务管理
注:
- 具备必要的前置知识
- 利用maven构建项目
- Spring注解
- RESTful API
- 不需要去学SpringMVC
- 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>
请求方法注解:
- 新版@GetMapping(“/hello”)
- 老版@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映射 |
模板的使用:
添加POM依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
创建文件/resources/templates/index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>欢迎学习SpringBoot!</h1> </body> </html>
使用模板
@Controller public class HelloController { @Autowired private LimitConfig limitConfig; @GetMapping("/hello") public String say() { return "index"; } }
注:
- @Controller + @ResponseBody = @RestController
- @GetMapping({“/hello”, “/hi”})
- 类注解@RequestMapping(“/hello”)
注解 | 说明 |
---|---|
@PathVariable | 获取URL中的数据 |
@RequestParam | 获取请求参数的值 |
注:
/luckymoney/hello/say/100
@GetMapping(value=”/{id}/say”)
@PathVariable(“id”) Integer id
/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更新红包 |
步骤:
添加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>
配置数据库信息和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 验证实体属性是否和表结构一致,不一致则会报错。 创建实体类
@Entity public class Luckymoney { @Id @GenerateValue private Integer id; private BigDecimal money; /** 发送方 */ private String producer; /** 接收方 */ private String consumer; // 无参构造函数。必须要有,否则报错 // ...getter and setter... }
运行程序
6-2 关于红包收发之操作数据库(下)
Dao
public interface LuckmoneyRepository extends JpaRepository<Luckymoney, Integer> { }
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 关于事务:红包并发中的事务
事务:
数据库事务,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
实现实务操作:
编写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); } }
调用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 总结:精华提炼,经典再现
SpringBoot介绍
是什么
SpringBoot是新一代框架,简化了开发过程,提升开发效率。底层还是Spring
为什么要学
好处多,发展趋势
第一个SpringBoot应用
- IDEA创建
- 官网下载创建
项目配置
- 单个配置@Value
- 对象配置@ConfigurationProperties
- 区分环境:开发、生产环境使用不同的配置
Controller的使用
- 方式
- Controller
- ResponseBody
- RestController
- 获取参数
- PathVariable
- RequestParam
- 方式
数据库操作
Spring-Data-JPA
extents JpaRepository
- save()
- findById
- findAll
事务
特指数据库的事务
@Transactional
廖师兄课程学习顺序:
- SpringBoot入门
- SpringBoot进阶
- SpringBoot微信点餐实战
- 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" 转载请保留原文链接及作者。