常用注解及属性

来源:互联网 发布:sublime json高亮插件 编辑:程序博客网 时间:2024/05/23 05:08

平时用xml居多,今天用到注解时,发现自己有些东西很模糊了,知其源不知其所以源,特地记录下。


根据注解使用方法和用途,我们可以将Annotation分为三类:
1.内建立注解
2.自定义注解
3.元注解

这里写图片描述

下面是一些常用注解:
这里写图片描述

@Repositpry
放在dao层的类上面,@Repositpry(“….”)


@Service
放在serv层上面,@Service(“….”)
括号类不写,生成的 名字 为是类名首字母小写。
如果struts2.xml中是默认按名字匹配的,那么这个id要和Action类中属性名一致。要不就在struts2.xml中配置按类型匹配。


@Entity
放在实体类上面,类名最好和数据库名保持一致


@Table(name=”“,catalog=”“,schema=”“)
放在实体类上面
可选,通常和@Entity 配合使用,只能标注在实体类 定义处,表示实体对应的数据库表的信息。
name - 可选,表示表的名称,默认地,表名和实体名称一致,只有在不一致的情况下才需 要指定表名
catalog - 可选,表示Catalog名称,默认为 Catalog(“”).
schema - 可选 , 表示 Schema 名称 , 默认为Schema(“”).一个用户就是一个Schema.


@Transactional
配在类上,该类的所以public方法都添加事务切面
参数 propagation 是个枚举类型,可选:MANDATORY/NESTED/NEVER/NOT_SUPPORTED/REQUIRED/REQUIRES_NEW
如:@Transactional(propagation=Propagation.SUPPORTS),如不了解事务传播机制的可以参考 事务机制


@Autowired
自动匹配 默认按名字匹配


@Transient
将属性忽略,这个一般用映射的时候。


@Version
定义乐观锁


@Id
配置id属性,数据库对应的主键,在实体类中使用,定义在id属性上或者getter方法上。JPA提供四种标准用法:TABLE,SEQUENCE,IDENTITY,AUTO.

  • TABLE:使用一个特定的数据库表格来保存主键。
  • SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
  • IDENTITY:主键由数据库自动生成(主要是自动增长型)
  • AUTO:主键由程序控制。
    这里写图片描述

@GeneratedValu
用来定义主键生成策略 @GeneratedValue和@SequenceGenerator要配合使用:
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “chk_result”)

  • strategy=GenerationType.AUTO 根据底层数据库自动选择(/默认/),若数据库支持自动增长类型,则为自动增长。
  • GenerationType.INDENTITY - 根据数据库的Identity字段生成,支持DB2、MySQL、MS、SQL Server、SyBase与HyperanoicSQL数据库的Identity类型主键。
  • GenerationType.SEQUENCE - 使用Sequence来决定主键的取值,适合Oracle、DB2等,支持Sequence的数据库,一般结合@SequenceGenerator使用。
  • GenerationType.TABLE - 使用指定表来决定主键取值,结合@TableGenerator使用。如:
    • @Id
      @TableGenerator(name=”tableName”,allocationSize=1)
      @GeneratedValue(Strategy=GenerationType.Table)

@SequenceGenerator
声明了一个数据库序列 sequenceName是数据库序列名
@SequenceGenerator(name = “chk_result”, sequenceName = “SEQ_CHECK_RESULT”, allocationSize = 1)

  • name 必需 必须匹配startegy 中SEQUENCE 的
  • allocationSize 可选 默认值:50 每次主键值增加的大小
  • initialValue 可选 默认值:0 表示主键初始值
  • sequenceName 可选 默认值:JPA 持续性提供程序分配它自己创建的序列名

@Column
将属性映射到列使用该注解来覆盖默认值,@Column描述了数据库表中该字段的详细定义。
@Column(name = “ID”, unique = true, nullable = false, precision = 10, scale = 0)

  • name - 可选,表示数据库表中该字段的名称,默认情形属性名称一致
  • nullable - 可选,表示该字段是否允许为 null,默认为 true
  • unique - 可选,表示该字段是否是唯一标识,默认为 false
  • length - 可选,表示该字段的大小,仅对 String 类型的字段有效,默认值255.
  • insertable - 可选,表示在ORM框架执行插入操作时,该字段是否应出现INSETRT语句中,默认为 true
  • updateable - 可选,表示在ORM 框架执行更新操作时,该字段是否应该出现在 UPDATE 语句中,默认为 true.
  • columnDefinition - 可选,表示该字段在数据库中的实际类型。

@Basic
用于声明属性的存取策略:
@Basic(fetch=FetchType.EAGER) 即时获取(默认的存取策略)
@Basic(fetch=FetchType.LAZY) 延迟获取


@Temporal
用于定义映射到数据库的时间精度:
@Temporal(TemporalType=DATE) 日期
@Temporal(TemporalType=TIME) 时间
@Temporal(TemporalType=TIMESTAMP) 两者兼具


@OneToOne、@OneToMany、@ManyToOne、ManyToMany的共有属性:
这里写图片描述
- fetch - 配置加载方式。取值有:
- Fetch.EAGER - 及时加载,多对一默认是Fetch.EAGER
- Fetch.LAZY - 延迟加载,一对多默认是Fetch.LAZY
- cascade - 设置级联方式,取值有:
- CascadeType.PERSIST - 保存
- CascadeType.REMOVE - 删除
- CascadeType.MERGE - 修改
- CascadeType.REFRESH - 刷新
- CascadeType.ALL - 全部

  • targetEntity - 配置集合属性类型
    • 如:@OneToMany(targetEntity=Book.class)

@JoinColumn
可选,用于描述一个关联的字段。@JoinColumn和@Column类似,介量描述的不是一个简单字段,而是一个关联字段,例如描述一个 @ManyToOne 的字段。
如下:’雇员类’中的属性 ‘Department department’对应的是雇员表中 ‘DEPARTMENT_ID’ 列;

@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "DEPARTMENT_ID")public Department getDepartment() {    return this.Department;}

@OneToOne
表示一个一对一的映射
1.主表类A与从表类B的主键值相对应。
主表:

@OneToOne(cascade = CascadeType.ALL)@PrimaryKeyJoinColumnpublic B getB(){Return b;}

从表:无

2.主表A中有一个从表属性是B类型的b
主表:

@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name="主表外键")   //这里指定的是数据库中的外键字段。public B getB(){return b;}

从表:无

3.主表A中有一个从表属性是B类型的b,同时,从表B中有一个主表属性是A类型的a
主表:

@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name="主表外键")   //这里指定的是数据库中的外键字段。public B getB(){return b;}

从表:

@OneToOne(mappedBy = "主表类中的从表属性")public 主表类 get主表类(){return

注意:@JoinColumn是可选的。默认值是从表变量名+”_”+从表的主键(注意,这里加的是主键。而不是主键对应的变量)。


@ManyToOne
表示一个多对一的映射,该注解标注的属性通常是数据库表的外键。
在多方:
@ManyToOne(targetEntity=XXXX.class) //指定关联对象
@JoinColumn(name=”“) //指定产生的外键字段名

双向多对一:配置方式同双向一对多。示例 :
// 订单 Order 和用户 User 是一个 ManyToOne 的关系
// 在 Order 类中定义
@ManyToOne()
@JoinColumn(name=”USER”)
public User getUser() { return user;}


/@OneToMany
描述一个一对多的关联,该属性应该为集合类型,在数据库中并没有实际字段。
1.单向一对多:一方有集合属性,包含多个多方,而多方没有一方的引用。

  • @OneToMany 默认会使用连接表做一对多关联,添加@JoinColumn(name=”xxx_id”) 后,就会使用外键关联,而不使用连接表了。

2.双向一对多
1)在多方
@ManyToOne
@JoinColumn(name=”自己的数据库外键列名”)
2)在一方
@OneToMany(mappedBy=”多端的关联属性名”)
@JoinColumn(name=”对方的数据库外键列名”)


@ManyToMany
可选,描述一个多对多的关联。
属性:
targetEntity - 表示多对多关联的另一个实体类的全名,例如:package.Book.class
mappedBy - 用在双向关联中,把关系的维护权翻转。

1.单向多对多关联:在主控方加入@ManyToMany注解即可。2.双向多对多关联:两个实体间互相关联的属性必须标记为@ManyToMany,并相互指定targetEntity属性。有且只有一个实体的@ManyToMany注解需要指定mappedBy属性,指向targetEntity的集合属性名称。        、
1 0
原创粉丝点击