手動配置:java
1.CROD 操做程序員
界面sql |
testmain.java數據庫 |
Domainsession service架構 |
|
數據持久層oracle |
|
數據庫app |
Mysqldom Oreacle函數 Sqlserver
|
````
2.引用hibernate jar包
3.POJO介紹
使用hibernate 時 要求數據庫的某張表相互對應的那個java 類叫作pojo類 plain ordinary java objects 實際 就是普通的javaBeans 使用.
特色:
有一個主鍵屬性 , 用於惟一標識該對象
有其餘的屬性
有對個個屬操做的getset 方法
屬性通常的private 修飾
必定要有一個無產的構造函數 (用於hibernate 架構的反射做用)
對象關係映射文件 做用 與 domain 對象和類的映射關係
文件名的 規範
Domian對象 bomm .xml 通常會放在domain 對象統一文件夾下(同包下)
手動用戶配置 domain 對象和表的映射關係
<?xml version="1.0" encoding="utf-8"?>
<!--該文件要清楚地表述出 類 和 表 的對應關係-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- package : 表示該類在哪一個包下 -->
<hibernate-mapping package="com.sun.domain">
<!-- name : 表示類名 table 表示 該類和哪一個表映射 -->
<class name="Employee" table="EMPLOYEE">
<!-- id元素專門用於指定主鍵是如何生成,hibernate設計者認爲,咱們每個表都應該有一個主鍵 -->
<!-- name:表示類的哪一個屬性是主鍵 -->
<id name="id" type="java.lang.Integer">
<!-- 指定主鍵生成策略 -->
<generator class="sequence">
<param name="sequence">emp_seq</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true"/>
</property>
<property name="email" type="java.lang.String">
<column name="email" not-null="true"/>
</property>
<property name="hiredate" type="java.util.Date">
<column name="hiredate" not-null="true"/>
</property>
</class>
</hibernate-mapping>
手動配置 咱們 的 hibernate.cfg.xml文件 該文件用於配置,鏈接數據庫的類型, driver 用戶名 ,密碼 , url ***** 文件名稱 ,程序員通常不進行修改該文件。
手動配置 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>
<session-factory>
<!-- -hibernate 設計者提供經常使用設置-->
<!-- -配置使用driver -->
<property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver</property>
<!-- -配置用戶名 -->
<property name="connection.username">system</property>
<!-- -配置密碼 -->
<property name="connection.password">123</property>
<!-- -地址 -->
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1 :1521:SUNDB</property>
<!-- -p配置dialect方言使其 識別鏈接方式 -->
<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<mapping resource="com/sun/domain/Emloyee.hbm.xml"/>
</session-factory>
hibernate-configuration>
建立一個序列,未來用於主鍵的自增加 :
--建立一個序列
create sequence emp_seq
start with 1
increment by 1
minvalue 1
nomaxvalue
nocycle
nocache
View 方法呈現
package com.sun.view;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.sun.domain.Employee;
public class MainTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//建立configuration鏈接hibernate 該對象讀取 完成初始化
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
///建立SessionFactory 這是一個會化工廠 是重量級的對象 保證該對象存在一次
//很是重要
SessionFactory sessionFactory = configuration.buildSessionFactory();
//建立Session 與數據庫進行對話 和jdbc 的鏈接
Session session = sessionFactory.openSession();
///對hibernate 而言 要去對數據庫 增長 , 刪除 ,修改 的時候使用事務提交
//添加一名僱員
Transaction transaction = session.beginTransaction();
Employee myEmployee = new Employee();
myEmployee.setName("素貞");
myEmployee.setEmail("shuzhen@163.com");
myEmployee.setHiredate(new Date());
///實現保存
session.save(myEmployee); ///實現hibernate 封裝
///完成關閉操做
///事務提交文件數據庫
transaction.commit();
session.close();
}
}
對數據的 增長 修改 刪除
要求數據持久層 的 類中 進行序列化
使用hibernate 開發型模數據 要使用一個 sessionFactory,提升數據減小內存的
簡單定義 一個數據庫 對應一個SessionFactory接口 使用一個工具包編寫
SessionFactory 會話工廠
案例
建立一個工具類編寫 SessionFactory會話工廠
package com.sun.Util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
///使用hibernate 開發型模數據 要使用一個 sessionFactory,提升數據減小內存的使用
//簡單定義 一個數據庫 對應一個SessionFactory接口
final public class MySessionFactory {
private static SessionFactory sessionFactory = null
//構造函數
private MySessionFactory() {
}
///建立一次單例 只能被調用一次
static {
sessionFactory=new Configuration().configure().buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
主類
package com.sun.view;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.sun.Util.MySessionFactory;
import com.sun.domain.Employee;
public class MainTest {
/**
* @param args
*/
public static void main(String[] args) {
///添加對象數據
AddEmployee();
//修改對象數據
c updateEmployee();
//刪對象數據
DeleteEmployee();
}
public static void DeleteEmployee() {
///h獲取一個session
Session session = MySessionFactory.getSessionFactory().openSession();
//刪除獲取對象 獲取該對象 , 而後刪除
//建立事務調用Session 中的beginTransaction()函數開始事務 勿忘 要有結束事務 即提交事務
Transaction ts = session.beginTransaction();
///實現 強轉
Employee employee = (Employee) session.load(Employee.class,3);
session.delete(employee);
ts.commit();
session.close();
}
//修改對象數據
public static void updateEmployee() {
//修改對象
//建立configuration 對象
//建立會話工廠 SessionFactory 重量級 對象
//只能建立一次 咱們能夠封裝起來 寫成一個最終了類 是單態
Session session = MySessionFactory.getSessionFactory().openSession();
//修改用戶 對象 獲取咱們要修改的用戶 2 修改
//使用對象數據庫對象與類的反射
//load 函數 經過主鍵屬性 ,進而獲取該對象 表的記錄對應
///必定要進行強鑽對象
Transaction ts = session.beginTransaction();
Employee emp =(Employee) session.load(Employee.class,6);
emp.setName("宮保雞丁"); ///實現對數據庫修改對象 update
ts.commit();
session.close();
}
/// 添加對象數據
public static void AddEmployee() {
// TODO Auto-generated method stub
//建立configuration鏈接hibernate 該對象讀取 完成初始化
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
///建立SessionFactory 這是一個會化工廠 是重量級的對象 保證該對象存在一次
//很是重要
SessionFactory sessionFactory = configuration.buildSessionFactory();
//建立Session 與數據庫進行對話 和jdbc 的鏈接
Session session = sessionFactory.openSession();
///對hibernate 而言 要去對數據庫 增長 , 刪除 ,修改 的時候使用事務提交
//添加一名僱員
Transaction transaction = session.beginTransaction();
Employee myEmployee = new Employee();
myEmployee.setName("素貞");
myEmployee.setEmail("shuzhen@163.com");
myEmployee.setHiredate(new Date());
///實現保存
session.save(myEmployee); ///實現hibernate 封裝
///完成關閉操做
///事務提交文件數據庫
transaction.commit();
session.close();
}
}