zoukankan      html  css  js  c++  java
  • 实体映射基础

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

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

    1
    2
    3
    4
    5
    6
    @Entity
    public class ContaceEO {
       ...
       ContactEO() {...}
       ...
    }

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

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

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

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

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

    1
    2
    3
    4
    create table contact (
      id int(20) not null,
      name varchar(50) default null,
    )

    实体类代码改为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Entity
    @Table(name="contact")
    public class ContactEO implements java.io.Serializable {
      @Id
      private Integer id;
     
      @Column(name="name")
      private String name;
     
      //省略get、set方法
    }

    @Table的属性定义如下:

    1
    2
    3
    4
    5
    6
    7
    @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标记属性表示该实体所关联的唯一约束条件,一个实体可以有多个唯一约束条件 

    1
    2
    3
    4
    @Entity
    @Table(name="contact", uniqueConstraints = {
      @UniqueConstraint(columnNames = {"name", "email"})
    })

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

    1
    2
    ...
    unique key name_email (name,email)

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @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语句,代码如下: 

    1
    2
    @Column(name="constact_name", columnDefinition="clob not null")
    private String name;

    生成的SQL语句如下:

    1
    2
    3
    4
    5
    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)类

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

    1
    2
    3
    4
    5
    @Target({METHOD, FIELD}) @Retention(RUNTIME)
    public @interface Basic {
      FetchType fetch() default EAGER;
      boolean optional() default true;
    }
  • 相关阅读:
    Linux系统下公式编辑器KLatexFormula
    C++11 std::chrono库详解
    Direct Visual-Inertial Odometry with Stereo Cameras
    改变机器人的初始位姿,让机器人的初始位置不在地图的原点处
    ubuntu为文件添加可执行权限
    oracle的启动和停用
    orcale创建用户、授权
    手工配置oracle数据库
    MySQL存储过程详解 mysql 存储过程
    mysql的navicat执行存储过程
  • 原文地址:https://www.cnblogs.com/yudar/p/4249004.html
Copyright © 2011-2022 走看看