hibernate對資料庫進行CRUD操作
阿新 • • 發佈:2019-02-03
package com.hibernate.test; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.Test; import com.hibernate.domain1.Person; public class PersonTest { private static SessionFactory sessionFactory; // 靜態程式碼塊 static { Configuration configuration = new Configuration(); // 載入配置檔案 configuration.configure("hibernate.cfg.xml"); // 建立伺服器註冊物件 // 建立服務註冊物件 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() .applySettings(configuration.getProperties()) .buildServiceRegistry(); // 採用了工廠模式建立sessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); } @Test public void testSavePerson() { // 開啟session Session session = sessionFactory.openSession(); // 事務開始 Transaction transaction = session.beginTransaction(); Person person = new Person(); // 由於在對映檔案中已經說明主鍵的產生方式是hibernate內部產生,所以在程式中不用設定主鍵 person.setPname("王大炮"); person.setPsex("男"); // 儲存person物件到資料庫中 session.save(person); // 提交事務 transaction.commit(); // 關閉session session.close(); } // 修改 @Test public void testUpdatePerson() { // 開啟session Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); /* * 1.先把修改的那行提取出來 說明, Serializable是String和包裝類共同的父類session.get(clazz, * id);// clazz是位元組碼,id是Serializable,id=1L,則這個id的型別一定要和Person類中對應的型別匹配 * 那麼把第二個引數定義為Serializable則好處是既能接受基本型別的包裝類又可以接受string類 */ // java的反射機制呼叫Java類的預設的建構函式,必須存在 Person person = (Person) session.get(Person.class, 1L);// 1L代表是Long型別,這裡的id型別要和Person類中對應的型別匹配 person.setPsex("不詳"); session.update(person); transaction.commit();// 提交事務 session.close(); } // 查詢 無需事務 @Test public void testQuery() { Session session = sessionFactory.openSession(); List<Person> personList = session.createQuery("from Person").list(); System.out.println(personList.size()); } // 刪除,兩種方式 @Test public void testDelete() { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); // 方式一,先從中獲取指定的id物件.推薦 Person person = (Person) session.get(Person.class, 1L); session.delete(person); // 方式二,建立一個新的person物件 // Person person2 = new Person(); // person2.setPid(1L); // session.delete(person2); transaction.commit(); session.close(); } }
注意:
只有查詢操作無需事務干預,其他的三個(新增,修改,刪除)需要事務干預