[Java] Hibernate 使用 Annotation 配置
Hibernate 安裝好之後,若用物件內定義註釋 Annotation 的作法如下:
檔案配置
- 在 src / main / java 右鍵 New > Other... 搜尋 hibernate,選擇 Hibernate Configuration File (cfg.xml),點 Next 使用預設的檔名 hibernate.cfg.xml 即可(若更動檔名則後續在使用時, .configure() 要另外指定檔名)
- 可用他的 Wizard 來輸入完成 cfg.xml ,或直接 Finish ,在檔案右鍵 Open With > Generic Text Editor 手動輸入
- 如果 MySQL 的 database 叫 mydb,帳號 root,密碼 abc1234,則 hibernate.cfg.xml 範例如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">abc1234</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> </session-factory> </hibernate-configuration>
- show_sql 是 console 是否顯示 SQL 指令
- format_sql 是前者是否排版
物件中使用 Annotation:
在 Obj.java 中定義各變數時,要使用 @ 符號 @Entity @Table @Id @Column 來配置與資料庫中的映射package db import javax.persistence.Entity; import javax.persistence.Table; import javax.persistence.Id; import javax.persistence.GenerationType; import javax.persistence.Column; @Entity @Table(name="mytable") public class Obj { @Id // 主鍵 primary key 對應 varId @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private int varId; @Column(name="col2") private String var2; @Column(name="col3") private int var3; public Obj() { } public Obj(String var2, int var3) { this.var2 = var2; this.var3 = var3; } @Override public String toString() { return "Obj [varId=" + varId + ", var2=" + var2 + ", var3=" + var3 +"]"; } }
持久化物件 Obj 與資料庫 mydb 之中的表格 mytable 互相對應。而物件變數 Integer varId 與資料庫中表格 id 對應;物件變數 String var2 與表格 col2 對應;物件變數 Integer var3 與表格 col3 對應,就如上的配置。@Id 之下是主鍵 primary key "id" 所對應的 varId,而 @GeneratedValue 是定義主鍵增加方式,有 AUTO, IDENTITY, SEQUENCE, TABLE 可以選擇
使用 Hibernate
- 有幾個步驟,用 cfg.xml 做 Configuration().configure()、建立 SessionFactory、開啓 Session
- 在要使用 Hibernate 的 class 例如 TestIO:
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import java.util.List; public class TestIO { private static SessionFactory factory; public static void main(String[] args) { factory = new Configuration() .configure() .addAnnotatedClass(Obj.class) .buildSessionFactory(); // 若 hibernate.cfg.xml 檔名不在根目錄或檔名有換,路徑要寫在 .configure()之中 // 例如 .configure("/dir/hibernate2.cfg.xml") Session session = factory.openSession(); // 由 SessionFactory 開啓工作階段 Transaction transaction = session.beginTransaction(); // 由session開始事務 // 開始始用 Hibernate 做 CRUD transaction.commit(); // 提交事務,將上述該存入的存入、該讀出的讀出 factory.close(); // 關閉SessionFactory session.close(); // 關閉session } }
和使用 .hbm.xml 的差別
- 類別中要有 @ 等註解來定義對應,開始使用時 Configuration() 要有 .addAnnotatedClass(Obj.class)
- 不需要 Obj.hbm.xml 檔案,而且 hibernate.cfg.xml 之中不需要有 <mapping> 標籤
使用 Hibernate 來做 CRUD 請見連結
留言
張貼留言