2020-09-22-x
Xplorist Lv6

2020-09-22-x

todo-list

record-list

  • JPA的精髓还是在于用对象的关系去表现关系,只有真正使用过才能够体会其中的真谛。

  • JPA Entity对象之间的关联不是通过数据库的外键约束来实现的,而是通过互为属性来实现关联。

  • JPA其实还是有一些不适应的地方,但是国外的程序员都大量使用的,技术应该是很成熟的,慢慢摸索也就会适应的。

  • Swagger中简单参数类型注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@AllArgsConstructor
@RestController
@RequestMapping("/api/category")
@Api(value = "/category", tags = "组件分类")
public class BizCategoryController {

private IBizCategoryService bizCategoryService;

@GetMapping("/list")
@ApiOperation(value = "列表", notes = "分页列表")
public R<PageModel<BizCategory>> list(PageQuery pageQuery,
@RequestParam @ApiParam("组件分类名称") String name) {
IPage<BizCategory> page = bizCategoryService.page(pageQuery.loadPage(),
new LambdaQueryWrapper<BizCategory>().like(BizCategory::getName, name));
return R.success(page);
}

@GetMapping("/list/all")
@ApiOperation(value = "查询所有", notes = "分页列表")
public R<List<BizCategory>> listAll() {
List<BizCategory> categories = bizCategoryService.list();
return R.success(categories);
}

@GetMapping("/{categoryId}")
@ApiOperation(value = "详情", notes = "组件分类详情")
public R<BizCategory> detail(@PathVariable @ApiParam("分类Id") Long categoryId) {
BizCategory category = bizCategoryService.getById(categoryId);
return R.success(category);
}

@PostMapping("/save")
@ApiOperation(value = "保存", notes = "新增或修改")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "form", name = "categoryId", value = "组件id(修改时为必填)"),
@ApiImplicitParam(paramType = "form", name = "name", value = "组件分类名称", required = true)
})
public R<BizCategory> save(Long categoryId, String name) {
BizCategory category = new BizCategory();
category.setId(categoryId);
category.setName(name);
bizCategoryService.saveOrUpdate(category);
return R.success(category);
}

@DeleteMapping("/{categoryId}")
@ApiOperation(value = "删除", notes = "删除")
public R delete(@PathVariable @ApiParam("分类Id") Long categoryId) {
bizCategoryService.delete(categoryId);
return R.success();
}
}
  • @Validated controller简单请求参数如String类型的验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RestController
@Validated
class ValidateParametersController {

@GetMapping("/validatePathVariable/{id}")
ResponseEntity<String> validatePathVariable(
@PathVariable("id") @Min(5) int id) {
return ResponseEntity.ok("valid");
}

@GetMapping("/validateRequestParameter")
ResponseEntity<String> validateRequestParameter(
@RequestParam("param") @Min(5) int param) {
return ResponseEntity.ok("valid");
}
}

重点:在Controller类名上添加@Validated,在String 类型前面加上@RequestParam
我的实例如下:

1
2
3
4
5
6
7
8
@RestController
@Validated
public class CsDemandNewController {
@RequestMapping(value = "/delete", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
public ResultDTO<Object> delete(@RequestParam @NotNull(message = "不能为null") @NotEmpty(message = "不能为空字符串") @NotBlank(message = "不能为空格") String id, HttpServletRequest request, HttpServletResponse response) throws Exception {
return svc.delete(id, request, response);
}
}

这样就不用在业务层Service中添加参数验证的代码了

  • SpirngValidation

JSR 提供的校验注解 :

1
2
3
4
5
6
7
8
9
10
11
12
13
@Null   被注释的元素必须为 null    
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

Hibernate Validator 提供的校验注解 :

1
2
3
4
5
@NotBlank(message =)   验证字符串不为空格,非 null,且长度必须大于 0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
  • 算是完成了一个夙愿,我也用上了JPA了,我的新项目里面集成了MyBatis和SpringDataJPA,CRUD,MyBatis擅长R就做R,SpringDataJPA擅长CUD就做CUD,
    还别说,SpringDataJPA用着是真的爽,代码量瞬间少了好多。
  • 感慨:Hibernate的基本理念是四年前都知道的,但是真的用起来之后才真正懂得其中那些概念,知行合一是学习的不二法门,用起来才能够感受到其中真正的
    快乐。后端的架子搭好了,明天该用Vue Cli写前端了。

home-record-list

  • 准备整软路由

reference-site-list

swagger

knife4j

Spring Validation

Lombok

soft router

 评论