SpringBoot
1. Hello World
@RestController
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello_world() {
return "Hello World";
}
}
2. 运行方式
- 直接运行Application
- mvn spring-boot:run
- mvn install cd target java -jar xxx-0.0.1-SNAPSHOT
3. 项目属性配置
在resources/application.properties中写入配置
端口
server.port=5000
网站访问前缀
server.servlet.context-path=/front
eg: http://127.0.0.1:5000/front/hello
配置文件还可以是application.yml
server:
port: 5000
servlet:
context-path: /front
获取配置文件内容
age: 18
@Value("${age}")
private Integer age;
配置进行分组
girl:
gradeNum: B
age: 18
content: "gradeNum: ${girl.gradeNum}, age: ${girl.age}"
这里再创建一个类GirlProperties
@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {
private String gradeNum;
private Integer age;
private String content;
getter setter省略
}
@Autowired
private GirlProperties girlProperties;
配置不同环境下使用的配置文件(开发环境/生产环境)
创建新的application-xxx.yml
application.yml的内容:
spring:
profiles:
active: xxx
当使用java -jar 运行时,可以添加参数选择配置文件
java -jar xxx-0.0.1-SNAPSHOT –spring.profiles.active=xxx
4. Controller的使用
@Controller 处理HTTP请求
@RestController Spring4新增的注解,原来返回json,等同于@ResponseBody加上@Controller
@RequestMapping 配置URL映射
@Controller需要配合模板使用
使用Sring官方模板
<dependency>
<groupId>org.springframe.boot</groupId>
<artifactId>sprint-boot-starter-thymeleaf</artifactId>
</dependency>
然后在resources/templates下创建模板文件
假设创建一个名为index.html的文件
然后在映射函数中return “index”即可
由于一般开发为前后端分离,所以不推荐使用模板,模板对性能损耗也大。
@RequestMapping多URL映射
使用集合
@RequestMapping(value = {"/hello", "/hi"}, method = RequestMethod.GET)
还可以给整个类设置URL
@RestController
@RequestMapping("/hello")
public class HelloController {
@Autowired
private GirlProperties girlProperties;
@RequestMapping(value = "/say", method = RequestMethod.GET)
public String say() {
return girlProperties.getContent();
}
}
最后访问:http://127.0.0.1:5000/hello/say
如果@RequestMapping不加method,则所有方法均可访问,多方式访问使用集合
如何处理URL的参数
@PathVariable 获取URL中的数据
@RequestParam 获取请求参数的值
@GetMapping 组合注解
@RequestMapping(value = "/say/{id}", method = {RequestMethod.POST, RequestMethod.GET})
public String say(@PathVariable("id") Integer id) {
return "Hello "+ id;
}
http://127.0.0.1:5000/hello/say/1
这个方法不传id会显示404
@RequestMapping(value = "/say", method = {RequestMethod.POST, RequestMethod.GET})
public String say(@RequestParam("id") Integer id) {
return "Hello "+ id;
}
http://127.0.0.1:5000/hello/say?id=1
//这个方法如果不传id会显示null
@RequestMapping(value = "/say", method = {RequestMethod.POST, RequestMethod.GET})
public String say(@RequestParam(name = "id", required = false, defaultValue = "0") Integer id) {
return "Hello "+ id;
}
//这个方法可以设置默认值(defaultValue),是否必须传这个值(required)
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
这些组合注解可以指定Mapping的方法
数据库的操作
Spring-Data-Jpa
JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。
RESTful API设计
GET /girls 获取女生列表
POST /girls 创建一个女生
GET /girls/id 通过id查找一个女生
PUT /girls/id 通过id更新一个女生
DELETE /girls/id 通过id删除一个女生
添加依赖
<!--jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql-connector-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
配置jpa和mysql
编写接口继承JpaRepository
public interface GirlRepository extends JpaRepository<Girl, Integer> {
// 通过年龄查询
public List<Girl> findByAge(Integer age);
}
进行CRUD
package com.yingjoy.demo.controller;
import com.yingjoy.demo.Girl;
import com.yingjoy.demo.GirlRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class GirlController {
@Autowired
private GirlRepository girlRepository;
/**
* 查询女生列表
*/
@GetMapping(value = "/girls")
public List<Girl> girlList() {
return girlRepository.findAll();
}
/**
* 新增女生
*/
@PostMapping(value = "/girls")
public Girl girlAdd(@RequestParam("gradeNum") String gradeNum,
@RequestParam("age") Integer age) {
Girl girl = new Girl();
girl.setgradeNum(gradeNum);
girl.setAge(age);
return girlRepository.save(girl);
}
/**
* 查询女生
*/
@GetMapping(value = "/girls/{id}")
public Girl girlFindOne(@PathVariable("id") Integer id) {
return girlRepository.findById(id).get();
}
/**
* 更新女生
*/
@PutMapping(value = "/girls/{id}")
public Girl girlUpdate(@PathVariable("id") Integer id,
@RequestParam("gradeNum") String gradeNum,
@RequestParam("age") Integer age) {
Girl girl = girlRepository.findById(id).get();
girl.setId(id);
girl.setgradeNum(gradeNum);
girl.setAge(age);
return girlRepository.save(girl);
}
/**
* 删除女生
*/
@DeleteMapping(value = "/girls/{id}")
public void girlDelete(@PathVariable("id") Integer id) {
Girl girl = girlRepository.findById(id).get();
girlRepository.delete(girl);
}
/**
* 按照年龄查询
*/
@GetMapping("/girls/a/{age}")
public List<Girl> girlFindByAge(@PathVariable("age") Integer age) {
return girlRepository.findByAge(age);
}
}
注:put方法需要使用x-www-form-urlencoded传递数据,不能使用form-data
事务管理
@Transactional 注释可以把方法变成事务