SpringBoot注解整合

Spring Boot注解整合


@RestController

Spring 4.0版本之后的一个注解

功能相当于@Controller和@ResponseBody之和

@GetMapping("/hello")

Spring后期推出的一个注解

@RequestMapping(method = RequestMethod.GET)的缩写

@ConfigurationProperties(prefix = "book")

使用自定义属性给Bean类赋值时使用,在使用时需要在启动类上添加注解

@EnableConfigurationProperties(XXXBean.class)表示启动这个配置类

@EnableConfigurationProperties(XXXBean.class)表示启动这个配置类

必须

表示启动@ConfigurationProperties(prefix = "book")这一注解

@PropertySource(value = "classpath:application.properties")

可选

表示从application.properties读取数据值,给相应属性赋值

@Alias("user")

使用@Alias可以表明实体类得别名

@Configuration

表明这是一个配置类

@Configuration用于定义配置类,可替换xml配置文件

@Bean

被注解的类内部包含有一个或多个被@Bean注解的方法

这些方法将会被AnnotationConfigApplicationContext进行扫描

用于构建bean定义,初始化Spring容器

@primary

一般在多数据源配置中使用,表明这是主数据源

 

@Produces

用于定义方法返回的数据类型,可以定义一个或多个

@Produces(MediaType.APPLICATION_JSON)

案例:
    @GET
    @Path("countGroup")
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation("违规告警数量统计")
    @Authorization
    public ApiResult getCountGroup(
            @ApiParam(name = "groupId", value = "区域编号") @QueryParam("groupId") String groupId,
            @ApiParam(name = "precinctId", value = "企业编号") @QueryParam("precinctId") String precinctId,
            @ApiParam(name = "alarmType", value = "报警类型") @QueryParam("alarmType") int alarmType,
            @ApiParam(name = "startTime", value = "开始时间") @QueryParam("startTime") String startTime,
            @ApiParam(name = "endTime", value = "结束时间") @QueryParam("endTime") String endTime) {
        return ApiResult.Success(alarmService.getCountGroup(groupId, precinctId, alarmType, startTime, endTime));
    }

 

@JsonFormat

时间格式化注解

当我们存储在mysql中的数据是data类型,封装在实体类中的时候,就会编程英文时间格式,而不是:yyyy-MM-dd HH:mm:ss这样的中文时间,这时候我们需要用@JsonFormat转化时间格式

它只会在类似@ResponseBody返回json数据的时候,才会返回格式化的yyyy-MM-dd HH:mm:ss时间,

你直接使用System.out.println()输出的话,仍然是类似“Fri Dec 01 21:05:20 CST 2017”这样的时间样式。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

案例
package com.wiscom.vo;
​
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
​
/**
 * @program: base
 * @description: 人员轨迹
 * @author: 徐野宇
 * @create: 2019-11-19 09:17
 */
@Data
@ApiModel("人员轨迹")
public class TrajectoryVO {
    @ApiModelProperty(name="userDeviceId",value="蓝牙设备编号")
    private String userDeviceId;
    
    @ApiModelProperty(name = "addTime", value = "添加时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private String addTime;
}

 

 

JPA相关注解

@Entity

表明这是一个实体类

@id

在属性上使用,表明这是主键

@GeneratedValue(strategy = GenerationType.IDENTITY)

注解在属性上,表明此字段自增长

@Column(nullable = false,unique = true)

可以设置字段的一些属性

nullable:未非空

unique:唯一约束

......

@ManyToMany(fetch = FetchType.EAGER)

表示多对多的关系

EAGER

表示取出这条数据时,它关联的数据也同时取出放入内存中

LAZY

取出这条数据时,它关联的数据并不取出来,在同一个session中,什么时候要用,就什么时候取(再次访问数据库)

@JoinTable(name = "UserRole",joinColumns = "{@}")

@JoinTable(name = "UserRole",joinColumns = "{@JoinColumn(name="userId")}",inverseJoinColumns = {@JoinColumn(name = "roleId")})

name="UserRole":注明中间表的表名

joinColumns:两个表之间的关联字段

 

 

@Transactional

@Transactional(isolation = Isolation.DEFAULT)

默认的事务隔离级别,使用数据库的事务隔离级别

@Transactional(isolation = Isolation.READ_UNCOMMITTED)

读未提交,最低级别的事务隔离级别,允许其他食物读取未提交的数据,这级别的事物容易产生脏读、不可重复度和幻读

@Transactional(isolation = Isolation.READ_COMMITTED)

读已提交,这种级别的事务隔离能读取其他事物已经修改的数据,不能读取未提交的数据,会产生不可重复读和幻读

@Transactional(isolation = Isolation.REPEATABLE_READ)

可重复度,这种级别的事务隔离可以防止不可重复读可脏读,但是会发生幻读

@Transactional(isolation = Isolation.SERIALIZABLE)

串行化,这是最高级别的事务隔离,会避免脏读,不可重复度和幻读。在这种隔离级别下事务会按照顺序进行

对脏读、幻读、不可重复读的理解

脏读

事务未提交,但是其他事务可以读到数据库中未提交的数据,并使用该数据

幻读

事务1 多次读取数据库数据,每次得到的结果都不同(期间有其他事物对数据库数据进行操作但是未提交

不可重复度

事务1 多次读取数据库数据,每次得到的结果都不同(期间有其他事务对数据库数据进行操作并提交了)

 对错误信息需要手动回滚
@Transactional(isolation = Isolation.SERIALIZABLE,rollbackFor = Exception.class)
public void deletePeriodInfo(BigDecimal timePeriodId) {
    try {

    } catch (Exception e) {
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚失误
    }
}

  

  

 

 

 

 

Swagger相关注解

@Api

用在Conntroller类上,协议集描述

@Api(value = "设备消息接口-DeviceController", description = "设备消息接口")

@ApiOperation

作用在方法上,给API增加方法说明

@ApiOperation("违规告警数量统计")

@ApiParam

作用于参数

@ApiParam(name = "page", value = "页码", defaultValue = "1", required = true) @QueryParam("page") int page,

name:参数名

value:说明

案例
@Component
@Path("alarm")
@ResponseBody
@Api(value = "报警消息接口-AlarmController", description = "报警消息接口")
public class AlarmController {    
    @GET
    @Path("countGroup")
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation("违规告警数量统计")
    @Authorization
    public ApiResult getCountGroup(
            @ApiParam(name = "groupId", value = "区域编号") @QueryParam("groupId") String groupId,
            @ApiParam(name = "precinctId", value = "企业编号") @QueryParam("precinctId") String precinctId,
            @ApiParam(name = "alarmType", value = "报警类型") @QueryParam("alarmType") int alarmType,
            @ApiParam(name = "startTime", value = "开始时间") @QueryParam("startTime") String startTime,
            @ApiParam(name = "endTime", value = "结束时间") @QueryParam("endTime") String endTime) {
        return ApiResult.Success(alarmService.getCountGroup(groupId, precinctId, alarmType, startTime, endTime));
    }
}

 

@ApiModel("报警分组统计实体")

用在返回对象类上,需要在controller引用才会生效

@ApiModel("报警分组统计实体")

@ApiModelProperty

使用在被 @ApiModel 注解的模型类的属性上

@ApiModelProperty(name = "alarmTypeName", value = "报警类型名称")

name:运行覆盖属性的名称。重写属性名称

value:属性简要说明

案例
package com.wiscom.vo;
​
/**
 * @program: base
 * @description: 报警分组统计
 * @author: 徐野宇
 * @create: 2019-12-23 16:42
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("报警分组统计实体")
public class AlarmGroupCount {
    @ApiModelProperty(name = "alarmType", value = "报警类型编号")
    private String alarmType;
    @ApiModelProperty(name = "alarmTypeName", value = "报警类型名称")
    private String alarmTypeName;
    @ApiModelProperty(name = "count", value = "报警数量")
    private int count;
}

 

 

lombok相关注解

@Data

注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法

@AllArgsConstructor

注在类上,提供类的全参构造

@NoArgsConstructor

注在类上,提供类的无参构造

@Setter

注在属性上,提供 set 方法

@Getter

注在属性上,提供 get 方法

@EqualsAndHashCode

注在类上,提供对应的 equals 和 hashCode 方法

@Log4j/@Slf4j

注在类上,提供对应的 Logger 对象,变量名为 log

案例
package com.wiscom.vo;
​
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
​
/**
 * @program: base
 * @description:
 * @author: 徐野宇
 * @create: 2019-12-17 18:37
 */
@ApiModel("企业分组统计实体")
@Data
public class PrecinctCountVO {
​
    @ApiModelProperty(name = "precinctId", value = "分组编号")
    private String precinctId;
​
    @ApiModelProperty(name = "precinctName", value = "分组名称")
    private String precinctName;
​
    @ApiModelProperty(name = "count", value = "数量")
    private int count;
}

 

posted @ 2020-08-20 17:14  minnersun  阅读(640)  评论(0编辑  收藏  举报