解析 hibernate 的 session.createSQLQuery(sql) & createQuery(hql) ---工作笔记

之前一直都是用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());
	}

测试结果如下

结果图片







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值