java之Hibernate框架實現數據庫操作


之前我們用一個java類連接MySQL數據庫實現了數據庫的增刪改查操作---------MySQL篇

但是數據庫種類之多,除了MySQL,還有Access、Oracle、DB2等等,而且每種數據庫語言都不盡相同;

這時,我們就需要一個框架來實現對主流數據庫操作的兼容,並且簡化操作流程,Hibernate就是其中一款

主流框架。這里我們用Myeclipse作為開發軟件來示例。

1.建立數據庫連接

開啟MySQL數據庫服務,並在Myeclipse中,Window-->Show View-->DB Browser,打開數據庫窗口;

右鍵New,這里要求你輸入你開啟的數據庫信息,並對其進行連接,因為我這里用的是MySQL,所以選擇

信息如下:

Driver template:MySQL Connecter/J;

Driver name:自定義,但是推薦使用和項目相關的名字;

Conection URL:jdbc:mysql://localhost:8090/eco(這里寫自己數據庫的地址);

Driver Jars:這里需要添加一個數據庫驅動,在這里是MySQL的JDBC驅動,提前下載好的;

然后就是用戶名、密碼了,如果信息無誤,那么連接成功。

2.新建java項目,並為其加入Hibernate特性

流程如下:

右鍵項目-->Myeclipse-->Add Hibernate Capabilities-->選擇版本,我這里選的是4.1版本,然后選擇Hibernate

的Core核心包,下一步;

選擇之前連接的數據庫-->在這里會生成一個hibernate.cfg.xml文件,當前存儲了數據庫的連接信息-->選擇一個

目錄來放置HibernateSessionFactory.java這個類-->finish。

這個類中的方法,會在后面的數據庫操作中用到,這里Hibernate已經幫我們寫好了,后面加以調用就OK了。

3.反向生成持久化類

數據庫中建立一張表table,並為其添加屬性字段,比如ID,name,age等等,在這里我們使用的是依靠表來

反向生成持久化類(和表中屬性相對應的類文件),表的信息設置好之后,右鍵表-->Hibernate Reverse Engineer;

這里會生成一個持久化類和關於類與表映射關系的XML文件,系統讓你選擇一個安放路徑,POJO<>DB字段打

鈎,表示項目到數據庫的映射-->Type類型:Java,ID字段(主鍵)的類型,我這里選的是assigned(手動輸入),

如果ID信息填的是學號的話,這樣就比較靠譜,如果沒有什么切實意義,那么選native,他會更具數據庫類別自

動匹配類型,MySQL就會是自增-->finish。

4.映射文件和數據庫信息文件

Student.hbm.xml

 1 <hibernate-mapping>
 2     <class name="student.Student" table="student" catalog="eco">
 3         <id name="id" type="java.lang.Integer">
 4             <column name="id" />
 5             <generator class="assigned" />
 6         </id>
 7         <property name="user" type="java.lang.String">
 8             <column name="user" length="16" not-null="true" />
 9         </property>
10         <property name="password" type="java.lang.String">
11             <column name="password" length="16" not-null="true" />
12         </property>
13         <property name="age" type="java.lang.Integer">
14             <column name="age" not-null="true" />
15         </property>
16     </class>
17 </hibernate-mapping>

這表示了student包下的Student持久化類與數據庫表student的映射關系,property是持久化類中的成員變量,

column是數據庫表的屬性字段,它們一一對應,Id標簽表示這個字段是主鍵。

hibernate.cfg.xml

 1 <session-factory>
 2         <property name="dialect">
 3             org.hibernate.dialect.MySQLDialect
 4         </property>
 5         <property name="connection.url">
 6             jdbc:mysql://localhost:8090/eco
 7         </property>
 8         <property name="connection.username">root</property>
 9         <property name="connection.password">root</property>
10         <property name="connection.driver_class">
11             com.mysql.jdbc.Driver
12         </property>
13         <property name="myeclipse.connection.profile">
14             mysqljdbc
15         </property>
16         
17         <mapping resource="student/Student.hbm.xml" />
18     </session-factory>

這是數據庫信息文件以及映射文件的注冊,其實property標簽還可以加幾個:

<property name="show_sql">true</property>表示進行數據庫操作時,在后台打印sql語句

<property name="fomat_sql">true</property>表示將打印的sql語句格式化

<property name="hbm2ddl.auto">create</property>添加記錄時對表的操作處理,create刪除新建,update更新

5.單元測試

這里來個插曲,就是單元測試,有了單元測試,我們就不用像以前那樣總是新建一個程序入口的main方法來運行

代碼功能了,可以選擇性的運行功能塊(方法)。

首先要為項目導入Junit單元測試工具的jar包,然后新建一個測試類;

 1 public class StudentTest {
 2     private Session session = HibernateSessionFactory.getSession();
 3     private Transaction transaction;
 4 
 5     @Before
 6     public void init() {
 7         // 開啟事務
 8         transaction = session.beginTransaction();
 9     }
10 
11     @After
12     public void distory() {
13         // 提交事務
14         transaction.commit();
15         // 關閉會話
16         session.close();
17         // 關閉會話工廠
18         HibernateSessionFactory.getSessionFactory().close();
19     }
20 
21     @Test
22     public void testadd() {
23         // 事務具體內容
24         Student s = new Student(334, "桔子桑", "12646574", 26);
25         session.save(s);
26     }
27 
28 }

我們來看這三個注解:

@Before 相當於初始化,我們在這個方法中實現了開啟事務;

@Test     在這里安排想要實現的功能,布置真正要做的事;

@After    相當於銷毀,在這里我們先把任務提交給數據庫,然后關閉會話/會話工廠,如果不關閉,隨着對數據庫連接

的次數增加,有可能導致連接池溢出,所以,我們在任務結束之后,關閉會話。

6.增刪改查

 1     @Test
 2     public void testadd() {
 3         // 事務具體內容
 4         Student s = new Student(334, "桔子桑", "12646574", 26);
 5         session.save(s);
 6     }
 7     @Test
 8     public void testupdate() {
 9         // 事務具體內容
10         Student s = (Student)session.get(Student.class, 1);
11         s.setAge(25);
12         session.update(s);
13     }
14     @Test
15     public void testdelete() {
16         // 事務具體內容
17         Student s = (Student)session.get(Student.class, 1);
18         session.delete(s);
19     }
20     @Test
21     public void testget() {
22         // 事務具體內容
23         Student s = (Student)session.get(Student.class, 1);
24         System.out.println(s);
25     }

以上就是數據庫的增刪改查功能,是不是很方便呢,再也不用冥思苦想地去拼接sql語句了,

Student.class表示Student類的類類型,是java反射的知識。

溫馨提示:Hibernate版本不同,獲取會話工廠的方法也會有差異,本文使用的是4.1版本的Hibernate。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM