<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫故知新:hibernate_01感受基本使用

    作為一個ORM框架,hibernate對JDBC進行了輕量級的封裝,使得我們在開發時能夠把更多的精力放在業務實現上,不過這畢竟是一把雙刃劍,在提供了方便的同時,也降低了程序員理解數據庫、SQL語句的門檻,所以在平時,還是需要花一些時間在數據庫上,至少是SQL上。下面記錄的是平時學習,工作中可能用到的一些技術點,或者心得,記錄下來,以備查看。

    先交代一下和使用環境相關的信息
    IDE:Eclipse Kepler Service Release 2
    Mysql:5.0.96
    使用Maven構建測試項目,所需依賴如下(在實際的使用中,可能涉及更多的依賴,尤其在框架間整合時)
     1     <!-- 方便書寫測試案例 -->
     2     <dependency>
     3       <groupId>junit</groupId>
     4       <artifactId>junit</artifactId>
     5       <version>3.8.1</version>
     6       <scope>test</scope>
     7     </dependency>
     8     
     9     <!-- hibernate相關依賴 -->
    10     <dependency>
    11         <groupId>org.hibernate</groupId>
    12         <artifactId>hibernate-entitymanager</artifactId>
    13         <version>4.3.5.Final</version>
    14     </dependency>
    15     
    16     <!-- log4j相關依賴 -->
    17     <dependency>
    18         <groupId>log4j</groupId>
    19         <artifactId>log4j</artifactId>
    20         <version>1.2.16</version>
    21     </dependency>
    22 
    23     <!-- Mysql驅動依賴 -->
    24     <dependency>
    25         <groupId>mysql</groupId>
    26         <artifactId>mysql-connector-java</artifactId>
    27         <version>5.1.6</version>
    28     </dependency>
    單獨使用hibernate時,需要為其指定一個創建sessionFactory的配置文件hibernate.cfg.xml,常規內容如下,放置于項目classpath下
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-configuration PUBLIC
     3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     4         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     5 <hibernate-configuration>
     6     <session-factory name="sessionFactory">
     7         <!-- 驅動類 -->
     8         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
     9         <!-- 連接字符串 -->
    10         <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_begin</property>
    11         <property name="hibernate.connection.username">root</property>
    12         <property name="hibernate.connection.password">root</property>
    13         <!-- 數據庫對應方言 -->
    14         <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    15         <!-- 實體類自動生成數據表 -->
    16         <property name="hibernate.hbm2ddl.auto">update</property>
    17         <!-- 控制臺顯示SQL語句 -->
    18         <property name="show_sql">true</property>
    19         <!-- 實體類相關XML文件 -->
    20         <mapping resource="domain/Student.hbm.xml"/>
    21     </session-factory>
    22 </hibernate-configuration>
    23 
    配置完畢之后,我們只需通過sessionFactory來獲取session,之后通過session對數據庫進行操作即可,通常來說,項目中會把sessionFactory的獲取寫進一個工具類中,通過工具類獲取session,如下
     1 package util;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.boot.registry.StandardServiceRegistry;
     6 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     7 import org.hibernate.cfg.Configuration;
     8 
     9 /**
    10  * Hibernate工具類,用于通過配置文件構建session工廠,通過工廠返回session
    11  * @author Alvin Du
    12  *
    13  */
    14 public class HibernateUtil {
    15     //SessionFactory是線程安全的,對資源占用較高,一般需要定義為單例的
    16     private static final SessionFactory FACTORY = buildSessionFactory();
    17 
    18     private static SessionFactory buildSessionFactory() {
    19         
    20         Configuration configuration = new Configuration().configure();
    21         //hibernate 4中使用standardServiceRegistryBuilder創建standardServiceRegistry
    22         StandardServiceRegistryBuilder standardServiceRegistryBuilder =
    23                 new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
    24         StandardServiceRegistry standardServiceRegistry = standardServiceRegistryBuilder.build();
    25         SessionFactory sessionFactory = configuration.buildSessionFactory(standardServiceRegistry);
    26         
    27         return sessionFactory;
    28     }
    29 
    30     /**
    31      * 獲取工廠
    32      * @return the factory
    33      */
    34     public static SessionFactory getFactory() {
    35         return FACTORY;
    36     }
    37     
    38     /**
    39      * 獲取hibernate session
    40      * @return
    41      */
    42     public static Session openSession(){
    43         return FACTORY.openSession();
    44     }
    45     
    46     /**
    47      * 關閉hibernate session
    48      * @param session
    49      */
    50     public static void closeSession(Session session){
    51         if(session !=null){
    52             session.close();
    53         }
    54     }
    55 
    56 }
    57 
    之后,我們需要為hibernate配置實體類和表的映射,此處為演示,一切從簡,定義Student實體類和對應的hbm配置文件,類和hbm一般習慣放置于同一個包下
    (表和實體類之間的映射還可以使用注解的方式進行配置,后續會再記錄)
    Student.java
     1 package domain;
     2 
     3 public class Student {
     4 
     5     private int id;
     6     private String name;
     7     private String grade;
     8     //get/set方法和構造器省略,但是實際不可不寫
     9 
    10 }
    11 
    Student.hbm.xml
     1 <?xml version="1.0"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     4 <hibernate-mapping>
     5     <!-- 配置類名和表的對應 -->
     6     <class name="domain.Student" table="STUDENT">
     7         <!-- 字段和屬性之間的對應 -->
     8         <id name="id" type="int">
     9             <column name="ID" />
    10             <generator class="native" />
    11         </id>
    12         <property name="name" type="java.lang.String">
    13             <column name="NAME" />
    14         </property>
    15         <property name="grade" type="java.lang.String">
    16             <column name="GRADE" />
    17         </property>
    18     </class>
    19 </hibernate-mapping>
    20 
    至此,環境的搭建就告一段落,書寫測試類進行測試
     1 package demo;
     2 
     3 import java.util.List;
     4 
     5 import org.hibernate.Session;
     6 import org.junit.Test;
     7 
     8 import domain.Student;
     9 import util.HibernateUtil;
    10 
    11 public class App 
    12 {
    13     @Test
    14     public void addTest() {
    15         //session使用結束之后注意記得釋放資源
    16         Session session = null;
    17         try {
    18             //一般使用,考慮采用如下寫法
    19             session = HibernateUtil.openSession();
    20             //開啟事物
    21             session.beginTransaction();
    22             
    23             Student stu1 = new Student();
    24             stu1.setName("小明");
    25             stu1.setGrade("一");
    26             session.save(stu1);
    27             
    28             Student stu2 = new Student();
    29             stu2.setName("小紅");
    30             stu2.setGrade("二");
    31             session.save(stu2);
    32             
    33             session.getTransaction().commit();
    34             
    35         } catch (Exception e) {
    36             //異常時回滾事物
    37             if (session != null) {
    38                 session.getTransaction().rollback();
    39             }
    40         } finally{
    41             if (session != null) {
    42                 session.close();
    43             }
    44         }
    45     }
    46     
    47 }
    48     
    49 
    以上就是hibernate最簡單的使用

    posted on 2015-01-18 20:43 都較瘦 閱讀(92) 評論(0)  編輯  收藏 所屬分類: ORMFramework

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    公告

    博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 美女羞羞免费视频网站| 四虎影在线永久免费观看| 国产成人亚洲精品狼色在线| 免费看一区二区三区四区| 亚洲成a人片在线观看久| 男男gay做爽爽免费视频| 成人免费视频一区二区三区| 深夜A级毛片视频免费| 亚洲av永久无码精品网站 | 精品久久久久久无码免费| 亚洲国产精品一区二区久久hs| 久久久久av无码免费网| 美女视频黄.免费网址| 亚洲视频在线视频| 永久免费av无码入口国语片| 亚洲一区精品视频在线| 91精品国产免费久久久久久青草| 亚洲综合色一区二区三区小说| 最近的中文字幕大全免费8| 亚洲av综合av一区二区三区| 四虎永久成人免费| 日韩在线永久免费播放| 亚洲国产人成在线观看| 18禁超污无遮挡无码免费网站国产| 久久亚洲国产最新网站| 亚洲熟妇无码八AV在线播放| 在线免费观看一级毛片| 99久久99久久精品免费观看| 人妻仑乱A级毛片免费看| 亚洲综合无码无在线观看| 亚洲成人一区二区| 一区二区无码免费视频网站| 在线毛片片免费观看| 一级特黄录像免费播放中文版| 亚洲人成网男女大片在线播放| 国产亚洲成av人片在线观看| 黄色成人免费网站| 99免费在线视频| 亚洲日韩乱码久久久久久| 永久免费bbbbbb视频| 国产精品久久免费|