文章出處
hibernate.cfg.xml
映射配置
實體類
文章列表
hibernate:
定義:ORM:Object Relational Mapping 對象 關系 映射
使用hibernate時幾個必要的:
1、實體類
2、映射文件(類 -數據庫表,屬性-字段)【實體類名.hbm.xml】
3、配置文件:數據庫連接信息(兩個配置:hibernate.cfg.xml(數據庫配置文件)和實體類名.hbm.xml(映射配置文件))
4、必要架包
- hibernate(主框架)
- ojdbc jdbc
- jta 允許應用程序執行分布式事務處理——在兩個或多個網絡計算機資源上訪問并且更新數 據:針對數據讀取
- commons-collections 各種集合類和集合工具類封裝
- dom4j xml解析
- javassist 分析、編輯和創建Java字節碼的類庫:針對字節碼的
- slf4j-api 記錄hibernate的日志接口
- slf4j-nop 、、
其他筆記:
在代碼中都會有注釋
hibernate.cfg.xml(數據庫配置文件):

1 <!DOCTYPE hibernate-configuration PUBLIC 2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 4 5 <hibernate-configuration> 6 <session-factory> 7 8 <!-- 指定oracle對應得dialect --> 9 <property name="dialect"> 10 org.hibernate.dialect.Oracle10gDialect 11 </property> 12 <!-- 數據庫jdbc驅動 --> 13 <property name="connection.driver_class"> 14 oracle.jdbc.driver.OracleDriver 15 </property> 16 17 <!-- 數據庫url --> 18 <property name="connection.url"> 19 jdbc:oracle:thin:@localhost:1521:XE 20 </property> 21 <!-- 用戶名 --> 22 <property name="connection.username">user_admin</property> 23 <!-- 用戶密碼 --> 24 <property name="connection.password">abc123</property> 25 26 <!-- session范圍和上下文 --> 27 <property name="current_session_context_class">thread</property> 28 <!-- 是否在運行期間生成的SQL輸出到日志以供調試 --> 29 <property name="show_sql">true</property> 30 <!-- 是否格式化sql --> 31 <property name="format_sql">true</property> 32 <!-- 映射 --> 33 <mapping resource="cn/cy/Hibernate/entity/Dept.hbm.xml" /> 34 </session-factory> 35 </hibernate-configuration>
實體類名.hbm.xml(映射配置文件):

1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 6 7 <hibernate-mapping> 8 <!-- 與關鍵字沖突 ”~~“解決 --> 9 <class name="cn.cy.Hibernate.entity.Dept" table="dept"> 10 <!-- 當數據庫里面的列明與java屬性一致時,我們可以省略colnumn --> 11 <id name="deptno" column="deptno"> 12 <generator class="sequence"> 13 <!--索引--> 14 <param name="sequence">seq_index</param> 15 </generator> 16 </id> 17 <property name="deptname" column="deptname" type="java.lang.String" /> 18 <property name="loc" column="loc" type="java.lang.String"/> 19 </class> 20 </hibernate-mapping> 21
實體類:

1 package cn.cy.Hibernate.entity; 2 3 import java.io.Serializable; 4 5 public class Dept implements Serializable{ 6 //屬性 7 private int deptno; 8 private String deptname; 9 private String loc; 10 //構造方法 11 public Dept(){ 12 13 14 } 15 // 16 public int getDeptno() { 17 return deptno; 18 } 19 20 public void setDeptno(int deptno) { 21 this.deptno = deptno; 22 } 23 24 public String getDeptname() { 25 return deptname; 26 } 27 28 public void setDeptname(String deptname) { 29 this.deptname = deptname; 30 } 31 32 public String getLoc() { 33 return loc; 34 } 35 36 public void setLoc(String loc) { 37 this.loc = loc; 38 } 39 40 41 }
測試類:
使用hibernate的幾個步驟:
1 package cn.cy.Hibernate.Test; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.Transaction; 6 import org.hibernate.cfg.Configuration; 7 8 import cn.cy.Hibernate.entity.Dept; 9 10 11 /** 12 * 測試類 13 * @author Administrator 14 * 15 */ 16 public class Test { 17 public static void main(String [] args){ 18 /** 19 * 測試方法 20 */ 21 if(addDept()){ 22 System.out.println("保存成功"); 23 } 24 25 } 26 /** 27 *測試hibernate框架的測試類 28 **/ 29 public static boolean addDept(){ 30 boolean flag=false; 31 Configuration conf=null; 32 SessionFactory factory=null; 33 Session session=null; 34 Transaction trans=null; 35 try { 36 //讀取配置文件 37 conf=new Configuration().configure(); 38 //創建sessionfactory 39 factory=conf.buildSessionFactory(); 40 //打開會話 41 session=factory.openSession(); 42 //開啟事務 43 trans=session.beginTransaction(); 44 Dept dept=new Dept(); 45 //當設置了gennerator為sequence時,不給參數是以指定sequence填值 46 dept.setDeptno(200); 47 dept.setDeptname("開發部"); 48 dept.setLoc("成都"); 49 //持久化 50 //session.save(dept); 51 //session.delete(dept); 52 //Dept dp=(Dept)session.get(Dept.class, 1);//沒有數據,返回空值 53 //System.out.println(dp.getDeptname()); 54 Dept dp=(Dept)session.load(Dept.class, 1);//沒有數據,報異常 55 System.out.println("....."); 56 System.out.println(dp.getDeptname()); 57 58 59 60 //提交事務 61 trans.commit(); 62 63 flag=true; 64 } catch (Exception e) { 65 e.printStackTrace(); 66 trans.rollback(); 67 }finally{ 68 if(session!=null){ 69 session.close(); 70 71 } 72 } 73 74 75 return flag; 76 77 } 78 } 79
在測試中遇到的exception:
因為在上課時忘記將錯誤信息保存下來,所以在這里不做詳細錯誤描述:
配置文件一定嚴格書寫,地址一定準確!
總之如果按照上述的配置過程配置,出現錯誤時:
- 方法alt不出來,檢查架包是否build;
- 運行代碼后,如果提示sequence不存在的,檢查param節點;
- 如果是其他與數據庫相關的,檢查自己數據庫的約束等等
- 以上是我遇到的錯誤,其他的錯誤暫時沒遇到!
文章列表
全站熱搜