做java项目的时候,遇到了查询的问题,我用到的是hibernate框架,但hibernate的hql语句有时候用起来不是很顺手,所以,在用到查询的时候,时不时还是会用到createQuery方法和createSQLQuery方法的,下面就这两个方法提出我自己做项目的一点感悟。

createQuery方法:

这个方法要求传个hql语句的值,注意:一定要是hql语句,原生态的sql是行不通的,当hql语句中有多个参数,而我们又不确定具体有几个的时候怎么办呢?可以采用如下方法:

String hql = "from FaspRelBus r where r.busCode=? and r.faspCode=?";
Object[] obj = new Object[]{busCode,faspCode};

public List getFaspRelBus(String hql ,Object[] values){
		Query q = this.getSession().createQuery(hql);
		for(int i=0;i<values.length;i++){
			q.setParameter(i, values[i]);
		}
		List result = new ArrayList(); 
		result = q.list();
		return result;
    }

这里又遇到了一个问题,多参数是解决了,如果想要把取出来的集合转化成List<Bean>类型的怎么办呢?

如果需要转化成Bean类型,有两种方法,第一种是查询的时候用createSQLQuery方法,另一种是用createQuery方法,但还需要转化一次,下面讲解如何转化:

方法一:.假如这个Bean的名字叫FaspRelBus,有如下属性:

private Integer id;
private String faspCode;
private String faspName;
private String faspPassword;
private String busCode;
private String busName;
private String busPassword;
private String systemFlag;

那么,获取到集合后,可以将集合中的每一个对象取出,转化成Object数组类型,然后将数组中的每个元素赋给对象对应的每个属性,如下:

List<FaspRelBus> frblist = new ArrayList<FaspRelBus>();
    List rlist = faspRelBusDAO.findRelBus(userCode);
    for(int i=0;i<pdlist.size();i++){
    	Object[] obj = (Object[]) rlist.get(i);
                FaspRelBus frb = new FaspRelBus();
                frb.setId(obj[0].toString());
                frb.setFaspCode(0bj[1].toString());
                frb.setFaspName(obj[2].toString());
                frb.setFaspPassWord(obj[3].toString());
                ......
    	frblist.add(frb);
}

 

方法二:

查询数据的时候采用createSQLQuery方法,sql语句采用原生态sql语句,不要用hql,比如说查询表fasp_rel_bus的时候

用:

String sql = "select * from fasp_rel_bus  f where f.busCode='zhoule' and f.faspName='周乐'" 即可

List results = this.getSession().createSQLQuery(sqlString).addEntity(FaspRelBus.class).list();

因为createSQLQuery方法有一个addEntity方法,可以将对象转化成实体bean,这样获取到的list是经过转化了的,取对象的时候可以直接将集合中的每个对象赋值给bean,如下:

FaspRelBus f = (FaspRelBus)results.get(0);

以上是将集合中取出的对象转化成实体Bean的一点愚见,如还有更好的方法,望不吝赐教,共同学习,共同进步!

posted on 2011-12-11 22:25  第一印象  阅读(9552)  评论(0编辑  收藏  举报