之前一直都是用hibernate的 hql 面向對象的查詢思路 查詢出來的都是具體的實體類的集合,這幾日查詢了一下相關資料,手動解析 createSQLQuery 和 createQuery 返回值。
原來 createSQLQuery 和 createQuery 返回都市 Object[] 型的 List ,這樣一來就知道如何解析了。
舉一個簡單的例子:
有3張表 2個主表 1箇中間表(符合主鍵)
Table 1
手機信息表t_phone
主要字段 PhoneId,PhoneName
Table 2
類型表 t_phone_type
主要字段 TypeId, TypeName
Table 3
手機類型中間表(符合主鍵)t_phone_type_lk
字段 TypeId, PhoneId
java具體代碼如下
public List findDate(){
// String sql="SELECT p.phoneId,p.PhoneName,t.TypeId,t.TypeName " +
// "FROM t_phone p, t_phone_type_lk ptlk, t_phone_type t " +
// "WHERE p.phoneId = ptlk.phoneId and ptlk.typeId = t.typeId " +
// "and p.phoneId = ? and t.TypeFatherId = 21";
String hql = "SELECT p.phoneId,p.phoneName,t.typeId,t.typeName " +
"FROM TPhone p,TPhoneTypeLk ptlk, TPhoneType t " +
"WHERE p.phoneId = ptlk.id.phoneId and ptlk.id.typeId = t.typeId " +
"and p.phoneId = ? ";
Session session = null;
List<Object[]> res = new ArrayList<Object[]>();
session= getSession();
// res = session.createSQLQuery(sql).setParameter(0, 2).list();
res = session.createQuery(hql).setInteger(0, 2).list();
session.close();
System.out.println("獲得list size:"+res.size());
return res;
}
註釋掉的事 sql 語句的查詢 其結果可以使用通用的方法進行解析
以下是用Junit 4 進行測試的方法
@Test
public void testFindDate() {
List enlist = new Vector();
enlist = tplkDao.findDate();
for (Object obj : enlist) {
Object[] res = (Object[]) obj;
for (Object datas : res) {
System.out.print(datas+"\t");
}
System.out.print("\n");
}
System.out.println("Test 返回list 大小"+ enlist.size());
}
測試結果如下