国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JPA學習(2)注解

2019-11-14 14:56:56
字體:
來源:轉載
供稿:網友

上一篇學習了JPA的helloworld,也初略的使用了一些注解,接下來就細細的了解一下有哪些注解,和這些注解的作用

  JPA的基本注解:

 ?、貮Entity,@Table,@Id,@GeneratedValue,@Column,@Basic,這些是最基本的注解了
   一:@Entity: 標注用于實體類聲明語句之前,指出該java 類為實體類,將映射到指定的數據庫表。如聲明一個實體類 User,它將映射到數據庫中的 user 表上。如果沒有使用@Table注解的話,那么vo的名稱是什么,那么相應的數據表的名稱也是vo的名稱。
   二:@Table:當實體類與其映射的數據庫表名不同名時需要使用 @Table 標注說明,該標注與 @Entity 標注并列使用,置于實體類聲明語句之前,可寫于單獨語句行,也可與聲明語句同行。 @Table 標注的常用選項是 name,用于指明數據庫的表名 @Table標注還有一個兩個選項 catalog 和 schema 用于設置表所屬的數據庫目錄或                          模式,通常為數據庫名。uniqueConstraints 選項用于設置約束條件,通常不須設置。
     三:@Id 標注用于聲明一個實體類的屬性映射為數據庫的主鍵列。該屬性通常置于屬性聲明語句之前,可與聲明語句同行,也可寫在單獨行上。 @Id標注也可置于屬性的getter方法之前。

   四:@GeneratedValue 用于標注主鍵的生成策略,通過 strategy 屬性指定。默認情況下,JPA 自動選擇一個最適合底層數據庫的主鍵生成策略:SqlServer 對應         identity,MySQL 對應 auto increment。 在 javax.persistence.GenerationType 中定義了以下幾種可供選擇的策略: IDENTITY:采用數據庫 ID自增長的方式來自增主鍵字段,Oracle 不支持這種方式; AUTO: JPA自動選擇合適的策略,是默認選項; SEQUENCE:通過序列產生主鍵,通過 @SequenceGenerator 注解指定序列名,MySql 不支持這種方式 TABLE:通過表產生主鍵,框架借由表模擬序列產生主鍵,使用該策略可以使應用更易于數據庫移植。
   五:@Basic 表示一個簡單的屬性到數據庫表的字段的映射,對于沒有任何標注的 getXxxx() 方法,默認即為@Basic fetch: 表示該屬性的讀取策略,有 EAGER 和 LAZY 兩種, 分別表示主支抓取和延遲加載,默認為 EAGER. optional:表示該屬性是否允許為null, 默認為true

@Transient:

  表示該屬性并非一個到數據庫表的字段的映射,ORM框架將忽略該屬性. 如果一個屬性并非數據庫表的字段映射,就務必將其標示為@Transient,否則,ORM框架默認其注解為    @Basic

@Temporal

  在核心的 Java API 中并沒有定義 Date 類型的精度(temporal PRecision). 而在數據庫中,表示 Date 類型的數據有 DATE, TIME, 和 TIMESTAMP 三種精度(即單純的日期,時間,或者兩者 兼備). 在進行屬性映射時可使用@Temporal注解來調整精度.

@Table這個注解就比較多的內容了
   這個注解的的意思就是說主鍵生成策略是放在一個數據表中,每次使用的時候,就在數據表中查詢,根據自己設置的策略,來生成主鍵。
   我在mysql數據庫中創建了:

  

,數據表,PK_NAME存放的就是我們哪一個表使用的策略,ID_VAL存放的就是主鍵,每次我們創建的記錄的時候,主鍵就是使用ID_VAL作為參照.下面就是我存放的記錄,

我現在的注解是:

package com.hotusm.commom.entity;import java.io.Serializable;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;import javax.persistence.TableGenerator;@Table(name="USER")@Entitypublic class User implements Serializable{        /**     *      */    private static final long serialVersionUID = 1L;    private Integer id;    private String name;        private String userDesc;    @TableGenerator(name="GENERATORS",//名稱   需要和@GeneratedValue中的generator值一樣                    table="ID_GENERATOR",//對應我們創建的主鍵策略數據表的表名                    pkColumnName="PK_NAME",//對應創建的主鍵策略數據表存放信息的那個字段,和后面pkColumnValue一起就可以確定一行                    pkColumnValue="ID_USER",//這個字段是PK_NAME的值                    valueColumnName="ID_VAL",//由pkColumnName,pkColumnValue可以確定一行,由這個就可以確定是哪一個字段了                    allocationSize=1,//每次主鍵增長的大小ID_VAL剛開始設置了,那么就不起作用                    initialValue=1//初始化的大小,如果數據表中的            )    @GeneratedValue(strategy=GenerationType.TABLE,generator="GENERATORS")    @Id    public Integer getId() {        return id;    }        public void setId(Integer id) {        this.id = id;    }        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }        @Column(name="user_desc")    public String getDesc() {        return userDesc;    }    public void setDesc(String desc) {        this.userDesc = desc;    }    }

這樣,我們每次創建表的時候,主鍵就能夠根據我們設置的策略進行增長了,但是這種方式不是很常用的,除非是一些特定的業務需求。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆安县| 徐水县| 桐柏县| 台南市| 金平| 西和县| 建德市| 西丰县| 武隆县| 普安县| 葵青区| 天全县| 乐陵市| 高青县| 五大连池市| 鹤壁市| 伊吾县| 花垣县| 成武县| 无锡市| 渭源县| 平和县| 合作市| 尼木县| 克什克腾旗| 福清市| 定日县| 白山市| 化州市| 芦溪县| 潞城市| 方山县| 香港| 甘孜| 台湾省| 额尔古纳市| 电白县| 光山县| 宜昌市| 海盐县| 淮安市|