使用hibernate和spring MVC
通过id查询到一个用户,但是只返回指定的字段
方式一: 拼接hql
/***
* 通过数据库ID查询用户,但是只返回指定的字段
* @param id
* @param propertyNames : 指定的多个成员变量
* @return
*/
public Object[] getPropertiesById(int id,String[] propertyNames){
if(ValueWidget.isNullOrEmpty(propertyNames)){
return null;
}
String hql="select "+propertyNames[0];
for (int i = 1; i < propertyNames.length; i++) {
String string = propertyNames[i];
hql+=","+string;
}
String parameterId="id22";
hql+=" from "+clz.getCanonicalName()+" c where c.id=:"+parameterId;
Query q= this.sessionFactory.getCurrentSession().createQuery(hql);
Object result=q.setInteger(parameterId, id).uniqueResult();
Object[]objs=null;
if(result instanceof Object[]){
objs=(Object[])result;
}else{//当只返回一个成员变量的时候
objs=new Object[]{result};
}
return objs;
}
/***
* 通过id,查询到一条记录,但是只返回指定的两个字段
* @param id
* @param propertyName1 : 类的成员变量
* @param propertyName2 : 类的成员变量
* @return
*/
public Object[] getPropertiesById(int id,String propertyName1,String propertyName2){
String hql="select "+propertyName1;
if(!ValueWidget.isNullOrEmpty(propertyName2)){
hql+=","+propertyName2;
}
String parameterId="id22";
hql+=" from "+clz.getCanonicalName()+" c where c.id=:"+parameterId;
Query q= this.sessionFactory.getCurrentSession().createQuery(hql);
Object result=q.setInteger(parameterId, id).uniqueResult();
Object[]objs=null;
if(result instanceof Object[]){
objs=(Object[])result;
}else{//当只返回一个成员变量的时候
objs=new Object[]{result};
}
return objs;
}
方式二:使用投影
/***
* 通过数据库ID查询用户,但是只返回指定的字段
* @param id
* @param propertyNames : 指定的多个成员变量
* @return
*/
public Object[] getPropertiesById2(int id,String[] propertyNames){
Criteria c=this.sessionFactory.getCurrentSession().createCriteria(clz);
ProjectionList projectionList=Projections.projectionList();
if(!ValueWidget.isNullOrEmpty(propertyNames)){
for (int i = 0; i < propertyNames.length; i++) {
String string = propertyNames[i];
projectionList.add(Projections.property(string));
}
}
Object result=c.add(Restrictions.idEq(id)).setProjection(projectionList).uniqueResult();
Object[]objs=null;
if(result instanceof Object[]){
objs=(Object[])result;
}else{//当只返回一个成员变量的时候
objs=new Object[]{result};
}
return objs;
}
/***
* 通过id,查询到一条记录,但是只返回指定的两个字段
* @param id
* @param propertyName1 : 类的成员变量
* @param propertyName2 : 类的成员变量
* @return
*/
public Object[] getPropertiesById2(int id,String propertyName1,String propertyName2){
Criteria c=this.sessionFactory.getCurrentSession().createCriteria(clz);
ProjectionList projectionList=Projections.projectionList()
.add(Projections.property(propertyName1));
if(!ValueWidget.isNullOrEmpty(propertyName2)){
projectionList.add(Projections.property(propertyName2));
}
Object result=c.add(Restrictions.idEq(id)).setProjection(projectionList).uniqueResult();
Object[]objs=null;
if(result instanceof Object[]){
objs=(Object[])result;
}else{//当只返回一个成员变量的时候
objs=new Object[]{result};
}
return objs;
}
使用场景:知道id,但是没必要获取整条记录,只需要获取其中的两三个字段而已.
本文详细介绍了如何利用Hibernate和SpringMVC框架,通过数据库ID查询用户并仅返回指定字段的方法。包括两种实现方式:拼接HQL和使用投影。适用于场景中只需获取特定字段的情况,避免了不必要的资源消耗。
3773

被折叠的 条评论
为什么被折叠?



