Hibernate簡單用法解析

來源:互聯網
上載者:User

標籤:風格   設定   pre   ***   設定檔   參數   中繼資料   map   nfa   

一、hibernate需要的設定檔

首先hibernate中有兩種xml檔案。

.cfg,xml檔案負責配置串連資料庫的資訊、指定映射類、指定hbm對應檔。

.hbm.xml檔案負責配置持久化類和資料庫表的映射關係。

 

其次每一個表都有一個對應的“持久化類”。

因為hibernate操作資料庫是物件導向的,所以當我們要操作某張表時,實際上操作的是該表所對應的持久化類。

 

二、操作hibernate

在hibernate中,由session類來具體的操作資料庫(如增刪查改相關持久化類對象,而這一系列操作會轉化為對資料庫資料的增刪查改)。

而sessionFactory負責產生session對象。一般一個資料庫對應一個sessionFactory對象,其建立和銷毀需要耗費很大的資源。

而根據“服務註冊類(StandardServiceRegistry)”可以建立一個中繼資料資源集(Metadata),然後產生該資料庫所對應的sessionFactory

 

步驟:

先利用configure()方法,將cfg檔案作為參數。註冊初始化我們設定檔中的屬性,建立服務註冊類“StandardServiceRegistry”。

之後利用StandardServiceRegistry作為參數,得到SessionFactory對象。

利用SessionFactory的openSession()方法(不止這一種建立session的方法),建立一個session。

session可以通過Query介面執行“HQL”語句來操作“某表所對應的持久化類”,從而轉化為操作該表。

 

執行個體代碼如下:

程式結構:

(Test類是測試類別)

 

hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?><!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>        <!-- 資料庫連接配置 -->        <property name="connection.driver_class">org.mariadb.jdbc.Driver</property>        <property name="connection.url">jdbc:mariadb://localhost:3306/daixu</property>        <property name="connection.username">root</property>        <property name="connection.password">123</property>        <!-- 資料庫連接池的大小 -->        <property name="connection.pool_size">5</property>        <!-- 每次從資料庫中取出並放到JDBC的Statement中的記錄條數。Fetch Size設的越大,讀資料庫的次數越少,速度越快,Fetch Size越小,讀資料庫的次數越多,速度越慢-->        <property name="jdbc.fetch_size">50 </property>        <!--批量插入,刪除和更新時每次操作的記錄數。Batch Size越大,大量操作的向資料庫發送Sql的次數越少,速度就越快,同樣耗用記憶體就越大-->        <property name="jdbc.batch_size">23 </property>        <!-- SQL 方言 -->        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>        <!-- Enable Hibernate‘s automatic session context management -->        <property name="current_session_context_class">thread</property>        <!-- 在控制台輸出sql語句 -->        <property name="show_sql">true</property>        <!-- 在啟動時根據配置更新資料庫 -->        <property name="hbm2ddl.auto">update</property>        <mapping class="User"/><!-- 註冊我們的實體映射類-->        <!--指定對應檔為“hibernate/ch1/UserInfo.hbm.xml”-->        <mapping resource="User.hbm.xml"/>    </session-factory></hibernate-configuration>

 

User.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <!-- 1 配置類和表對應           class標籤          name屬性:實體類全路徑          table屬性:資料庫表名稱      -->    <class name="User" table="user">        <!-- 2 配置“主鍵”的映射            id標籤            name屬性:實體類裡面id屬性名稱            column屬性:產生的表欄位名稱            type屬性:該欄位的資料類型        -->        <id name="user_id" column="user_id" type="java.lang.Integer">            <!-- 設定主鍵的增長方法                increment(遞增)                identity (標識)                sequence (序列)                hilo (高低位)                seqhilo(使用序列的高低位)                native(本地)            -->            <generator class="increment"></generator>        </id>        <!-- 配置其他屬性和表欄位對應            name屬性:實體類屬性名稱            column屬性:產生表欄位名稱            type屬性:該欄位的資料類型        -->        <property name="user_name" column="user_name"></property>        <property name="user_join" column="user_join"></property>    </class></hibernate-mapping>

 

User.java:

import java.util.Date;/** * Created by CLY on 2016/11/24. */public class User {    private int user_id;    private String user_name;    private int user_join;    User(){    }    public int getUser_id(){return this.user_id;}    public String getUser_name(){return this.user_name;}    public int getUser_join(){return this.user_join;}    public void setUser_id(int User_id){this.user_id=User_id;}    public void setUser_name(String User_name){this.user_name=User_name;}    public void setUser_join(int User_join){this.user_join=User_join;}}

 

Test.java:

import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import java.util.List;/** * Created by CLY on 2016/12/19. */public class Test {    public static void main(String args[]){        //1. 配置型別安全的准服務註冊類,這是當前應用的單例對象,不作修改,所以聲明為final        //在configure("cfg/hibernate.cfg.xml")方法中,如果不指定資源路徑,預設在類路徑下尋找名為hibernate.cfg.xml的檔案        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();        //2. 根據服務註冊類建立一個中繼資料資源集,同時構建中繼資料並產生應用一般唯一的的session工廠        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();        /****上面是配置準備,下面開始我們的資料庫操作******/        Session session = sessionFactory.openSession();//從會話工廠擷取一個session        String hql = "from User";//hql語句        Query query = session.createQuery(hql);        List<User> users = query.list();//list()方法用於執行查詢語句        //通過動態構造執行個體對象,對返回結果進行封裝,使程式更符合物件導向風格。        for (User u : users) {            System.out.println(u.getUser_name());            System.out.println(u.getUser_id());        }        session.close();    }}

 

Hibernate簡單用法解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.