Hibernate查询—利用Criteria完成表的查询操作

Hibernate 利用Criteria完成表的查询操作

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、4步骤可以参考我的其它几篇文章)

5. 创建测试类

1)CritiriaDao.java

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

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

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

public class CriteriaDao {
	public void seDname(String dname){
		Session session = HibernateSessionFactory.getSession();
		//根据班级名称查询department表
		Criteria criteria = session.createCriteria(Department.class);
		criteria.add(Restrictions.eq("depName", dname));
		criteria.setMaxResults(20);
		List result = criteria.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();
		Criteria criteria = session.createCriteria(Users.class);
		criteria.add(Restrictions.like("usrDesc", sname,MatchMode.ANYWHERE));
		criteria.setMaxResults(20);
		List result2 = criteria.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();
		Criteria criteria = session.createCriteria(Users.class);
		criteria.add(Restrictions.eq("usrDesc", sname));
		criteria.setMaxResults(20);
		List result3 = criteria.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 usrDesc,int age){
		//组合查询
		Session session = HibernateSessionFactory.getSession();
		Criteria criteria = session.createCriteria(Users.class);
		criteria.add(Restrictions.eq("usrDesc", usrDesc)).add(Restrictions.eq("age", age));
		List result4 = criteria.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();
		Criteria criteria = session.createCriteria(Department.class);
		criteria.add(Restrictions.eq("depName", depName));
		List result5 = criteria.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();
		Criteria criteria = session.createCriteria(Users.class);
		criteria.add(Restrictions.eq("usrDesc", usrDesc));
		List result6 = criteria.list();
		Iterator it6 = result6.iterator();
			while(it6.hasNext()){			
				System.out.println(((Users) it6.next()).getDepartment().getDepName());
			}
			session.close();
	}


}

2)Test1.java

public class Test1 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		CriteriaDao hq = new CriteriaDao();
		//根据班级名称查询department表
		hq.seDname("101");
		
		//根据学生姓名模糊查询user表
		hq.seSname("li%");
		
		//根据学生姓名精确查询user表
		hq.seExact("lili");
		
		//组合查询
		hq.seCombine("lili", 21);
		
		//查询某个班级的学生
		hq.seDep("101");
		
		//查询一个学生所在的班级
		hq.seUsr("lili");

	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值