实体映射基础(二)

一个普通的POJO类通过标注@Entity可以映射成为可持久化的类,可持久化的类可以对应数据库中的数据。映射成为实体类要依赖一些特定的规则。

1、映射实体@Entity
标注为@Entity注释的类,表示该类是一个可持久化的类,当在容器中时,服务器将会首先加载所有标注了@Entity注释的实体类,例如:

1

@Entity

2

public class ContaceEO {

 

3

   ...

4

   ContactEO() {...}

 

5

   ...

6

}

@Entity注释的定义的属性如下:

1

@Target(TYPE) @Retention(RUNTIME)

2

public @interface Entity {

 

3

  String name() default "";

4

}

其中name属性表示实体的名字,若不作设置,默认为标注实体类的名称。
注:标注为@Entity的实体类至少要有一个无参的构造方法。

2、标注主键(@Id
用于标注实体类中关联数据库的主键

3、映射表(@Table)、映射方法和属性(@Column
如下表结构:

1

create table contact (

2

  id int(20) not null,

 

3

  name varchar(50) default null,

4

)

实体类代码改为:

01

@Entity

02

@Table(name="contact")

 

03

public class ContactEO implements java.io.Serializable {

04

  @Id

 

05

  private Integer id;

06

 

 

07

  @Column(name="name")

08

  private String name;

 

09

 

10

  //省略get、set方法

 

11

}

@Table的属性定义如下:

1

@Target({TYPE}) @Retention(RUNTIME)

2

public @interface Table {

 

3

  String name() default "";

4

  String catalog() default "";

 

5

  String schema() default "";

6

  UniqueConstraint[] uniqueConstraints() default {};

 

7

}

要注意一下几个问题: 
a、该标记要在类前面 
bname属性表示实体对应的表的名称 
ccatalogshema属性表示实体指定的目录名或数据库名 
duniqueConstraints标记属性表示该实体所关联的唯一约束条件,一个实体可以有多个唯一约束条件 

1

@Entity

2

@Table(name="contact", uniqueConstraints = {

 

3

  @UniqueConstraint(columnNames = {"name", "email"})

4

})

表示指定表的nameemail字段为唯一表示,也就是说不能同时存在完全相同的nameemail值的记录,相当于sql中:

1

...

2

unique key name_email (name,email)

@Column标记的属性定义如下:

01

@Target({METHOD,FIELD}) @Retention(RUNTIME)

02

public @interface Column {

 

03

  String name() default "";

04

  boolean unique() default false;

 

05

  boolean nullable() default true;

06

  boolean insertable() default true;

 

07

  boolean updateable() default true;

08

  String columnDefinition() default "";

 

09

  String table() default "";

10

  int length() default 255;

 

11

  int precision() default 0;

12

  int scale() default 0;

 

13

}

使用@Column标记要注意几个问题: 
a、此标记可以标注在getter方法前或属性前 
bunique属性表示该字段是否是唯一标识,默认为false 
ccolumnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。 
dtable属性表示当映射多个表时,指定表的表中的字段。 
eprecision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。 
例如:自定义CLOB类型字段的SQL语句,代码如下: 

1

@Column(name="constact_name", columnDefinition="clob not null")

2

private String name;

生成的SQL语句如下:

1

create table contact (

2

  id int not null;

 

3

  contact_name clob(200) not null;

4

  primary key (id)

 

5

)


4
、可持久化的基础数据类型
1Java基础类型:byte, int, short, long, boolean, char, float, double
2Java基础数据类型对应的封装类: Byte, Integer,Short, Long, Boolean, Character, Float, Double
3)字节和字符型数组: byte[], Byte[],char[], Character[]
4)大数值类型: java.math.BigInteger, java.math.BigDecimal
5)字符串类型:String
6)时间日期类型:java.util.Date, java.util.Calendar, java.sql.Date,java.sql.Time, java.sql.TimeStamp
7)枚举类型:用户定义的枚举类型
8Entity类型:标注为@Entity的类
9)包含Entity类型的集合Collection类:java.util.Collection, java.util.List, java.util.Map
10)嵌入式(embeddable)类

5.@Basic 设置加载方式
它的定义如下:

1

@Target({METHOD, FIELD}) @Retention(RUNTIME)

2

public @interface Basic {

 

3

  FetchType fetch() default EAGER;

4

  boolean optional() default true;

 

5

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值