Spring Boot 知识点速记
时间:2022-05-07
本文章向大家介绍Spring Boot 知识点速记,主要内容包括项目属性配置、Controller的使用、数据库、Web进阶、AOP、异常、测试、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
本文是学习2小时学会Spring Boot和Spring Boot进阶之Web进阶的SpringBoot常用知识点速记。
SpringBoot前置知识:
- Spring:相关资料参考Spring知识点速查
- Maven:相关资料参考Maven知识点速查
项目属性配置
配置项
resources/application.yml
girl:
cupSize: B
age: 18
自动注入类中
@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {
private String cupSize;
private Integer age;
public String getCupSize() {
return cupSize;
}
public void setCupSize(String cupSize) {
this.cupSize = cupSize;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
也可用 @Value("${content}")
不同环境启动
resources/application.yml
spring:
profiles:
active: dev
则启动按 application-dev.yml
配置启动, active:prob
则按 application-prob.yml
启动
Controller的使用
- @Controller 要配合模版templates使用,不过现在前后端分离,后台都是Rest接口返回JSON数据了。
- @RestController:等于@Controler + @ResponseBody
- @RequestMapping
- @PathVariable("id")
- @RequestParam("id")
数据库
配置JPA,application.yml
spring:
profiles:
active: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dbgirl
username: root
password: 123456
jpa:
hibernate:
ddl-auto: create #每次运行应用重新创建表
#ddl-auto: update 有必要才更新
show-sql: true
创建DAO
public interface GirlRepository extends JpaRepository<Girl,Integer> {
public List<Girl> findByAge(Integer age);
}
使用DAO
@Autowired
private GirlRepository girlRepository;
@GetMapping(value = "/girls")
public List<Girl> girlList() {
return girlRepository.findAll();
}
@PostMapping(value = "/girls")
public Girl girlAdd(@RequestParam("cupSize") String cupSize,
@RequestParam("age") Integer age) {
Girl girl = new Girl();
girl.setCupSize(cupSize);
girl.setAge(age);
return girlRepository.save(girl);
}
@GetMapping(value = "/girls/{id}")
public Girl girlFindOne(@PathVariable("id") Integer id) {
return girlRepository.findOne(id);
}
@PutMapping(value = "/girls/{id}")
public Girl girlUpdate(@PathVariable("id") Integer id,
@RequestParam("cupSize") String cupSize,
@RequestParam("age") Integer age) {
Girl girl=new Girl();
girl.setId(id);
girl.setCupSize(cupSize);
girl.setAge(age);
return girlRepository.save(girl);
}//这里注意PUT的请求参数用x-www-form-urlencoded
@DeleteMapping(value = "/girls/{id}")
public String girlDelete(@PathVariable("id") Integer id) {
girlRepository.delete(id);
return "Success!";
}
@GetMapping(value = "/girls/age")
public List<Girl> girlListByAge(@PathVariable("age") Integer age){
return girlRepository.findByAge(age);
}
事务管理
加一个注解@Transactional
Web进阶
表单验证
现在 @Entiry
里的成员变量增加 @Min(value=18,message="未成年禁止入内")
,然后在Post请求里, @ValidGirl,BindingResultbindingResult
AOP
切的示例
@Aspect
@Component
public class HttpAspect {
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class.getName());
//切的点
@Pointcut("execution(public * top.linxz.java.controller.GirlController.*(..))")
public void log() {
}
@Before("log()")
public void doBefore(JoinPoint joinPoint) {
//url
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
logger.info("url={}", request.getRequestURL());
//method
logger.info("method={}", request.getMethod());
//ip
logger.info("ip={}", request.getRemoteAddr());
//类方法
logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
//参数
logger.info("args={}", joinPoint.getArgs());
}
@After("log()")
public void doAfter() {
logger.info("22222222222");
}
@AfterReturning(returning = "object", pointcut = "log()")
public void doAfterReturning(Object object) {
logger.info("response{}", object);
}
}
异常
统一处理异常
@ControllerAdvice
public class ExceptionHandle {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result handle(Exception e) {
if (e instanceof GirlException) {
GirlException girlException = (GirlException) e;
return ResultUtil.error(girlException.getCode(), girlException.getMessage());
} else {
return ResultUtil.error(-1, "未知错误");
}
}
}
自定义异常
记得Spring里要继承RuntimeException,可以事务回滚。而Exception不会。
public class GirlException extends RuntimeException {
private Integer code;
public GirlException(Integer code, String msg) {
super(msg);
this.code = code;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
测试
单元测试
普通单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class GirlServiceTest {
@Autowired
private GirlService girlService;
@Test
public void findOneTest() {
Girl girl = girlService.findOne(1);
Assert.assertEquals(new Integer(12), girl.getAge());
}
}
Mockc测试HTTP
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class GirlControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void girlList() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/girls"))
.andExpect(MockMvcResultMatchers.status().isOk());
}
}
代码仓库: https://github.com/linxinzhe/java-springboot-girl
- WCF的Binding模型之五:绑定元素(Binding Element)
- 2018年物联网发展趋势
- Silverlight初级教程-概述
- WCF的Binding模型之四:信道工厂(Channel Factory)
- 如何做一个好的前端重构工程师
- 云计算是否真的对企业来说无所不能?
- 科协带你开个2017年科技世界的总结会!
- 基于StockRanker算法的机器学习量化策略
- Enterprise Library深入解析与灵活应用(6):自己动手创建迷你版AOP框架
- 交易费用过高的比特币还能成为“未来货币”吗?
- 应用大数据,做好技术成果市场价值评估
- Linux和Windows的换行符
- 行业数据重要性不用多说,呕心整理分享(2)
- 云计算如何在银行业务发挥作用?
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- PHP实现PDO操作mysql存储过程示例
- Python bisect模块原理及常见实例
- PHP的curl函数的用法总结
- Python函数的迭代器与生成器的示例代码
- PHP中检查isset()和!empty()函数的必要性
- python代码中怎么换行
- PHP让网站移动访问更加友好方法
- python代码区分大小写吗
- php面试中关于面向对象的相关问题
- python实现在线翻译
- Python字符串格式化常用手段及注意事项
- PHP count_chars()函数讲解
- 浅谈keras使用中val_acc和acc值不同步的思考
- PHP安装BCMath扩展的方法
- keras实现多GPU或指定GPU的使用介绍