多线程和高并发:多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发状态的实现。主要发生在web系统集中大量访问或者socket端口集中性收到大量请求
多线程只是解决高并发的方法之一。
接触项目代码之后 才认识到之前所接触的MVC具体内容——经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。 也就是module业务模型的具体内容。
@Api里的属性tags 主要是依据api文档,tags表示业务总功能描述,如同list集合,该总功能下涵盖多个功能模块,对等理解就是 总功能即为类 多个功能模块就是对应的方法。
基于整体项目代码的了解、熟悉。明白每一个类的创建是基于数据库表结构(字段、数据类型等等)并且extends model< T >。
除此以外,需要熟悉的注解内容有——
@Data(自不用多介绍 使用很多次)
@ApiOperationSupport
使用ApiOperationSupport的前提是需要先把swagger2配置好后再使用以下方法,用在controller层上,为控制类排序。
@EqualsAndHashCode(callSuper = true)
此注解会生成equals(Object other) 和 hashCode()方法。一般设置为callSuper=true(除非是判断两者对象是否一致)
它默认使用非静态,非瞬态的属性
可通过参数exclude排除一些属性
可通过参数of指定仅使用哪些属性
它默认仅使用该类中定义的属性且不调用父类的方法
@ApiParam(name = “username”, value = “用户名”, required = true)
参数required表示 该参数是否必填。
@Accessors(chain = true)
Accessor的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果
chain的中文含义是链式的,设置为true,则setter方法返回当前对象
@ApiModel(value="BizExitInfo对象", description="")
使用场景
在实体类上边使用,标记类时swagger的解析类
@ApiModelProperty
使用场景
使用在被 @ApiModel 注解的模型类的属性上
概述
添加和操作模型属性的数据
@ApiModelProperty(value = "名称")//说明
@TableField("name")//对应表结构字段名
置于属性上
除以上实体类是基于每一个表而创建,那么在api文档里的响应参数 需要单独建立model 在写接口时便于调用。
接口一般return ResponseData类 ,需要返回数据。
其次在一般登录验证方面利用apache的安全框架shiro,实现用户身份认证、权限授权、加密、会话管理等功能。
逐渐明白接口的注解在干些什么,其实就是在为api文档布局罢了。比如@ApiSort为接口排序,再则接口是为前端提供的,那么接口的生成是在其他创建完成(比如 service层 、dao层、pojo和配置文件等等)的基础上,因此在写接口的时候会发现 代码的简略和注解繁多。利用MyBatis-Plus之后大多数会创建的类会去继承MyBatis-Plus已有的。
package com.hyd.daring.api;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.hyd.daring.common.response.ResponseData;
import com.hyd.daring.service.IBizAttendanceRecordService;
import com.hyd.daring.transfer.app.AttendanceIndexModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.ResultMap;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.time.YearMonth;
/**
*月花销接口Demo
*
* @author yyp
*/
@RestController
@RequestMapping("/MonthPay")
@Api( tags ="月销接口")
@Slf4j
public class DemoApi {
@Resource
private IBizAttendanceRecordService iBizAttendanceRecordService;
/**
*
* 月销—首页(本月花销情况)
*
*/
@RequestMapping(value = "/thisYear/index")
@ApiOperation(value = "今年本月的花销")
@ApiOperationSupport(order = 1)
public ResponseData<AttendanceIndexModel> attendanceIndex(
@ApiParam(name="yearId",value="第几年",required=true) Integer yearId )
{
return new ResponseData<>(iBizAttendanceRecordService.attendanceIndex(yearId));
}
}