1. 程式人生 > >hibernate對資料庫進行CRUD操作

hibernate對資料庫進行CRUD操作

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();
	}
}

注意:

只有查詢操作無需事務干預,其他的三個(新增,修改,刪除)需要事務干預