溫故知新: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 都較瘦 閱讀(93) 評論(0)  編輯  收藏 所屬分類: ORMFramework

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

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

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 吉木萨尔县| 和平县| 上饶市| 丹东市| 余江县| 阳泉市| 连城县| 西宁市| 满洲里市| 北碚区| 青铜峡市| 瓦房店市| 杭州市| 资兴市| 应城市| 惠州市| 班戈县| 鲁甸县| 东乌珠穆沁旗| 江津市| 平乐县| 驻马店市| 新兴县| 高邮市| 宕昌县| 黑水县| 满洲里市| 玉门市| 武穴市| 澜沧| 招远市| 山西省| 金乡县| 黄浦区| 张掖市| 六安市| 正阳县| 鹤庆县| 子长县| 吐鲁番市| 文安县|