Hibernate 利用HQL完成表的查詢操作
1. 在Navicat中創建hibdb數據庫並設計department表和user表
1)department表
2)users表
外鍵
2. 在myeclipse的DB Browser窗格中創建與數據庫hibdb的連接;
3. 爲創建的Java工程添加hibernate的支持;
4. 在MyEclipse的DB Browser窗格中利用Hivernate反向工程(Hibernate Reverse Engineering)生成class表和student表的映射文件及POJO類。
(注第2、3步驟可以參考我的其它幾篇文章)
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");
}
}