1. Hibernate的Criteria这个东东,我觉得挺好的,它用于一个对象(也就是一张表)的各种查询非常好用,像:模糊查询,比较等等。(第一个是自己的,第二种是老陈的笔记)
以下是摘抄自课本上:
使用Criteria首先创建Criteria对象,与创建Query对象的语法很相似,但需要传入的参数是对应实体类的类型对象。然后使用Restrictions对象的静态方法(包括like,ge,gt,le,in等)构造查询条件,并添加进Criteria对象中。其中,like方法构造一个模糊查询的条件,第一个参数是参数名,第二个参数是查询条件的值,第三个参数是关键字匹配的方式,可选的有MatchMode.ANYWHERE,MatchMode.End,MatchMode.START和MatchMode.EXACT(精确查询)。ge表示构造大于等于的查询条件,gt则是大于,le则是小于等于,lt则是小于。最后,还可以通过Criteria的addOrder方法指定查询的排序方式。同样,分页查询的两个方法Criteria对象也支持,所以一般构造复杂的查询方法时候,我们采用Criteria的方式。
For Example:
//得到全部招聘信息
public static List getAllJob(long cid,long jobTypeId,long pd,String keyWord)
{
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Job.class);
//取别名
c.createAlias("jobtype","jobtype");
c.createAlias("city","city");
if(cid!=0)
{
c.add(Restrictions.eq("city.id",cid));
}
if(jobTypeId!=0)
{
c.add(Restrictions.eq("jobtype.id",jobTypeId));
}
if(pd!=0)
{
//得到calendar实例,默认为当前时间
Calendar calendar=Calendar.getInstance();
//当前的日期减少pd天
calendar.add(Calendar.DAY_OF_MONTH, (int)-pd);
//得到前pd天的日期
Date date=calendar.getTime();
c.add(Restrictions.gt("publishdate",date));
}
if(!"".equals(keyWord))
{
c.add(Restrictions.like("title", keyWord,MatchMode.ANYWHERE));
}
List list=c.list();
session.close();
return list;
}
2.对象查询
1)对象查询只能够查询一个对象。也就是说对象查询不支持
关联查询
2)对象查询非常适合于对同一张表进行多条件查询
3)criteria的使用格式:
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Emp.class);//创建一个实例
double minPay=3000;
double maxPay=5000;
//c.add(Restrictions.like("ename", "A",MatchMode.ANYWHERE));
//c.add(Restrictions.between("sal",minPay, maxPay));
//c.add(Restrictions.eq("job", "CLERK"));
c.add(Restrictions.eq("dept.dname", "SALES"));
List<Emp> empList=c.list();//返回的是一个对象集合
//没有加约束条件
for(Emp row:empList)
{
System.out.println(row.getEname());
}
4)criterian返回的永远都是对象集合
5)我要说话:
Criteria 的一个属性是关于另外一个对象的引用。那么我们就要
为这个属性创建别名
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Emp.class);//创建一个实例
double minPay=3000;
double maxPay=5000;
//c.add(Restrictions.like("ename", "A",MatchMode.ANYWHERE));
//c.add(Restrictions.between("sal",minPay, maxPay));
//c.add(Restrictions.eq("job", "CLERK"));
c.createAlias("dept", "dept");//取别名
c.add(Restrictions.eq("dept.dname", "SALES"));
List<Emp> empList=c.list();//返回的是一个对象集合
//没有加约束条件
for(Emp row:empList)
{
System.out.println(row.getEname());
}
以下是摘抄自课本上:
使用Criteria首先创建Criteria对象,与创建Query对象的语法很相似,但需要传入的参数是对应实体类的类型对象。然后使用Restrictions对象的静态方法(包括like,ge,gt,le,in等)构造查询条件,并添加进Criteria对象中。其中,like方法构造一个模糊查询的条件,第一个参数是参数名,第二个参数是查询条件的值,第三个参数是关键字匹配的方式,可选的有MatchMode.ANYWHERE,MatchMode.End,MatchMode.START和MatchMode.EXACT(精确查询)。ge表示构造大于等于的查询条件,gt则是大于,le则是小于等于,lt则是小于。最后,还可以通过Criteria的addOrder方法指定查询的排序方式。同样,分页查询的两个方法Criteria对象也支持,所以一般构造复杂的查询方法时候,我们采用Criteria的方式。
For Example:
//得到全部招聘信息
public static List getAllJob(long cid,long jobTypeId,long pd,String keyWord)
{
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Job.class);
//取别名
c.createAlias("jobtype","jobtype");
c.createAlias("city","city");
if(cid!=0)
{
c.add(Restrictions.eq("city.id",cid));
}
if(jobTypeId!=0)
{
c.add(Restrictions.eq("jobtype.id",jobTypeId));
}
if(pd!=0)
{
//得到calendar实例,默认为当前时间
Calendar calendar=Calendar.getInstance();
//当前的日期减少pd天
calendar.add(Calendar.DAY_OF_MONTH, (int)-pd);
//得到前pd天的日期
Date date=calendar.getTime();
c.add(Restrictions.gt("publishdate",date));
}
if(!"".equals(keyWord))
{
c.add(Restrictions.like("title", keyWord,MatchMode.ANYWHERE));
}
List list=c.list();
session.close();
return list;
}
2.对象查询
1)对象查询只能够查询一个对象。也就是说对象查询不支持
关联查询
2)对象查询非常适合于对同一张表进行多条件查询
3)criteria的使用格式:
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Emp.class);//创建一个实例
double minPay=3000;
double maxPay=5000;
//c.add(Restrictions.like("ename", "A",MatchMode.ANYWHERE));
//c.add(Restrictions.between("sal",minPay, maxPay));
//c.add(Restrictions.eq("job", "CLERK"));
c.add(Restrictions.eq("dept.dname", "SALES"));
List<Emp> empList=c.list();//返回的是一个对象集合
//没有加约束条件
for(Emp row:empList)
{
System.out.println(row.getEname());
}
4)criterian返回的永远都是对象集合
5)我要说话:
Criteria 的一个属性是关于另外一个对象的引用。那么我们就要
为这个属性创建别名
Session session=HibernateSessionFactory.getSession();
Criteria c=session.createCriteria(Emp.class);//创建一个实例
double minPay=3000;
double maxPay=5000;
//c.add(Restrictions.like("ename", "A",MatchMode.ANYWHERE));
//c.add(Restrictions.between("sal",minPay, maxPay));
//c.add(Restrictions.eq("job", "CLERK"));
c.createAlias("dept", "dept");//取别名
c.add(Restrictions.eq("dept.dname", "SALES"));
List<Emp> empList=c.list();//返回的是一个对象集合
//没有加约束条件
for(Emp row:empList)
{
System.out.println(row.getEname());
}