Hibernate簡單入門
阿新 • • 發佈:2018-12-13
1.MyEclipse匯入Hibernate
2.Hibernate配置
<?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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<!--資料庫特性 -->
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<!--資料庫URL -->
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</ property>
<!-- 資料庫使用者 -->
<property name="connection.username">SYSTEM</property>
<!-- 資料庫使用者密碼 -->
<property name="connection.password">orcl</property>
<!-- 資料庫JDBC驅動 -->
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</ property>
<!-- 資料庫檢視【MyEclipse database explorer】連線資料庫時定義的名字 -->
<property name="myeclipse.connection.profile">oracle</property>
<!-- 執行程式時是否在控制檯顯示sql語句 -->
<property name="show_sql">true</property>
<!-- 是否格式化sql語句 -->
<property name="format_sql">true</property>
<!--jdbc.fetch_size是指Hibernate每次從資料庫中取出並放到JDBC的Statement中的記錄條數。Fetch Size設的
越大,讀資料庫的次數越少,速度越快,但記憶體佔用越多;
Fetch Size越小,讀資料庫的次數越多,速度越慢,但記憶體佔用少-->
<property name="jdbc.fetch_size">50 </property>
<!--jdbc.batch_size是指Hibernate批量插入,刪除和更新時每次操作的記錄數。Batch Size越大,
批量操作的向資料庫傳送Sql的次數越少,速度就越快,同樣耗用記憶體就越大-->
<property name="jdbc.batch_size">20 </property>
<!-- 對映檔案路徑 -->
<mapping resource="com/entity/Dept.hbm.xml" />
<mapping resource="com/entity/District.hbm.xml" />
<mapping resource="com/entity/House.hbm.xml" />
<mapping resource="com/entity/Users.hbm.xml" />
<mapping resource="com/entity/Street.hbm.xml" />
<mapping resource="com/entity/Types.hbm.xml" />
</session-factory>
</hibernate-configuration>
3.實體對映配置
<hibernate-mapping>
<class name="com.entity.Dept" table="DEPT" schema="SYSTEM" >
<id name="deptno" type="java.lang.Integer">
<column name="DEPTNO" precision="9" scale="0" />
<!-- 使用oracle的已建立的序列自動增長 -->
<generator class="sequence" >
<!-- param標籤包含的是oracle的序列名 -->
<param name="sequence">SEQ_DEPT</param>
</generator>
<!-- 使用increment自動增長,適用於所有資料庫,先從資料庫中查詢最大的主鍵值
再在最大主鍵值上加1,
-->
<!-- <generator class="increment"/> -->
</id>
<!-- 實體類Dept中的dname屬性,是String型別 -->
<property name="dname" type="java.lang.String">
<!-- 資料庫中的DNAME列,長度是20 -->
<column name="DNAME" length="20" />
</property>
<property name="loc" type="java.lang.String">
<column name="LOC" length="20" />
</property>
</class>
</hibernate-mapping>
4.簡單例子
package com.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.entity.Dept;
public class Test {
public static void main(String[] args) {
//1、解析hibernate控制檔案
Configuration config=new Configuration().configure();
//建立SessionFactory
SessionFactory sf=config.buildSessionFactory();
//3、通過SessionFactory建立Session
Session session=sf.openSession();
//4、建立session上的事務物件
Transaction tx=session.beginTransaction();
try {
//插入一條資料
Dept dept=new Dept();
dept.setDname("333");
dept.setLoc("test area");
session.save(dept);
//根據主鍵查詢資料
Dept dept2=(Dept)session.get(Dept.class, 4);
//Dept dept=(Dept)session.load(Dept.class, 4);
//修改資料
dept2.setDname("研發部");
session.update(dept2);
//刪除資料
session.delete(dept2);
//只有呼叫commit才會把資料固化到資料庫
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
session.close();
}
}
}