1. 程式人生 > >Java操作資料庫方式三Hibernate的使用之註解的使用

Java操作資料庫方式三Hibernate的使用之註解的使用

##概述

在hibernate中,通常配置物件關係對映關係有兩種,一種是基於xml的方式,另一種是基於annotation的註解方式。

在hibernate4及以後的版本直接使用註解,如果使用hibernate3的版本就需要引入annotation的jar包。

在前面的部落格中建立student.hbm.xml檔案和score.hbm.xml檔案就是基於xml的方式。下面介紹註解的使用。

##準備工作

與以上兩篇部落格同。

##開發環境

與以上兩篇部落格同。

##正式開發

下面仍然以student和score表為例說明註解的使用

一,建立Model類

註解方式最重要的就是寫在Model類中的註解。

student的Model類如下:

@Entity //表示是hibernate中的例項
@Table(name = "student")//對應student表
@Proxy(lazy = false)//不使用懶載入機制
public class Student {
    private int id;
    private String name;
    private int age;
    private Set<Score> score = new HashSet<>();

    @Id//對應表中的ID
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Column(name = "name" ,length=50)//對應表中的一列,name表示表的欄位名,若不寫則認為類的欄位名就是表的欄位名
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(length=11)
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //一對多的關係,mappedBy的值對應Score類中ManyToOne註解所在的欄位
    @OneToMany(cascade={javax.persistence.CascadeType.ALL}, fetch=FetchType.EAGER,mappedBy = "student")
    public Set<Score> getScore() {
        return score;
    }
    public void setScore(Set<Score> score) {
        this.score = score;
    }
}

score的Model類如下:

@Entity
@Table(name = "score")
@Proxy(lazy = false)
public class Score {
    private int id;
    private int score;
    private String type;
    private Student student;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Column(length=11)
    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
    @Column(length=20)
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }


    //多對一
    @ManyToOne(cascade={CascadeType.ALL})
    @JoinColumn(name="student_id")//外來鍵
    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }
}

二,建立hibernate框架的全域性配置檔案

全域性配置檔案放在resource目錄下,命名為:hibernate.cfg.xml。檔案內容如下:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <!-- 一個sessionFactory代表資料庫的一個連線-->
    <session-factory>
        <!-- 連結資料庫的使用者名稱 -->
        <property name="connection.username">root</property>
        <!-- 連結資料庫的密碼 -->
        <property name="connection.password">root</property>
        <!-- 連結資料庫的驅動 -->
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <!-- 連結資料庫的url -->
        <property name="connection.url">
            jdbc:mysql://localhost:3306/xia
        </property>
 
        <!--方言,告訴hibernate使用什麼樣的資料庫,hibernate就會在底層拼接什麼樣的sql語句-->
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
 
        <!--
            配置根據持久化類生成表的策略
            validate   通過對映檔案檢查持久化類與表的匹配
            update   每次hibernate啟動的時候,檢查表是否存在,如果不存在,則建立,如果存在,則什麼都不做了
            create   每一次hibernate啟動的時候,根據持久化類和對映檔案生成表
            create-drop
        -->
        <property name="hbm2ddl.auto">update</property>
        <property name="show_sql">true</property>
        
        <!--載入model類與表結構對映關係檔案-->
        <!--<mapping resource="student.hbm.xml" />-->
        <!--<mapping resource="score.hbm.xml" />-->

        <!--注:此時沒有對映檔案,需配置class檔案-->
        <mapping class="com.honor.sql.Student"/>
        <mapping class="com.honor.sql.Score"/>
    </session-factory>
</hibernate-configuration>

三,驗證註解是否配置成功

以查詢為例,程式碼如下:

public static Student selectStudent(int id) {
        //獲取Session物件
        Session session = getSession();
        try {
            session.beginTransaction();
            //根據id查詢Student物件
            Student student = session.load(Student.class, id);
            session.getTransaction().commit();
            return student;
        } catch (Exception e) {
            e.printStackTrace();
            //出現異常時回滾事務
            session.getTransaction().rollback();
        } finally {
            if (session != null) {
                if (session.isOpen()) {
                    session.close();//關閉session
                }
            }
        }
        return null;
    }

結果如下:


##總結


相關推薦

Java操作資料庫方式Hibernate的使用註解的使用

##概述在hibernate中,通常配置物件關係對映關係有兩種,一種是基於xml的方式,另一種是基於annotation的註解方式。在hibernate4及以後的版本直接使用註解,如果使用hiberna

Java操作資料庫方式二DBCP使用詳解

##概述DBCP的全稱是:DataBase connection pool,翻譯是:資料庫連線池。在Java操作資料庫方式一JDBC使用詳解中說到直接使用JDBC非常消耗資源。為了避免頻繁關閉連結資料庫

Java操作資料庫jdbc【原生方式

引言:Java對資料庫的操作有很多種技術。例如說jdbc,dbutil +C3p0,hibernate,jdbcTemplate等等【這五個都會總結】,到後面的話使用一些高階的框架去操作資料庫,

Laravel操作資料庫方式總結歸納

國慶這幾天都在外面浪,馬上要上班了,該收心了,趁今天有些空閒的時間,靜下心總結下Laravel操作資料庫的三種方式,以作資料和參考:(三種方式:DB façade 、 查詢構造器、 Eloquent ORM ) 目錄 一、使用DB façade(原始查詢)操作資料庫 二、使用查詢構

java操作資料庫模糊查詢

首先,在接口裡新增模糊查詢的方法,程式碼如下: ---------------------------------程式碼開始---------------------------------- package com.dao; import java.util.List; import

Java常用類(StringBuffer與StringBuidler

lane 這一 eight cit 優先 simple bmp imp uid 前言   前面一篇給大家介紹了String類,這個我們經常會用到的一個類,那這一篇給大家分享的是StringBuffer與StringBuidler。等下我也會比較他們三個之間的區別 一、S

Java設計模式(建立型模式:單例模式

一、概念: java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,這裡主要介紹三種:懶漢式單例、餓漢式單例、登記式單例。 單例模式有以下特點: (1)單例類只能有一個例項; (2)單例類必須自己建立自己的唯一例項; (3)單例類必須給所有其他物件提供這一例項。 單例

Java架構-JavaSE(static、final、abstract修飾符

閱讀目錄(Content) 一、static修飾符   1.1、static變數   1.2、static方法 1.3、程式碼塊和靜態程式碼塊 1.4、建立和初始化物件的過程 二、final修飾符 2.1、修飾類 2.2、修飾方法 2.3、修飾變數 三、abstract修飾符   3

JDBC操作資料庫以及層架構模式

JDBC操作資料庫 1、JDBC概念 JDBC是實現java程式對各種資料庫的訪問,是一組類和介面,位於java.sql與javax.sql包 2、通過JDBC連線資料庫(不優化前) //1、載入驅動 Class.forName("com.mysql.jdbc.Dr

《大話設計模式》Java程式碼示例(裝飾模式

裝飾模式(Decorator):動態地給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。 package decorator; /** * 裝飾模式(Decorator) * Person類 */ public class Perso

MongoDB使用Java操作資料庫案例

一、pom.xml依賴 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId>

JAVA操作資料庫一(Spring data jpa)

總的來說,JAVA操作資料庫還是相當方便的。 首先是核心配置檔案daoContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.o

黑馬程式設計師——Java集合框架(Map集合、Collections與Arrays工具類

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ Map集合 一、概述 Map集合儲存的元素是鍵值對,即將鍵和值一對一對往裡存,而且要保證鍵的唯一性。  問題思考:   1.如何保證鍵的唯一性?   

效能測試工具操作資料庫)-Jmeter與Mysql

1、安裝mysql的驅動包 ·        為了連線Mysql資料庫,還需要下載"mysql-connector-java",可以從下載 新建測試計劃,載入jar包路徑,如下: 2、建立JDBC

JAVA操作資料庫的一個通用類

 import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; impo

java操作資料庫 存在就更新不存在就插入的優化操作

  當我們用java,jdbc 或者 spring的jdbctemplate來操作資料時候,總有時候會碰到 存在就插入不存在就更新 這樣的需求,我們一般都是用下面的方法解決 public void save(){ JdbcTemplate jdbc = getJd

hibernate tool 從資料庫逆向生成Hibernate註解的實體類

1. 首先,要在eclipse中採用自帶的資料庫管理器(Data Management),連通你的資料庫:   然後選擇資料庫,這裡用的oracle,然後給個名字,如MyOracle。 點選下圖中按鈕,新建一個數據庫驅動的配置。 選擇資料庫版本,這裡是oracle

Java操作資料庫注意點

1、addBatch批處理: smt.addBatch(sql1); smt.addBatch(sql2); smt.addBatch(sql3); smt.executeBatch(); 注意:使用批處理需要注意查詢、新增、修改不能使用同一個Statement,否則會報

java操作資料庫中的Clob型別

首先是POJO類: import java.sql.Clob;import java.util.Date; /*** * @author coffee**/ public class KybasicInfo implements java.io.Serializable {

最簡單的fastdfs教程|java操作fastdfs《

專案結構 需要的jar包 <dependency> <groupId>org.csource</groupId>