博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实体映射基础(二)
阅读量:6970 次
发布时间:2019-06-27

本文共 2850 字,大约阅读时间需要 9 分钟。

hot3.png

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

1、映射实体 (@Entity)

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

@Entitypublic class ContaceEO {   ...   ContactEO() {...}   ...}

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

@Target(TYPE) @Retention(RUNTIME)public @interface Entity {  String name() default "";}

其中name属性表示实体的名字,若不作设置,默认为标注实体类的名称。

注:标注为@Entity的实体类至少要有一个无参的构造方法。

2、标注主键(@Id)

用于标注实体类中关联数据库的主键
3、映射表(@Table)、映射方法和属性(@Column)
如下表结构:

create table contact (  id int(20) not null,  name varchar(50) default null,)
实体类代码改为:
@Entity@Table(name="contact")public class ContactEO implements java.io.Serializable {  @Id  private Integer id;  @Column(name="name")  private String name;  //省略get、set方法}
@Table的属性定义如下:
@Target({TYPE}) @Retention(RUNTIME)public @interface Table {  String name() default "";  String catalog() default "";  String schema() default "";  UniqueConstraint[] uniqueConstraints() default {};}
要注意一下几个问题:
a、该标记要在类前面
b、name属性表示实体对应的表的名称
c、catalog和shema属性表示实体指定的目录名或数据库名
d、uniqueConstraints标记属性表示该实体所关联的唯一约束条件,一个实体可以有多个唯一约束条件
@Entity@Table(name="contact", uniqueConstraints = {  @UniqueConstraint(columnNames = {"name", "email"})})
表示指定表的name和email字段为唯一表示,也就是说不能同时存在完全相同的name和email值的记录,相当于sql中:
...unique key name_email (name,email)
@Column标记的属性定义如下:
@Target({METHOD,FIELD}) @Retention(RUNTIME)public @interface Column {  String name() default "";  boolean unique() default false;  boolean nullable() default true;  boolean insertable() default true;  boolean updateable() default true;  String columnDefinition() default "";  String table() default "";  int length() default 255;  int precision() default 0;  int scale() default 0;}
使用@Column标记要注意几个问题:
a、此标记可以标注在getter方法前或属性前
b、unique属性表示该字段是否是唯一标识,默认为false
c、columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。
d、table属性表示当映射多个表时,指定表的表中的字段。
e、precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。
例如:自定义CLOB类型字段的SQL语句,代码如下:
@Column(name="constact_name", columnDefinition="clob not null")private String name;
生成的SQL语句如下:
create table contact (  id int not null;  contact_name clob(200) not null;  primary key (id))

4、可持久化的基础数据类型
(1)Java基础类型:byte, int, short, long, boolean, char, float, double
(2)Java基础数据类型对应的封装类: 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)枚举类型:用户定义的枚举类型
(8)Entity类型:标注为@Entity的类
(9)包含Entity类型的集合Collection类:java.util.Collection, java.util.List, java.util.Map
(10)嵌入式(embeddable)类

设置加载方式

它的定义如下:

@Target({METHOD, FIELD}) @Retention(RUNTIME)public @interface Basic {  FetchType fetch() default EAGER;  boolean optional() default true;}

转载于:https://my.oschina.net/liangbo/blog/91758

你可能感兴趣的文章
第十一章:【UCHome二次开发】功能修改
查看>>
PYTHON2.day10
查看>>
隐式类型转换
查看>>
关于网页前端的技术分享
查看>>
2018湖南多校第二场-20180407 Barareh on Fire
查看>>
批量杀死MySQL连接的几种方法
查看>>
3.05 在一个表中查找与其他表不匹配的记录
查看>>
python 截取汉字拼音首字母
查看>>
[zz]LIS
查看>>
附加作业:源自刘乾老师的问题
查看>>
硬件篇之MMU
查看>>
如何打包成jar包自己看呢?
查看>>
不可变数组和可变数组
查看>>
Poj(2253),Dijkstra松弛条件的变形
查看>>
Poj(2195),最小费用流,SPFA
查看>>
shell编程系列4--有类型变量:字符串、只读类型、整数、数组
查看>>
WP开发笔记——去除 HTML 标签
查看>>
Json数据序列化对象,及对象序列化为Json格式
查看>>
vue.js的事件绑定与监听
查看>>
ipad%E5%A3%81%E7%BA%B81-1000x288.jpg
查看>>