標籤:風格 設定 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簡單用法解析