[Java] Hibernate CRUD

一切設定好後(有使用 hbm.xml 對應檔案,和持久化物件中使用 Annotation兩種)

Hibernate 中使用 CRUD (Create、Read、Update、Delete)

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()
                .buildSessionFactory();
        //若使用 Annotation 則在 buildSessionFactory()之前要 .addAnnotatedClass(Obj.class)
        
        Session session = factory.openSession();
        Transaction transaction = session.beginTransaction();

        // Create
        Obj myObj1 = new Obj("data2", data3);
        session.save(myObj1);
        // 由建構子設定 myObj1 兩個值(id 由 Hibernate 決定),執行session.save() 會
        // 準備將之依照對應 column 各值存入資料庫表格中



        // Read 用主鍵取特定資料
        Obj myObj2 = (Obj)session.get(Obj.class, 5);
        System.out.println(myObj2);
        // 從資料庫表格中取出 id=5 的 row 資料,依照各 column 將值給 myObj2 的varId、var2、var3
        // 並用 .toString() 印出來



        // Read 使用 HQL 取出符合條件的資料,可能多筆使用 List
        List<Obj> qryResult = session.createQuery("from Obj obj where obj.var2='data2'").list();
        for(Obj obj : qryResult) {
            System.out.println(obj);
        }
        // 在資料庫中找出 var2 值為 'data2' 的串列起來,注意使用物件變數名而非表格欄位



        // Update 用主鍵取特定資料後更新某些欄位
        Obj myObj3 = session.get(Obj.class, 2);
        myObj3.setVar2("newData");
        // 取出 id=2 的資料並由Setter設定新值,等執行 transaction.commit() 時即 update 



        // Update 將所有資料的某欄全部更新
        session.createQuery("update Obj set var3=7").executeUpdate();
        // 將表格中所有資料的 col3 全更新成數值 7



        // Delete 刪除指定主鍵的資料
        Obj myObj4 = session.get(Obj.class, 10);
        session.delete(myObj4);
        // 執行 transaction.commit() 時將刪除 id=10 的資料



        // Delete 用 Update 的方法來刪除資料
        session.createQuery("delete from Obj where varId=9").executeUpdate();
        // 刪除 id=9 的資料
        
        
        
        transaction.commit();
        factory.close();
        session.close();

留言