hibernate注解之简介(一)

 在学习hibernate中,我选择注解的方式,尽可能少的用到xml配置文件。注解简化了配置,使hibernate的程序具备更好地可读性。
 注解就用在实体bean和实体关系的注解
 pojo 类
 
1. @Entity   javax.persistence.Entity; 
             将一个类声明为一个实体bean(即一个持久化POJO类)。

2.@Table(name="t_core_HibernetBean",catalog = "users",schema="root")
   声明了该实体bean映射指定的表(table)
   catalog: 对应关系数据库中的catalog,如果在entitybean中设置此属性,将在表名前面加上catalog指定的值,注意catalog的值一定是数据库的名称,不然会生成的sql语句回报找不到表的错误。
   schema:对应关系数据库中的schema
   其中参数name,catalog,schema都可以省略,当name为空时,数据库中的表名默认的是class的名字

3.@Column(
    name="columnName";                                (1)
    boolean unique() default false;                   (2)
    boolean nullable() default true;                  (3)
    boolean insertable() default true;                (4)
    boolean updatable() default true;                 (5)
    String columnDefinition() default "";             (6)
    String table() default "";                        (7)
    int length() default 255;                         (8)
    int precision() default 0; // decimal precision   (9)
    int scale() default 0; // decimal scale           (10))
(1) name 可选,列名(默认值是属性名)
 
(2) unique 可选,是否在该列上设置唯一约束(默认值false)
 
(3) nullable 可选,是否设置该列的值可以为空(默认值false)
 
(4) insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
 
(5) updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
 
(6) columnDefinition 可选: 为这个特定列覆盖SQL DDL片段 (这可能导致无法在不同数据库间移植)
 
(7) table 可选,定义对应的表(默认为主表)
 
(8) length 可选,列长度(默认值255)
 
(8) precision 可选,列十进制精度(decimal precision)(默认值0)
 
(10) scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)


4. @Transient
 
声明了非持久化属性,即数据库中没有相应的映射字段,是一个普通属性。
 
5. @Temporal
 
声明了日期类型。
 
TemporalType.DATE 日期,例:2011-04-12
 
TemporalType.TIME 时间,例:22:50:30
 
TemporalType.TIMESTAMP 日期和时间,例:2011-04-12 22:51:30
 
6. @Version
 
声明了对乐观锁定的支持
 
例:@Version
 
       @Column(name="OPTLOCK")
 
       public Integer getVersion() { ... }
 
上面这个例子中,version属性将映射到 OPTLOCK列,entity manager使用该字段来检测更新冲突(防止更新丢失,请参考last-commit-wins策略)。
 
根据EJB3规范,version列可以是numeric类型(推荐方式)也可以是timestamp类型。Hibernate支持任何自定义类型,只要该类型实现了UserVersionType


7.自定义注解 (通过 @interface 关键字来定义)
例:
@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
@Documented
public @interface InitNameAnnotation {
 String value();
}
以上定义了一个注解,使用如下:
@Entity
@InitNameAnnotation("城市代码表")
@Table(name="t_core_city")
public class City extends BaseTreeObject

@Target:
 @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、
 类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。
 在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
 作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
 取值(ElementType)有:
        1.CONSTRUCTOR:用于描述构造器
    2.FIELD:用于描述域
    3.LOCAL_VARIABLE:用于描述局部变量
    4.METHOD:用于描述方法
    5.PACKAGE:用于描述包
    6.PARAMETER:用于描述参数
    7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention:
 @Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件
 中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,
 因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
 作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
 取值(RetentionPoicy)有:
        1.SOURCE:在源文件中有效(即源文件保留)
    2.CLASS:在class文件中有效(即class保留)
    3.RUNTIME:在运行时有效(即运行时保留)
@Documented:
 @Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。
 Documented是一个标记注解,没有成员。
 定义注解格式:
  public @interface 注解名 {定义体}
 
  注解参数的可支持数据类型:
 
    1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
    2.String类型
    3.Class类型
    4.enum类型
    5.Annotation类型
    6.以上所有类型的数组
 
  Annotation类型里面的参数该怎么设定:
  第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型;   
  第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String;  
  第三,如果只有一个参数成员,最好把参数名称设为"value",后加小括号.例:下面的例子FruitName注解就只有一个参数成员。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值