Hibernate查詢—利用HQL完成表的查詢操作

Hibernate 利用HQL完成表的查詢操作

1. Navicat中創建hibdb數據庫並設計department表和user

1department

 

2)users

 

外鍵

 

2. myeclipseDB Browser窗格中創建與數據庫hibdb的連接;

3. 爲創建的Java工程添加hibernate的支持;

4. MyEclipseDB Browser窗格中利用Hivernate反向工程(Hibernate Reverse Engineering)生成class表和student表的映射文件及POJO類。

(注第23步驟可以參考我的其它幾篇文章)

5. 創建測試類

1)HqlDao.java

import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.hibernate.Query;
import org.hibernate.Session;

import com.HibernateSessionFactory;
import com.entity.Department;
import com.entity.Users;

public class HqlDao {
	
	public void seDname(String dname){
		Session session = HibernateSessionFactory.getSession();
		//根據班級名稱查詢department表select d.depId 
		String hql1 = "from Department d where d.depName=:dname";
		Query query = session.createQuery(hql1);
		query.setString("dname", dname);
		List result = query.list();
		Iterator it = result.iterator();
			while(it.hasNext()){
				Department dep = (Department)it.next();
				System.out.println("班級id:"+dep.getDepId()+"    "+"班級名稱:"+dep.getDepName());
			}
			session.close();
	}
	
	public void seSname(String sname){
		//根據學生姓名模糊查詢user表
		Session session = HibernateSessionFactory.getSession();
		String hql2 = "from Users as u where u.usrDesc like :sname";
		Query query2 = session.createQuery(hql2);
		query2.setString("sname", sname);
		List result2 = query2.list();
		Iterator it2 = result2.iterator();
			while(it2.hasNext()){
				Users user = (Users)it2.next();
				System.out.println("姓名:"+user.getUsrDesc()+"  年齡:"+user.getAge()+"  班級:"+user.getDepartment().getDepName());
			}
			session.close();
	}
	
	public void seExact(String sname){
		//根據學生姓名精確查詢user表
		Session session = HibernateSessionFactory.getSession();
		String hql3 = "from Users as u where u.usrDesc=:sname";
		Query query3 = session.createQuery(hql3);
		query3.setString("sname", sname);
		List result3 = query3.list();
		Iterator it3 = result3.iterator();
			while(it3.hasNext()){
				Users user = (Users)it3.next();
				System.out.println("姓名:"+user.getUsrDesc()+"  年齡:"+user.getAge()+"  班級:"+user.getDepartment().getDepName());
			}
			session.close();
	}
	
	public void seCombine(String cname,int age){
		//組合查詢
		Session session = HibernateSessionFactory.getSession();
		String hql4 = "from Users as u where u.usrDesc=:cname and u.age=:age";
		Query query4 = session.createQuery(hql4);
		query4.setString("cname", cname);
		query4.setInteger("age", age);
		List result4 = query4.list();
		Iterator it4 = result4.iterator();
			while(it4.hasNext()){
				Users user = (Users)it4.next();
				System.out.println("姓名:"+user.getUsrDesc()+"  年齡:"+user.getAge()+"  班級:"+user.getDepartment().getDepName());
			}
			session.close();
	}
	
	public void seDep(String depName){
		//查詢某個班級的學生
		Session session = HibernateSessionFactory.getSession();
		String hql5 = "from Department d where d.depName=:depName";
		Query query5 = session.createQuery(hql5);
		query5.setString ("depName",depName);
		List result5 = query5.list();
		Iterator it5 = result5.iterator();

			while(it5.hasNext()){
				Department d = (Department)it5.next();
				Set set = d.getUserses();
				Iterator its = set.iterator();
				while(its.hasNext()){
					System.out.println(
							"學生姓名:"+((Users) its.next()).getUsrDesc());
				}
				
			}
			session.close();
	}
	
	public void seUsr(String usrDesc){
		//查詢一個學生所在的班級
		Session session = HibernateSessionFactory.getSession();
		String hql6 = "select u.department,u from Users u where u.usrDesc=:usrDesc";
		Query query6 = session.createQuery(hql6);
		query6.setString ("usrDesc",usrDesc);
		List result6 = query6.list();
		Iterator it6 = result6.iterator();
			while(it6.hasNext()){			
				Object[] obj = (Object[])it6.next();
				System.out.println("班級:"+((Department)obj[0]).getDepName()
						+"   學生姓名:"+((Users)obj[1]).getUsrDesc());
			}
			session.close();
	}

}

2)Test1.java

public class Test1 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HqlDao hq = new HqlDao();
		
		//根據班級名稱查詢department表
		hq.seDname("101");
		
		//根據學生姓名模糊查詢user表
		hq.seSname("li%");
		
		//根據學生姓名精確查詢user表
		hq.seExact("lili");
		
		//組合查詢
		hq.seCombine("lili", 21);
		
		//查詢某個班級的學生
		hq.seDep("101");
		
		//查詢一個學生所在的班級
		hq.seUsr("lili");

	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章