目录

tech notes

about some tech marked

1. spring boot

1.1. PostMapping 属性

  • name
  • value 请求路由地址
  • path 指定路由地址
  • params 指定request中必须包含某些参数值
  • headers 指定request中必须包含某些指定的header值
  • consumes 请求提交内容类型,MediaType方式,如 application/json、application/x-www-urlencode、multipart/form-data等
  • produces 请求返回的数据类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回,如application/json

demo:

@PostMapping(value = "/admin", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> postPCWithJson(@RequestBody Object body,HttpServletRequest request, HttpServletResponse response, HttpMethod httpMethod) throws URISyntaxException {
    // TODO
    return new ResponseEntity("", HttpStatus.OK);
}

demoNieyan:

@ApiOperation(value = "获取文章记录", httpMethod = "POST")
@PreAuth("permitAll()")
@PostMapping(value = "/query", produces = "application/json;charset=UTF-8")
public R<PageInfoView<InnerHits<ArticleListVO>>> queryNews(@RequestBody QueryArticleParam queryArticleParam, Query query) {
    PageInfoView<InnerHits<ArticleListVO>> pageInfoView = openNewsService.queryOpenNewsInnerHits(queryArticleParam, query);
    return R.data(pageInfoView);
}

1.2. swagger2 注解

@Api用在请求的类上表示对类的说明
    tags="说明该类的作用,可以在UI界面上看到的注解"
    value="该参数没什么意义,在UI界面上也看到,所以不需要配置"
 
 
@ApiOperation用在请求的方法上说明方法的用途作用
    value="说明方法的用途、作用"
    notes="方法的备注说明"
 
 
@ApiImplicitParams用在请求的方法上表示一组参数说明
    @ApiImplicitParam用在@ApiImplicitParams注解中指定一个请求参数的各个方面
        name参数名
        value参数的汉字说明解释
        required参数是否必须传
        paramType参数放在哪个地方
            · header --> 请求参数的获取@RequestHeader
            · query --> 请求参数的获取@RequestParam
            · path用于restful接口--> 请求参数的获取@PathVariable
            · body不常用
            · form不常用    
        dataType参数类型默认String其它值dataType="Integer"       
        defaultValue参数的默认值
 
 
@ApiResponses用在请求的方法上表示一组响应
    @ApiResponse用在@ApiResponses中一般用于表达一个错误的响应信息
        code数字例如400
        message信息例如"请求参数没填好"
        response抛出异常的类
 
 
@ApiModel用于响应类上表示一个返回响应数据的信息
            这种一般用在post创建的时候使用@RequestBody这样的场景
            请求参数无法使用@ApiImplicitParam注解进行描述的时候
    @ApiModelProperty用在属性上描述响应类的属性

1.3. entity、VO、DTO

  1. entity 里的每一个字段,与数据库相对应,

  2. vo 里的每一个字段,是和你前台 html 页面相对应,

  3. dto 这是用来转换从 entity 到 vo,或者从 vo 到 entity 的中间的东西 。(DTO中拥有的字段应该是entity中或者是vo中的一个子集)

举个例子

你的html页面上有三个字段,namepassage

你的数据库表里,有两个字段,namepass , 注意没有 age

而你的 vo 里,就应该有下面三个成员变量 ,因为对应 html 页面上三个字段 。

// vo
private string name
private string pass; 
private string age;

这个时候,你的 entity 里,就应该有两个成员变量 ,因为对应数据库表中的 2 个字段 。

// entity
private string name
private string pass;

到了这里,好了,业务经理让你做这样一个业务年龄大于 20 的才能存入数据库,这个时候,你就要用到 dto 了,

  1. 你要先从页面上拿到 vo,然后判断 vo 中的 age 是不是大于 20。
  2. 如果大于 20,就把 vo 中的 name 和 pass 拿出来,放到 dto 中。
  3. 然后在把 dto 中的 name 和 pass 原封不动的给 entity,然后根据 entity 的值,在传入数据库。

这就是他们三个的区别。

PS: dto 和 entity 里面的字段应该是一样的,dto 只是 entity 到 vo,或者 vo 到 entity 的中间过程,如果没有这个过程,你仍然可以做到增删改查,这是根据具体公司规范来的 。

1.4. DAO\Service\Controller

原文链接

DAO层: DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。

Service层: Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。

Controler层: Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。

总结: 个人理解DAO面向表,Service面向业务。后端开发时先数据库设计出所有表,然后对每一张表设计出DAO层,然后根据具体的业务逻辑进一步封装DAO层成一个Service层,对外提供成一个服务。