<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

    導航

    統計

    公告

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

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 妞干网在线免费观看| 99免费视频观看| 亚洲AV无码不卡在线观看下载| 亚洲欧美国产国产综合一区| 好吊妞在线成人免费| 亚洲AV日韩AV无码污污网站| 国产大片91精品免费观看男同| 朝桐光亚洲专区在线中文字幕 | 亚洲AV无码成人精品区在线观看 | 亚洲国产天堂在线观看| 1000部啪啪毛片免费看| 77777亚洲午夜久久多喷| 免费高清小黄站在线观看| 青娱乐在线视频免费观看| 亚洲桃色AV无码| 日韩精品久久久久久免费| 色噜噜亚洲男人的天堂| 国产免费怕怕免费视频观看| 精品熟女少妇aⅴ免费久久 | 在线看片v免费观看视频777 | 亚洲精品午夜国产VA久久成人| 久久久久久一品道精品免费看| 亚洲6080yy久久无码产自国产| 四虎永久在线精品免费影视| 抽搐一进一出gif免费视频| 久久香蕉国产线看观看亚洲片| 18以下岁毛片在免费播放| 亚洲国产无线乱码在线观看| 亚洲精品成人a在线观看| 91福利免费视频| 国产亚洲精彩视频| 亚洲精品高清国产一久久| 成年女人喷潮毛片免费播放| 国产精品美女久久久免费| 亚洲精品成人久久| 亚洲 无码 在线 专区| 在线视频精品免费| 国产一级婬片A视频免费观看| 亚洲一线产区二线产区精华| 亚洲片国产一区一级在线观看| 亚欧在线精品免费观看一区|