1. 程式人生 > >Hibernate實現簡單的CRUD操作和常見類(三)

Hibernate實現簡單的CRUD操作和常見類(三)

  “兩個蝴蝶飛”特別喜歡"java1234知識分享網"小峰的實用主義,所以本文及其系列文章均是採用實用主義,從專案和程式碼的角度去分析。由於本人經驗有限,嘴皮子不溜,所以學術性,概念性,底層性的知識點暫時不做介紹。文章中有錯誤之處,歡迎拍磚和指點。特別感謝"java1234知識分享網 "和"黑馬程式設計師官網",所有的資料大部分是兩者提供,為了方便書寫,故不一一指名出處,請諒解,非常抱歉。

上一章簡單介紹了Hibernate中hibernate.cfg.xml檔案和Xxx.hbm.xml檔案的詳細解釋(二),如果沒有看過,請觀看上一章

寫一個簡單的User表的CRUD操作

一   新建Hibernate工具類  HibernateUtils.java

HibernateUtils.java

package com.yjl.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 @author: 兩個蝴蝶飛
 @date: 2018年10月8日 下午8:43:29
 @Description SessionFactory的工具類
*/
public class HibernateUtil {
	/**
	 * @param configuration 配置
	 * @param sessionFactory session工廠
	 */
	private static Configuration configuration;
	private static SessionFactory sessionFactory=null;
	//私有化
	private HibernateUtil(){
		
	}
	/*
	 * 得到sessionFactory物件
	 */
	public static SessionFactory getSessionFactory(){
		if(sessionFactory==null){
			configuration=new Configuration();
			configuration.configure();
			sessionFactory=configuration.buildSessionFactory();
		}
		return sessionFactory;
	}
	/*
	 * 得到session物件
	 */
	public static Session getSession(){
		return getSessionFactory().openSession();
	}
	//測試一下
	public static void main(String []args){
		System.out.println(getSession());
	}
}

 SessionFactory是單例項的,整個Hibernate執行專案期間只生成一個,用單例模式生成!!!. 注意這點。

二    插入的測試  save

@Test
	public void saveTest(){
		//1  得到Session物件
		Session session=HibernateUtil.getSession();
		//2 開啟事務
		Transaction tran=session.beginTransaction();
		//3 例項化物件
		User user=new User();
		user.setUserName("兩個蝴蝶飛");
		user.setSex("男");
		user.setAge(24);
		user.setPassword("123456");
		user.setDescription("一個有夢想的程式設計師");
		//4利用save()方法進行相應的儲存
		session.save(user);
		//5 提交事務
		tran.commit();
		//6 關閉session
		session.close();
	}

 執行後檢視資料庫,發現user表添加了,而且正確的插入了資料

三  簡單查詢的測試   get()

        @Test
	public void getTest(){
		Session session=HibernateUtil.getSession();
		User user=session.get(User.class,1);
		System.out.println(user.getUserName()+"----"+user.getDescription());
	}

四  簡單修改的測試 update()

	@Test
	public void updateTest(){
		//1  得到Session物件
		Session session=HibernateUtil.getSession();
		//2 開啟事務
		Transaction tran=session.beginTransaction();
		//3 得到物件
		User user=session.get(User.class,1);
                if(user!=null){
                    user.setAge(26);
		    user.setDescription("要做一個高階程式設計師");
		    //4利用save()方法進行相應的儲存
		    session.update(user);
                }
		//5 提交事務
		tran.commit();
		//6 關閉session
		session.close();
	}

五   簡單刪除的測試

@Test
	public void deleteTest(){
		//1  得到Session物件
		Session session=HibernateUtil.getSession();
		//2 開啟事務
		Transaction tran=session.beginTransaction();
		//3 得到物件
		User user=session.get(User.class,1);
		//4 如果存在,就進行刪除
		if(user!=null){
			session.delete(user);
		}
		//5 提交事務
		tran.commit();
		//6 關閉session
		session.close();
	}

六  Hibernate 中Configurate 類

所用到的:

                        configuration=new Configuration();
			configuration.configure();
			sessionFactory=configuration.buildSessionFactory();

 其中:

public Configuration()
  {
        //呼叫類載入進行建立
        this(new BootstrapServiceRegistryBuilder().build());
  }
 public Configuration configure()
/*     */     throws HibernateException
/*     */   {
               //名稱為hibernate.cfg.xml, 不能變,是固定值
/* 244 */     return configure("hibernate.cfg.xml");
/*     */   }

七   Hibernate中的SessionFactory類

//建立sessionFactory物件
public SessionFactory buildSessionFactory()
/*     */     throws HibernateException
/*     */   {
/* 724 */     log.debug("Building session factory using internal StandardServiceRegistryBuilder");
/* 725 */     standardServiceRegistryBuilder.applySettings(properties);
/* 726 */     return buildSessionFactory(standardServiceRegistryBuilder.build());
/*     */   }

SessionFactory中的主要方法:

八   Hibernate中的Session類

常用方法:

 

 

 

 

 

 

 

 九   Hibernate中的Transaction類

 其中EntityTransaction 類:

其中,新增save(), 更新 update(), 刪除delete() ,是需要事務操作的,不要忘記 tran.commit(); 提交事務。

查詢get() 是不需要事務操作的。

注意,不要忘記關閉Session .  session.close(); 關閉。

謝謝!!!