1. 程式人生 > >Hibernate使用註解對映取代對映檔案

Hibernate使用註解對映取代對映檔案

在編寫hibernate的時候,需要將實體類對映到資料庫中的表。通常需要一個配置檔案(hibernate.cfg.xml),一個實體類(XX.Java),還有一個對映檔案(XX.hbm.xml)。從JAVA5.0之後,可以利用註解來簡化配置。簡單來說就是不再需要對映檔案了,hibernate需要的元資料(metadata)通過註解實體類就行了。

下面是一個簡單的基於註解對映的Hibernate Hello World專案:

用到的工具和技術:1.Eclipse4.2.2

    2.Maven 3

    3.Hibernate 4.2.2.Final

    4.JPA

首先是專案的整體

架構


專案的依賴(pom.xml):

  1. <dependencies>
  2.   <dependency>
  3.     <groupId>junit</groupId>
  4.     <artifactId>junit</artifactId>
  5.     <version>3.8.1</version>
  6.     <scope>test</scope>
  7.   </dependency>
  8.   <dependency>
  9.     <groupId>org.hibernate
    </groupId>
  10.     <artifactId>hibernate-core</artifactId>
  11.     <version>4.2.2.Final</version>
  12.   </dependency>
  13. </dependencies>

JPA jar包在hibernate3.6之後被放入hibernate-core包中。

Hibernate的配置檔案(hibernate.cfg.xml):

  1. <?xmlversion='1.0'encoding='utf-8'?>
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6.     <session-factory>
  7.         <!-- Database connection settings -->
  8.         <propertyname="connection.driver_class">com.mysql.jdbc.Driver</property>
  9.         <propertyname="connection.url">jdbc:mysql://localhost:3306/test</property>
  10.         <propertyname="connection.username">username</property>
  11.         <propertyname="connection.password">password</property>
  12.         <!-- SQL dialect -->
  13.         <propertyname="dialect">org.hibernate.dialect.MySQLDialect</property>
  14.         <!-- Echo all executed SQL to stdout -->
  15.         <propertyname="show_sql">true</property>
  16.         <propertyname="format_sql">true</property>
  17.         <!-- Drop and re-create the database schema on startup -->
  18.         <propertyname="hbm2ddl.auto">update</property>
  19.         <mappingclass="org.hibernate.test.tutorial.Person"/>
  20.     </session-factory>
  21. </hibernate-configuration>

注意:需要在Mysql資料庫中建立一個test資料庫 CREATE DATABASE test

一個簡單的實體類:

  1. package org.hibernate.test.tutorial;  
  2. import java.io.Serializable;  
  3. import java.util.Date;  
  4. import javax.persistence.Column;  
  5. import javax.persistence.Entity;  
  6. import javax.persistence.GeneratedValue;  
  7. import javax.persistence.GenerationType;  
  8. import javax.persistence.Id;  
  9. import javax.persistence.Table;  
  10. import javax.persistence.Temporal;  
  11. import javax.persistence.TemporalType;  
  12. @Entity
  13. @Table(name="T_PERSONS")  
  14. publicclass Person implements Serializable {  
  15.     privatestaticfinallong serialVersionUID = 1L;  
  16.     private Long id;  
  17.     private String name;  
  18.     privatedouble age;  
  19.     private Date birth;  
  20.     @Id
  21.     @GeneratedValue(strategy=GenerationType.AUTO)  
  22.     @Column(name="ID",unique=true)  
  23.     public Long getId() {  
  24.         return id;  
  25.     }  
  26.     @SuppressWarnings("unused")  
  27.     privatevoid setId(Long id) {  
  28.         this.id = id;  
  29.     }  
  30.     @Column(name="NAME",length=20)  
  31.     public String getName() {  
  32.         return name;  
  33.     }  
  34.     publicvoid setName(String name) {  
  35.         this.name = name;  
  36.     }  
  37.     @Column(name="AGE")  
  38.     publicdouble getAge() {  
  39.         return age;  
  40.     }  
  41.     publicvoid setAge(double age) {  
  42.         this.age = age;  
  43.     }  
  44.     @Temporal(TemporalType.DATE)  
  45.     @Column(name="BIRTH_DATE")  
  46.     public Date getBirth() {  
  47.         return birth;  
  48.     }  
  49.     publicvoid setBirth(Date birth) {  
  50.         this.birth = birth;  
  51.     }  
  52. }  

注意需要在Hibernate配置檔案中註冊該實體類: <mapping class="org.hibernate.test.tutorial.Person" />

最後編寫一個執行程式:

  1. publicstaticvoid main( String[] args )  
  2. {  
  3.     SessionFactory factory = new Configuration().configure().buildSessionFactory();  
  4.     Session session = factory.openSession();  
  5.     session.beginTransaction(); // 開啟事務
  6.     try{  
  7.     Person p = new Person();  
  8.     p.setName("Benson");  
  9.     p.setAge(22);  
  10.     p.setBirth(new Date());  
  11.     session.save(p);  
  12.     } catch(Exception e) {  
  13.         e.printStackTrace();  
  14.         session.getTransaction().rollback();    // 回滾事務
  15.     }  
  16.     session.getTransaction().commit();  // 提交事務
  17. }  

執行之後,可以在Ecilpse控制檯觀察到Hibernate為我們自動生成的格式化後的SQL:
  1. Hibernate:   
  2.     insert   
  3.     into  
  4.         T_PERSONS  
  5.         (AGE, BIRTH_DATE, NAME)   
  6.     values  
  7. 相關推薦

    Hibernate使用註解對映取代對映檔案

    在編寫hibernate的時候,需要將實體類對映到資料庫中的表。通常需要一個配置檔案(hibernate.cfg.xml),一個實體類(XX.Java),還有一個對映檔案(XX.hbm.xml)。從JAVA5.0之後,可以利用註解來簡化配置。簡單來說就是不再需要對映檔案了,hibernate需要的元資料(

    hibernate註解版關聯對映Many-to-One/Many-to-Many等&異常處理

    應用例項: 一對多和多對一: warning.class 控制 @JsonIgnore@ManyToOne(cascade={CascadeType.MERGE})@JoinColumn(name = "from_id")private User sende

    hibernate註解版關聯對映 詳解

    @ManyToOne表示一個多對一的對映,該註解標註的屬性通常是資料庫表的外來鍵 optional:是否允許該欄位為null,該屬性應該根據資料庫表的外來鍵約束來確定,預設為true fetch:表示抓取策略,預設為FetchType.EAGER cascade:表示預設的級聯操作策略,可以指定為AL

    Hibernate學習(3) (繼承對映,配置檔案註解版)

    這篇blog準備寫怎樣在Hibernate中反應記憶體物件之間的繼承關係.我們知道,記憶體物件之間是可以有繼承關係的,但是在資料庫中,我們繼承神馬的都是浮雲,不存在的.那麼怎麼辦呢?Hibernate提供了繼承關係對映!(其實就是幫你把原來的一個類以一種特定的方

    Hibernate---實體配置(對映檔案詳解 例如:User.hbm.xml檔案

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN" &n

    Hibernate---實體配置(對映檔案詳解 例如:User.hbm.xml檔案

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"     "

    兩種配置Servlet的IP地址對映:1註解、2配置檔案

    1.建立專案 建立 servlet_test 動態web專案。 建立時點選 next, 勾選如下: 2.建立 test.java類 test.java 內容: 第一種:註解 – 設定IP地址對映

    Hibernate 註解對映

    工作中遇到hibernate對映的一些問題,這裡總結一下 (特別是測試時,許多資料並不能有效關聯。所以@NotFound 很重要) 一,假設有2張表user,company 我們知道,一個使用者屬於一個公司。那麼我們這麼建立Model //使用者 public class Use

    Hibernate註解對映欄位的位置到底應該放在屬性還是方法上

    現在我們對於專案中大量使用@Entity註冊在類頭上,將一個類宣告為一個實體bean(即一個持久化POJO類) ,@Table註冊在類頭上,註解聲明瞭該實體bean對映指定的表,來體現實體與表的這種對映關係。 對於屬性欄位和表的欄位關係對應的註解屬性的位置,一般我們採用以下兩種方式: 第一種:

    Hibernate註解對映聯合主鍵的三種主要方式

    聯合主鍵用Hibernate註解對映方式主要有三種: 第一、將聯合主鍵的欄位單獨放在一個類中,該類需要實現java.io.Serializable介面並重寫equals和hascode,再將該類註解為@Embeddable,最後在主類中(該類不包含聯合主鍵類中的欄位)儲存

    [Hibernate]註解/關係對映以及關係測試用例

    基本註解package OneToOneSingle; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; impor

    前幾天用AnnotationSessionFactoryBean 註解方式代替*.hbm.xml時掃描對映實休檔案後報錯

    吐操一下.Hibernate真心配置麻煩.不是VO. 是sessionFactory hibernate3.5以前的版本使用註解使用hibernate-annotations.jar以及ejb-pe

    Hibernate註解方式對映

    JPA:Java persistence APIJPA註解是JavaEE的標準和規範JPA是標準介面,Hibernate是實現,優先使用JPA註解。一:類級別註解1:@Entity對映實體類name屬性對應資料庫中的表(一般不寫通過@Table寫)注意:使用@Entity時必

    hibernate多對多對映拆成2個一對多對映註解

    hibernate的many to many確實很是方便我們處理實體和集合間的關係,並可以通過級聯的方法處理集合,但有的時候many to many不能滿足我們的需要,比如 使用者<--->選課,典型的多對多關係,一般情況下,會生成 course_user(course_id,user_id);

    hibernate+註解實現各種關係對映

    本文轉自:http://blog.csdn.net/bigtree_3721/article/details/42343639 基本環境準備     我們先來看看一個具體的JPA工程示例。要執行這個示例,我們需要如下的類庫和軟體安裝配置好:    

    hibernate 註解方式配置實體的對映

    Hibernate註解1。@Entity(name="EntityName")必須,name為可選,對應資料庫中一的個表2、@Table(name="",catalog="",schema="")可選,通常和@Entity配合使用,只能標註在實體的class定義處,表示實體

    Hibernate - 繼承關聯關係對映

    對於面向物件的程式設計語言而言,繼承和多型是兩個最基本的概念。Hibernate 的繼承對映可以理解持久化類之間的繼承關係。例如:人和學生之間的關係。學生繼承了人,可以認為學生是一個特殊的人,如果對人進行查詢,學生的例項也將被得到。 Hibernate支援三種繼承對映策略:

    從零打造線上網盤系統之Hibernate配置O/R對映

    歡迎瀏覽Java工程師SSH教程從零打造線上網盤系統系列教程,本系列教程將會使用SSH(Struts2+Spring+Hibernate)打造一個線上網盤系統,本系列教程是從零開始,所以會詳細以及著重地闡述SSH三個框架的基礎知識,第四部分將會進入專案實戰,如果您已經對SSH框架有所掌握,那麼可以直接瀏

    使用檔案對映檢視讀取檔案

    通常情況的檔案操作使用open、read、write,除了這種方式,還可以使用檔案對映檢視。 讀取檔案的前10個位元組: #include <stdio.h> #include <Windows.h> int main() { HANDLE l_hFileHan

    SSM 生成mapper中xml檔案:未能解析對映資源:“檔案巢狀異常

    錯誤日記我就網上隨便找個貼著: 錯誤一: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path res