关于介绍什么之类的就不讲了,主要作一下学习记录。java
IDEA 启动mysql
命令行启动:git
mvn spring-boot:run
先进行打包,github
mvn clean package
移动到项目的 target 目录下,能够看到一个后缀名为 jar 的文件,即是刚刚咱们打包的 jar 包,spring
使用命令行启动:sql
java -jar target/luckymoney-0.0.1-SNAPSHOT.jar
java -jar -Dspring.profiles.active=prod target/luckymoney-0.0.1-SNAPSHOT.jar
使用 prod 环境。(多环境配置:使用开发和生产环境)数据库
配置文件有两种写法:json
server.port=8081 server.servlet.context-path=/luckmoney
server: port: 8081 servlet: context-path: /luckmoney
推荐后一种写法,结构更清晰。数组
@value
在配置文件中使用配置,以下写法:springboot
minMoney: 0.01 description: 最少要发${limit.minMoney}元,最多要发${limit.maxMoney} 元。
而后传入参数:
@Value("${minMoney}") private BigDecimal minMoney;
@ConfigurationProperties
若是配置项不少,而且相互联系,把配置放到对象类中,使用 @Component
和 @ConfigurationProperties
。而后使用 @Autowired
方式自动注入 Controller。
application.yml:
limit: minMoney: 0.01 maxMoney: 9999 description: 最少要发${limit.minMoney}元,最多要发${limit.maxMoney} 元。
对象配置类 LimitConfig.java :
@Component @ConfigurationProperties(prefix = "limit") public class LimitConfig { private BigDecimal minMoney; private BigDecimal maxMoney; private String description; // getter 和 setter 方法 }
属性注入 Controller.java :
@RestController @RequestMapping("/hello") public class HelloController { @Autowired private LimitConfig limitConfig; // 实现方法 }
名称 | 做用 |
---|---|
@Controller | 处理http请求 |
@RestController | Spring4以后新加的注解,原来返回json须要@ResponseBody配合@Controller |
@RequestMapping | 配置url映射 |
@PathVariable | 获取url中的数据 |
@RequestParam | 获取请求参数的值 |
@Controller
能够在 springboot 模板注释中用到。
配合:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
或 @Conroller
和 ResponseBody
返回原来的 json。
@ResponseBody
能够在方法上或类上使用。
总结:@Controller
+ ResponseBody
= @RestController
举个例子:
@RestController @RequestMapping("/hello") public class HelloController { @Autowired private LimitConfig limitConfig; // RequestParam:地址栏获得 /say?id=1 这种,后两个属性是设置不传参默认为 0 @GetMapping("/say") public String say(@RequestParam(value = "id", required = false, defaultValue = "0") Integer myId) { return "id:" + myId; } // PathVariable:地址栏获得 /say1/1 这种 @GetMapping("/say/{id}") public String say2(@PathVariable("id") Integer id) { return "id:" + id; } }
@GetMapping
能够传数组。如:
@GetMapping({"hello", "say"})
能够在类上使用 @RequestMapping("/xxx")
, 方法上使用 GetMapping("/yyy")
或 PostMapping("/yyy")
来达到:/xxx/yyy 的效果。
springboot 操做数据库是经过 Spring-Data-Jpa 来实现的。
JPA(Java Persistence API)定义了一系列对象持久化的标准。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
注意:在springboot 中的maven 依赖不用加版本号,springboot已经帮咱们选定好了版本号。
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/luckmoney?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false username: root password: xxxx jpa: hibernate: ddl-auto: update # ddl-auto: create (create表示建立,update表示更新) show-sql: true # 控制台打印sql语句
建表也能够直接在 springboot 中建,不须要在数据库中建表。
@Entity public class Luckmoney { // 构造方法 public Luckmoney() { } @Id @GeneratedValue private Integer id; private BigDecimal money; // 发送方 private String producer; // 接收方 private String consumer; // getter 和 setter 方法 }
在 springboot 中咱们也不须要本身去实现增删改查的方法发,能够自定义个接口,继承 JpaRepository 类,再编写 controller 类实现接口就好了。
接口类:
public interface LuckmoneyRepository extends JpaRepository<Luckmoney, Integer> { }
JpaRepositroy 参数中第一个是:定义的 Entity,第二个是主键的类型。
实现类:
@RestController public class LuckymoneyController { @Autowired private LuckmoneyRepository repository; // 获取红包列表 @GetMapping("/luckmoneys") public List<Luckmoney> list() { return repository.findAll(); } }
事务操做通常都放在 service 文件下。
注意:
事务是指数据库的事务,不是指 java 事务,@Transactional
注解只是添加了执行,回滚的操做,具体的事务执行仍是要根据数据库状况。好比有些数据库不支持事务,MySQL中 MyISAM 引擎是不支持事务的。
show engines;
alter table luckmoney ENGINE=InnoDB;
show create table luckmoney