具备前置知识:
前置知识
1、利用maven构建项目《项目管理利器maven》 http://www.imooc.com/learn/443
2、Spring注解
《Spring入门篇》http://www.imooc.com/learn/196
3、RESTful API
不需要去学SpringMVC
#### 三种运行方式
第一种: idea run
第二种 mvn spring-boot:run
第三种 mvn clean package
java -jar target/luckeymoney-0.0.1-SNAPSHOT.jar
数据库配置
修改端口 访问路径
server.port=8081
server.servlet.context-path=/luckymoney
application.yml 与 application.properties 配置是一模一样
全局 变量配置
minMoney
调用方法
@Value("${minMoney}")
private BigDecimal minMoney;
minMoney: 1
description: 最少需要发1元
变量 如何在配置中使用
minMoney: 2
description: 最少需要发${minMoney}元
limit:
minMoney: 2
maxMoney: 9999
description: 最少要发${limit.minMoney}元,最多${limit.maxMoney}元
开发环境 与 生产环境 分配
mvn运行
mvn clean package
java -jar -Dspring.profiles.active=prod target/luckeymoney-0.0.1-SNAPSHOT.jar
### 配置总结 ###
@Value
@Component
@ConfigurationProperties
### 多环境配置 ###
一、 @Controller 处理http请求
二、 @RestController Spring4之后新加的注解,原来返回json 需要@ResponseBody配合@Controller
三、@RequestMapping 配置url映射
模板渲染 thymeleaf 现在比较少用了,采用前后端分离技术
org.springframework.boot
spring-boot-starter-thymeleaf
@PathVariable 获取url中的数据
@RequestParam 获取请求参数的值
带默认值:0 如下
,
JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实行这一规范的产品有hibernate,TopLink等
安装依赖 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
创建一个实体类 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();
}
数据库事务:是指为 单个逻辑工作单元 执行的一系列操作, 要么完全执行, 要么完全地不执行
事务管理,指的是数据库事务 ,不是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);
}
}