hibernate之對應檔VS映射註解

來源:互聯網
上載者:User

標籤:getname   package   ssi   character   自增   ppi   類方法   理解   get   

前言

  對於java開發人員而言,註解應該不是一個陌生的概念,早在JavaSE階段,例如@Override標記重寫父類方法或實現介面方法,@Test標記單元測試方法,所以我們可以簡單地把它理解為一種有特殊含義的標記...在開發過程中,我們還可以用註解方式替代設定檔實現相關功能,例如Java web開發中,3.0版本後,利用@WebServlet、@WebListener等註解分別可以替代web項目XML設定檔中相關內容。而本文中講述的就是Hibernate的映射設定檔與映射註解的對比,這兩種方式均可以實現映射功能,為了避免先入為主,在此先不闡述孰優孰劣,接下來以實體類基本映射樣本,分別用設定檔和註解方式實現。

hibernate.cfg.xml設定檔在使用兩種方式時的變動
<?xml version="1.0"?><!DOCTYPE hibernate-configuration PUBLIC    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <session-factory>        <!-- 以下四行分別為:資料庫驅動類、Drivermanager擷取串連的參數URL、使用者名稱、密碼  -->        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>        <property name="connection.url">jdbc:mysql://127.0.0.1/web?characterEcoding=utf-8</property>        <property name="connection.username">root</property>        <property name="connection.password">123456</property>        <!-- 設定方言,hibernate會根據資料庫的類型相應產生SQL語句 -->        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>        <!-- 1.使用對應檔時 -->        <!-- 映射配置源檔案的位置 -->        <mapping resource="demo/pojo/Person.hbm.xml"/>        <!-- 2.使用映射註解時 -->        <!-- 註冊關係映射類 -->        <mapping class="demo.pojo.Person" />    </session-factory></hibernate-configuration>
實體類映射

背景:資料庫中一個使用者表person,欄位四個,包涵自增主鍵id、姓名name、性別sex、年齡age,映射實體類為Person,屬性四個,id、name、gender、age。注意這裡實體類屬性名稱和資料表中欄位名如果不一致,例如這裡的sex和gender,在對應檔中<property>標籤中name和colum兩個屬性都要寫上,在註解中也不能簡化省略@column,column從譯意上大家應該都能知道它是對應資料庫的欄位上,如果不指定欄位,預設情況下,系統會把對應檔中的name屬性值作為欄位名,註解方式時會把屬性名稱作為欄位名。另外一個要注意的地方就是類屬性是區分大小寫,而欄位是不區分大小寫。

映射設定檔
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <!-- name是實體類全名,table為資料表名 -->    <class name="demo.pojo.Person" table="Person">        <id name="id" column="id">            <!-- 主鍵產生方式,native是讓hibernate自動識別 -->            <generator class="native"></generator>        </id>        <!--         注意點:        0.name值為實體類中屬性名稱,column為資料表中欄位名;        1.當實體類中屬性名稱與對應資料表欄位名相同時,後面的column可以省略,hibernate會自動匹配,例如下面age ;        2.反之當實體類中屬性名稱與對應資料表欄位名不相同時,兩項都要寫上,例如下面gender和sex        -->        <property name="name" column="name"></property>        <property name="gender" column="sex"></property>        <property name="age"></property>    </class></hibernate-mapping>
映射註解方式
package demo.pojo;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;//實體類屬性註解,這裡統一寫在各屬性的get方法上@Entity//標記實體類@Table(name="person",catalog="web")//name對應資料表名,catalog對應資料庫名public class Person {        private Integer id;    private String name;    private String gender;    private Integer age;    @Id//標記主鍵    @Column(name="id")//主鍵欄位名,這裡與類屬性id是對應相同的,此行可以簡化不寫    @GeneratedValue(strategy=GenerationType.AUTO)//主鍵建置原則,自動識別    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    @Column(name="name")//主鍵欄位名,這裡與類屬性name是對應相同的,此行可以簡化不寫    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Column(name="sex")//主鍵欄位名,這裡與類屬性gender是對應,但不相同,不可省略    public String getGender() {        return gender;    }    public void setGender(String gender) {        this.gender = gender;    }    //省略註解    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public String toString() {        return "Person [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]";    }        }

 

注意點

  0.在hibernate.cfg.xml設定檔中,使用兩種映射方式分別要填映射配置源檔案的位置和映射類的全名,一個是<mapping resource="XX/XX/XXX">,一個是<mapping class="XXX.XXX.XXX" />;

  1.在使用註解方式時,實體類中匯入不要導成Hibernate下的,這裡引入都是JPA(Java Persistence API)範疇下的類,不要因為是hibernate架構下,順其自然地以為是那個Hibernate下的類,圖示如下

 

小結

  相較於冗長的一段段代碼和各個單獨的設定檔,註解無疑會顯得小巧方便一些,特別是還有後面的關聯映射(一對一、一對多、多對一、多對多),映射多了,所需要的設定檔更多,使用註解直接省略了這些檔案。深入理解好註解對架構的學習也很有協助,許多架構中都引入了註解的技術,不論是否認可註解的優勢,個人認為掌握好註解的使用都是很有必要的。

hibernate之對應檔VS映射註解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.