SSH2框架相关注解数据库
Spring自动装备相关注解:app
@Repsoitorty---Dao类自动注入框架
@Service---业务类自动注入ide
@Controller---Action自动注入工具
@AutoWare---自动装配已注入fetch
JPA相关注解ui
用于领域建模:spa
@Entity(name="EntityName")hibernate
必须对象
name:可选,对应数据中的一个表
@Table(name="",catalog="",schema="")
可选,一般和@Entity配合使用,只能标注在实体的class定义处,表示实体对应书库表的信息
name:可选,表示表的是名称,默认地,代表和实体名称一直,只有在不一致的状况下才须要指定表名称
catalog:可选,表示catalog名称,默认为Catalog("");
Schema:可选表示schema名称,默认为Schema("");
@id
必须
定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为逐渐,至于getXxxx()前。
@GeneratedValue(strategy=GenerationType,generator="")
可选
Staregy:表示主键生成策略,有AUTO,INDENTITY,SEQUENCE和TABLE四种,分别表示1、让ORM框架自动选择
二、更具数据库的identity字段生成
三、更具数据表的sequence字段生成,以有更具一个额外的表生成主键,默认为Auto
Generator:表示根据逐渐生成器的名称,这个属性一般和ORM框架相关,例如,hibernate能够指定uuid等逐渐生成方式
示例:
@id
@GeneratedValues(strategy=Strategy.SEQUENCE)
public int getPk(){
return pk;
}
@Basic(fetch=FetchType,optional=true)
可选
@Basic表示一个简单的属性到数据库表的字段映射,对于没有任何标注的getXxxx()方法,默认即为@Basic
Fetch:表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER
Optional:表示该属性是否容许为null,默认为true
示例:
@Basic(optional=false)
public String getAddress(){
return address;
}
@Column 可选
@Column 描述了数据库表中该字段的详细定义 , 这对于根据 JPA 注解生成数据库表结构的工具很是有做用 .
name: 表示数据库表中该字段的名称 , 默认情形属性名称一致
nullable: 表示该字段是否容许为 null, 默认为 true
unique: 表示该字段是不是惟一标识 , 默认为 false
length: 表示该字段的大小 , 仅对 String 类型的字段有效
insertable: 表示在 ORM 框架执行插入操做时 , 该字段是否应出现 INSETRT 语句中 , 默认为 true
updateable: 表示在 ORM 框架执行更新操做时 , 该字段是否应该出如今 UPDATE 语句中 , 默认为 true. 对于一经建立就不能够更改的字段 , 该属性很是有用 , 如对于 birthday 字段 .
columnDefinition: 表示该字段在数据库中的实际类型 . 一般 ORM 框架能够根据属性类型自动判断数据库中字段的类型 , 可是对于 Date 类型仍没法肯定数据库中字段类型到底是 DATE,TIME 仍是 TIMESTAMP. 此外 ,String 的默认映射类型为 VARCHAR, 若是要将 String 类型映射到特定数据库的 BLOB 或 TEXT 字段类型 , 该属性很是有用 .
示例 :
@Column(name="BIRTH",nullable="false",columnDefinition="DATE")
public String getBithday() {
return birthday;
}
@Transient
可选
@Transient 表示该属性并不是一个到数据库表的字段的映射 ,ORM 框架将忽略该属性 .
若是一个属性并不是数据库表的字段映射 , 就务必将其标示为 @Transient, 不然 ,ORM 框架默认其注解为 @Basic
示例 :
// 根据 birth 计算出 age 属性
@Transient
public int getAge() {
return getYear(new Date()) - getYear(birth);
}
@ManyToOne(fetch=FetchType,cascade=CascadeType ) 可选
@ManyToOne 表示一个多对一的映射 , 该注解标注的属性一般是数据库表的外键
optional: 是否容许该字段为 null, 该属性应该根据数据库表的外键约束来肯定 , 默认为 true
fetch: 表示抓取策略 , 默认为 FetchType.EAGER
cascade: 表示默认的级联操做策略 , 能够指定为 ALL,PERSIST,MERGE,REFRESH 和 REMOVE 中的若干组合 , 默认为无级联操做
targetEntity: 表示该属性关联的实体类型 . 该属性一般没必要指定 ,ORM 框架根据属性类型自动判断 targetEntity.
示例 :
// 订单 Order 和用户 User 是一个 ManyToOne 的关系
// 在 Order 类中定义
@ManyToOne()
@JoinColumn(name="USER")
public User getUser() {
return user;
}
@JoinColumn
可选
@JoinColumn 和 @Column 相似 , 介量描述的不是一个简单字段 , 而一一个关联字段 , 例如 . 描述一个 @ManyToOne 的字段 .
name: 该字段的名称 . 因为 @JoinColumn 描述的是一个关联字段 , 如 ManyToOne, 则默认的名称由其关联的实体决定 .
例如 , 实体 Order 有一个 user 属性来关联实体 User, 则 Order 的 user 属性为一个外键 ,
其默认的名称为实体 User 的名称 + 下划线 + 实体 User 的主键名称
示例 :
见 @ManyToOne
@OneToMany(fetch=FetchType,cascade=CascadeType)
可选
@OneToMany 描述一个一对多的关联 , 该属性应该为集体类型 , 在数据库中并无实际字段 .
fetch: 表示抓取策略 , 默认为 FetchType.LAZY, 由于关联的多个对象一般没必要从数据库预先读取到内存
cascade: 表示级联操做策略 , 对于 OneToMany 类型的关联很是重要 , 一般该实体更新或删除时 , 其关联的实体也应当被更新或删除
例如 : 实体 User 和 Order 是 OneToMany 的关系 , 则实体 User 被删除时 , 其关联的实体 Order 也应该被所有删除
示例 :
@OneTyMany(cascade=ALL)
public List getOrders() {
return orders;
}
@OneToOne(fetch=FetchType,cascade=CascadeType)
可选
@OneToOne 描述一个一对一的关联
fetch: 表示抓取策略 , 默认为 FetchType.LAZY
cascade: 表示级联操做策略
示例 :
@OneToOne(fetch=FetchType.LAZY)
public Blog getBlog() {
return blog;
}
@ManyToMany
可选
@ManyToMany 描述一个多对多的关联 . 多对多关联上是两个一对多关联 , 可是在 ManyToMany 描述中 , 中间表是由 ORM 框架自动处理
targetEntity: 表示多对多关联的另外一个实体类的全名 , 例如 :package.Book.class
mappedBy: 表示多对多关联的另外一个实体类的对应集合属性名称
示例 :
User 实体表示用户 ,Book 实体表示书籍 , 为了描述用户收藏的书籍 , 能够在 User 和 Book 之间创建 ManyToMany 关联