HQL适用于静态查询,QBC适用于动态查询
(1):HQL适用于静态查询
StringBuffer queryString=new StringBuffer();
Boolean ConditionFound=false;
if(loginid!=null)
{
queryString.append("lower(s.loginId)=:loginid");
ConditionFound=true;
}
if(password!=null)
{
if(ConditionFound)
queryString.append(" and ");
queryString.append(" s.password=:password ");
ConditionFound=true;
}
String fromClause=ConditionFound?" from ZhikeUser s where ":" from ZhikeUser ";
queryString.insert(0,fromClause).append(" order by s.id");
Query query= getSession().createQuery(queryString.toString());
if(loginid!=null)
query.setString("loginid", loginid);
if(password!=null)
query.setString("password", password);
List querylist=query.list();
for(int q=0;querylist!=null&&q<querylist.size();q++)
{
ZhikeUser zhikequeryuser=(ZhikeUser)querylist.get(q);
}
上面是通过sql语句的拼凑实现的,
其实类似:Query query=getSession().createQuery("from ZhikeUser s where s.loginId=:loginid and s.password=:password ");
(2):QBC适用于动态查询
Criteria crit= getSession().createCriteria(ZhikeUser.class);
ZhikeUser zhikeuserquery=new ZhikeUser();
zhikeuserquery.setLoginId("1");
Example example=Example.create(zhikeuserquery);
crit=crit.add(example);
List critlist=crit.list();
for(int cq=0;critlist!=null&&cq<critlist.size();cq++)
{
ZhikeUser zhikequeryuser=(ZhikeUser)critlist.get(cq);
}
这个没有问题通过
为什么
Criterion criterion1 =
Expression.eq("loginid",loginid);
Criterion criterion2 =
Expression.eq("password",password);
crit=crit.add(criterion1);
crit=crit.add(criterion2);
老是报告错误为什么?
2007 11:22看web 开发一些问题有感,以及对iorit2003文章分析有感!
这个也是没有问题的
Criteria crit= getSession().createCriteria(ZhikeUser.class);
ZhikeUser zhikeuserquery=new ZhikeUser();
zhikeuserquery.setLoginId("1");
Example example=Example.create(zhikeuserquery);
crit=crit.add(example);
List critlist=crit.list();
在Hibernate中队示例查询,默认情况下会排除掉示例对象中属性值为空的属性,还可以调用Example.excludeNone(排除空串值)/excludeZeros(排除零值),或者调用Example.excludeProperty方法来指定排除特定属性。
示例查询主要应用于组合查询中,比如根据用户输入的查询条件动态生成最终的查询语句,通过使用示例查询,可以避免由于查询条件过多而写的大量if判断语句。
Example.excludeNone()好像没有排除空字符串!
(1):HQL适用于静态查询
StringBuffer queryString=new StringBuffer();
Boolean ConditionFound=false;
if(loginid!=null)
{
queryString.append("lower(s.loginId)=:loginid");
ConditionFound=true;
}
if(password!=null)
{
if(ConditionFound)
queryString.append(" and ");
queryString.append(" s.password=:password ");
ConditionFound=true;
}
String fromClause=ConditionFound?" from ZhikeUser s where ":" from ZhikeUser ";
queryString.insert(0,fromClause).append(" order by s.id");
Query query= getSession().createQuery(queryString.toString());
if(loginid!=null)
query.setString("loginid", loginid);
if(password!=null)
query.setString("password", password);
List querylist=query.list();
for(int q=0;querylist!=null&&q<querylist.size();q++)
{
ZhikeUser zhikequeryuser=(ZhikeUser)querylist.get(q);
}
上面是通过sql语句的拼凑实现的,
其实类似:Query query=getSession().createQuery("from ZhikeUser s where s.loginId=:loginid and s.password=:password ");
(2):QBC适用于动态查询
Criteria crit= getSession().createCriteria(ZhikeUser.class);
ZhikeUser zhikeuserquery=new ZhikeUser();
zhikeuserquery.setLoginId("1");
Example example=Example.create(zhikeuserquery);
crit=crit.add(example);
List critlist=crit.list();
for(int cq=0;critlist!=null&&cq<critlist.size();cq++)
{
ZhikeUser zhikequeryuser=(ZhikeUser)critlist.get(cq);
}
这个没有问题通过
为什么
Criterion criterion1 =
Expression.eq("loginid",loginid);
Criterion criterion2 =
Expression.eq("password",password);
crit=crit.add(criterion1);
crit=crit.add(criterion2);
老是报告错误为什么?
2007 11:22看web 开发一些问题有感,以及对iorit2003文章分析有感!
这个也是没有问题的
Criteria crit= getSession().createCriteria(ZhikeUser.class);
ZhikeUser zhikeuserquery=new ZhikeUser();
zhikeuserquery.setLoginId("1");
Example example=Example.create(zhikeuserquery);
crit=crit.add(example);
List critlist=crit.list();
在Hibernate中队示例查询,默认情况下会排除掉示例对象中属性值为空的属性,还可以调用Example.excludeNone(排除空串值)/excludeZeros(排除零值),或者调用Example.excludeProperty方法来指定排除特定属性。
示例查询主要应用于组合查询中,比如根据用户输入的查询条件动态生成最终的查询语句,通过使用示例查询,可以避免由于查询条件过多而写的大量if判断语句。
Example.excludeNone()好像没有排除空字符串!