文章出處

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>
hibernate.cfg.xml

 

實體類名.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節點;
  • 如果是其他與數據庫相關的,檢查自己數據庫的約束等等
  • 以上是我遇到的錯誤,其他的錯誤暫時沒遇到!

  

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()