HQL實現增刪改查

    在hibernate中的增刪改查的實現。hibernate是OR框架,也就是對象關係框架,有了 hibernate我們就不用再去寫SQL語言,我們只需要操縱對象去進行增刪改查。這裏今天寫的就是在如何應用hibernate實現增刪改查。

    第一個我們首先看看增,增在SQL裏面就是insert,也就是插入,在hibernate中,我們只需要,操縱一個對象進行sava,然後再commit事務,就能實現插入功能,下面給大傢俱體看看代碼,持久類我就不再寫了,裏面也就是與數據庫中的字段要一一對應的東西,要有set,get方法,我直接就寫的怎麼調用save方法。 
import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 
public class UserTest { 
public static void main(String args[]){ 
    Configuration cfg = new Configuration().configure(); //獲取hibernate的配置信息 
    SessionFactory sf = cfg.buildSessionFactory(); //根據config建立sessionFactory 
    Session ses = sf.openSession(); //factory用於建立session,開啓Session,相當於開啓JDBC的Connection 
    Transaction ts = ses.beginTransaction(); //創建事務的對象ts 
    User user = new User(); //持久化對象 
    user.setName("kobe"); 
    user.setTel("111111111"); 
    try { 
        ses.save(user); 
        ts.commit(); 
    }catch (HibernateException he){ 
        he.printStackTrace(); 
        ts.rollback(); 
    }finally{ 
    ses.close(); 
    sf.close(); 
    System.out.println("插入成功"); 
} 
} 
} 

第二個我們看看刪,刪在SQL裏面是delete,也就是刪除,同樣在hibernate中,我們也是只需要調用一個對象,調用delete方法,就能進行刪除。
public class DeleteTest {
	public static void main(String args[]) {
		Configuration cfg = new Configuration().configure();
		SessionFactory sf = cfg.buildSessionFactory();
		Session ses = sf.openSession();
		Transaction ts = ses.beginTransaction();
		User user = new User();
		user.setId("8a8308891e9c3ef3011e9c3ef4aa0001");
		try {
			ses.delete(user);
			ts.commit();
		} catch (HibernateException he) {
			he.printStackTrace();
			ts.rollback();
		} finally {
			ses.close();
			sf.close();
			System.out.println("刪除成功");
		}
	}
}

具體中間的含義參照sava方法,這裏我們要注意一點,我們調用刪除的時候,他刪除的條件,也就是where後面的條件一定是我們xml中配置id,通過這個來進行查找刪除,這裏尤其值得注意,也就是,我這裏調用的user.setId(" ");這句話,他是通過""中的內容進行刪除的。 
第三個我們看看改,改在SQL中update,在hibernate中,我們同樣只需要操作一個對象進行更改信息。 
public class UpdateTest {
	public static void main(String args[]) {
		Configuration cfg = new Configuration().configure();
		SessionFactory sf = cfg.buildSessionFactory();
		Session ses = sf.openSession();
		Transaction ts = ses.beginTransaction();
		User user = new User();
		user.setId("8a8308891e9c3ef3011e9c3ef4aa0001");
		user.setName("kobe24");
		try {
			ses.update(user);
			ts.commit();
		} catch (HibernateException he) {
			he.printStackTrace();
			ts.rollback();
		} finally {
			ses.close();
			sf.close();
			System.out.println("更改成功");
		}
	}
} 


但是這裏我們有需要注意的地方了,如果有的朋友用過這個update就會發現,調用這個方法的時候他更新的不只是你想更新的數據,你不想更新的數據,他也會隨着改變,如果你沒有給他set值,他就會出現null,或者表格中什麼都沒有,這裏我們就需要用另一種方法了,去更新你想更新的數據,而你不想改變的數據還會保持原來的狀態,這裏我們就需要調用一個方法。 
Session ses = sf.openSession(); 
Transaction ts = ses.beginTransaction(); 
User user = (User)ses.get(User.class,"8a8308891e9c3ef3011e9c3ef4aa0001"); 
user.setName("kobe24"); 
try { 
    ses.update(user); 
    ts.commit(); 
這樣我們就會發現,我們只更新了我們想要更新的數據。ses不光光有這一個get方法,相同功能他還有一個load方法,兩個方法功能是相同的但是有什麼區別呢,區別就是用load方法時候他是從緩存中查找,而我們調用get方法的時候是從數據庫中查找,不過get方法他也是先從緩存中查找,如果沒有在去數據庫中查找。 
第四個我們看看查,查在SQL中是select,在hibernate中我們查詢的時候有多種方法,這裏我就寫一種hibernate比較提倡的方法,就是HQL。用這個方法時候我們尤其需要注意的是他其中的from跟的不是表名,而是類名。  

public class SeleteTest {
	public static void main(String args[]) {
		Configuration cfg = new Configuration().configure();
		SessionFactory sf = cfg.buildSessionFactory();
		Session ses = sf.openSession();
		Transaction tx = ses.beginTransaction();
		User user = new User();
		Query query = ses.createQuery("from User");
		List users = query.list(); // 序列化
		Iterator it = users.iterator(); // 迭代
		while (it.hasNext()) {
			user = (User) it.next();
			System.out.println(user.getName() + " " + user.getTel() + " ");
		}
		ses.close();
		sf.close();
	}
}


發佈了27 篇原創文章 · 獲贊 6 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章