Hibernate - EJB 註解映射
一、實驗環境說明
1. 環境登錄
無需密碼自動登錄,系統用戶名 shiyanlou,密碼 shiyanlou
2. 環境介紹
本實驗環境採用帶桌面的 Ubuntu Linux 環境,實驗中可能會用到桌面上的程序:
- XfceTerminal: Linux 命令行終端,打開後會進入 Bash 環境,可以使用 Linux 命令;
- Firefox:瀏覽器,可以用在需要前端界面的課程裏,只需要打開環境裏寫的 HTML/JS 頁面即可;
- GVim:非常好用的編輯器,最簡單的用法可以參考課程 Vim編輯器。
- Eclipse:Eclipse 是著名的跨平臺的自由集成開發環境(IDE)。主要用來 Java 語言開發,但是目前亦有人通過插件使其作爲 C++ 和 Python 等語言的開發工具。
3. 環境使用
使用 GVim 編輯器輸入實驗所需的代碼,然後使用 XfceTerminal 命令行環境進行編譯運行,查看運行結果,運行後可以截圖並分享自己的實驗成果,實驗樓提供的截圖是後臺截圖,無法作弊,可以真實有效證明您已經完成了實驗。
實驗記錄頁面可以在“我的課程”中查看,其中含有每次實驗的截圖及筆記,以及每次實驗的有效學習時間(指的是在實驗桌面內操作的時間,如果沒有操作,系統會記錄爲發呆時間)。這些都是您學習的真實性證明。
二、前言
本次課程使用 EjB 註解映射的方式,來實現上節課的示例。企業級 JavaBean(Enterprise JavaBean, EJB)是一個用來構築企業級應用的服務器端可被管理組件。EJB 註解表達了和 Hibernate 持久化實體對象同樣的概念。
三、新建項目工程
- 說明:Hibernate 以及其他必要文件已經內置在了實驗環境中。
(1)導入必要的 JAR 包
新建一個 Java 工程,然後引入必要的 jar 包,右擊項目工程,依次選擇 Properties->Java Build Path->Libraries->Add External JARs。Hibernate jar 包路徑爲:/home/shiyanlou/hibernate-release-4.3.9.Final/lib/required/
;mysql-connector jar 包的路徑僞: /home/shiyanlou/mysql-connector-java-5.1.35-bin.jar
。最後總的需要的包如下:
(2)新建實體類 User.java
與上節課示例類似,一個用戶具有:id(主鍵),以及 username、password 兩個屬性。不同的是這裏採用的 EJB 註解方式,可以看到 User 類被 @Entity
註解成實體,id 被 @Id
註解成主鍵。
@Entity
註解可以將一個類聲明爲一個實體 bean(即一個持久化 POJO 類)
@Id
註解則聲明瞭該實體 bean 的唯一標識屬性(對應數據庫主鍵 key)
package shiyanlou.hibernate.ejb3;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
// @Table(name='')
// 數據庫中默認會對應生成同名的 Table
// 如果要修改 Table 名,使用 @Table(name='')
// '' 內爲自定義的 Table 名
public class User {
private int id;
private String username;
private String password;
@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
(3)配置 hibernate.cfg.xml
在 src 目錄下,新建 hibernate.cfg.xml 文件,其配置如下:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
'-//Hibernate/Hibernate Configuration DTD 3.0//EN'
'http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd'>
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<!-- 表示使用 mysql 數據庫驅動類 -->
<property name='connection.driver_class'>com.mysql.jdbc.Driver</property>
<!-- jdbc 的連接 url 和數據庫(使用我們之前新建的 hibernate)-->
<property name='connection.url'>jdbc:mysql://localhost:3306/hibernate</property>
<!-- 數據庫用戶名 -->
<property name='connection.username'>root</property>
<!-- 密碼(這裏爲空) -->
<property name='connection.password'></property>
<!-- 數據庫使用的方言 -->
<property name='dialect'>org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<!-- 設置 打印輸出 sql 語句 爲真 -->
<property name='show_sql'>true</property>
<!-- 設置格式爲 sql -->
<property name='format_sql'>true</property>
<!-- 第一次加載 hibernate 時根據實體類自動建立表結構,以後自動更新表結構 -->
<property name='hbm2ddl.auto'>update</property>
<!-- 映射文件 -->
<!-- <mapping resource='shiyanlou/test/hibernate/entity/User.hbm.xml'/> -->
<!-- 這裏是最明顯的不同,映射變成了 User 實體類 -->
<mapping class='shiyanlou.hibernate.ejb3.User' />
</session-factory>
</hibernate-configuration>
可以看到,最大的變化就是映射的變化,由於我們採用了 EJB 註解的方式,因此不再需要 User.hbm.xml 來完成映射,從而映射信息也從 User.hbm.xml 變成了 User 這個實體類。
四、運行
首先要確保 MySQL 數據庫中有 hibernate 這個數據庫(建立數據庫的具體方法見上一節課程),然後編寫一個測試類,UserTest.java:
(1)增
package shiyanlou.hibernate.ejb3;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import shiyanlou.hibernate.ejb3.User;
public class UserTest {
public static void main(String[] args) {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
User user = new User();
user.setId(1);
user.setUsername('admin');
user.setPassword('admin');
session.save(user);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
Eclipse 控制檯輸出:
前面提到過,數據庫中是生成同名的表,對比查看:
五、小結
本次課程我們利用 EJB 註解映射的方式來實現上一節課的內容。
六、思考
利用 EJB 註解映射,實現其他的(刪、查、改)操作。