部分注解整理

部分常用注解整理

当项目变得比较大的时候,如何还使用hbm.xml文件来配置Hibernate实体就会变得比较复杂。这里Hibernate提供了Annotation注解方式,使得Hibernate的映射文件变得很方便管理了。

Dao层

@Repository

用于将数据访问层(DAO层)的类标识为Spring Bean。具体只需将该注解标注在DAO类上即可。同时,为了让Spring 能够扫描类路径中的类并识别出@Repository注解,需要在XML配置文件中启用Bean的自动扫描功能,这可以通过实现。

问:为什么@Repository只能标注在DAO?

答:这是因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为Spring的数据访问异常类型。

@Component

是一个泛化的概念,仅仅表示一个组件(Bean),可以作用在任何层次。默认Bean名称会是小写开头的非限定类名。

Service层

@Service

通常作用在业务层,但是目前该功能与@Component相同。

Controller层

@Controller

通常作用在控制层,但是目前该功能与@Component相同。

@RestController

@Valid

@RequestBody

@RequestMapping

@RequestMapping("/VIID/Face/add")

@PostMapping

@GetMapping

@RequiresAuthentication

验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时。

@RequiresUser

验证用户是否被记忆,user有两种含义:
一种是成功登录的(subject.isAuthenticated() 结果为true);
另外一种是被记忆的(subject.isRemembered()结果为true)。

@RequiresGuest

验证是否是一个guest的请求,与@RequiresUser完全相反。
换言之,RequiresUser == !RequiresGuest。
此时subject.getPrincipal() 结果为null.

@RequiresRoles

例如:@RequiresRoles(“aRoleName”);
void someMethod();
如果subject中有aRoleName角色才可以访问方法someMethod。如果没有这个权限则会抛出异常AuthorizationException。

@RequiresPermissions

例如: @RequiresPermissions({“file:read”, “write:aFile.txt”} )
void someMethod();
要求subject中必须同时含有file:read和write:aFile.txt的权限才能执行方法someMethod()。否则抛出异常AuthorizationException。

@Autowired和@Resource

PoJo

@Entity

方面描述
使用用于类上方
作用表明该类为实体类
注意若该类名为UserEntity,其默认对应数据库中表名为user_entity

@Table

方面描述
使用用于类上方
作用声明此对象映射到数据库的数据表。当实体类与其映射表名不同时,常与@Entity注解并列使用,置于实体类声明语句之前

属性说明如下:

  • name:指明表名;
  • catalog和schema:用于设置表所属的数据库目录和模式。

@Column

方面描述
使用用于属性/get方法上方
作用将成员属性映射到关系表中的哪一列和该列的结构信息

属性说明如下:

  • name:映射的列名。例如:映射tb_user表的name列,可用于name属性上面或getName方法上面;

  • unique:是否唯一;

  • nullable:是否允许为空;

  • length:对于字符型列,length属性指定列的最大字符长度;

  • insertable:是否允许插入;

  • updatetable:是否允许更新;

  • columnDefinition:定义建表时创建此列字段的DDL:

    @Column(columnDefinition ="text")
    
  • secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。

@Id

方面描述
使用用于属性/get方法上方
作用指定表的主键

@GeneratedValue

方面描述
使用用于属性/get方法上方
作用指定主键生成方式。主键可以有多种生成方式

说明:

  • TABLE:使用一个特定的数据库表格来保存主键。容器指定用底层的数据表确保唯一;
  • SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。使用数据库的SEQUENCE列来保证唯一(Oracle数据库通过序列来生成唯一ID);
  • IDENTITY:由数据库自动生成(主要是自动增长型)。使用数据库的IDENTITY列来保证唯一;
  • AUTO:主键由程序控制。由容器挑选一个合适的方式来保证唯一;
  • NONE:容器不负责主键的生成,由程序来完成。

举例:

@GeneratedValue(strategy = GenerationType.IDENTITY)

@JsonInclude

举例:

@JsonInclude(JsonInclude.Include.NON_NULL)

@Temporal

举例:

@Temporal(TemporalType.TIMESTAMP)

一对一、一对多、多对一、多对多

举例:

@OneToMany(fetch = FetchType.EAGER, mappedBy ="grayListReq", cascade = CascadeType.ALL)
@OneToOne(optional= true, mappedBy ="person", cascade = CascadeType.ALL)
@ManyToOne(fetch = FetchType.LAZY)

说明:

  • FetchType.EAGER 表示非延迟加载
  • FetchType.LAZY 表示延迟加载

@JoinColumn

举例:

@JoinColumn(name ="grayList_id", referencedColumnName ="id", nullable = false)

Jackson相关

@Transient

方面描述
使用用于属性上方
作用表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性
注意如果一个属性并非表映射字段,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic

举例:

// 表示该字段在数据库表中没有
@Transient
public int getAge() {
return 1+1;
}

@JsonIgnoreProperties

方面描述
使用此注解是类注解
作用在json序列化时,将java bean中的一些属性忽略掉,序列化和反序列化都受影响

@JsonIgnore

方面描述
使用此注解用于属性或者方法上(最好是属性上)
作用和上面的@JsonIgnoreProperties一样
注意问:若当表间有One2Many或Many2One时,会发生无限循环的场景,如何破? 答:只要在Set方法前增加以下注解即可。

@JsonFormat

方面描述
使用此注解用于属性或者方法上(最好是属性上)
作用可以方便的把Date类型直接转化为我们想要的模式

举例:

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

@JsonSerialize

方面描述
使用此注解用于属性或者getter方法上
作用用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点

@JsonDeserialize

方面描述
使用此注解用于属性或者setter方法上
作用用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize

JAXB注解

@XmlRootElement

@XmlAccessorType

举例:

@XmlAccessorType(XmlAccessType.FIELD)

@JsonInclude

举例:

@JsonInclude(JsonInclude.Include.NON_NULL)

Unit基本注解

  • @BeforeClass – 表示在类中的任意public static void方法执行之前执行
  • @AfterClass – 表示在类中的任意public static void方法执行之后执行
  • @Before – 表示在任意使用@Test注解标注的public void方法执行之前执行
  • @After – 表示在任意使用@Test注解标注的public void方法执行之后执行
  • @Test – 使用该注解标注的public void方法会表示为一个测试方法

参考博客:

https://www.cnblogs.com/hezhiyao/p/9440277.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值