hql 和sql语句的区别

1.hibernate
hql 语句返回对象可以直接用类型来接收。
sql语句返回的是一个Object数组。
两者的接收方式不同。

举例:
sql语句
执行sql

//注意使用的是Object数组接收,循环遍历用String.valueof方法转换换成对象。执行的方法是createSQLQuery。(查询大于两个参数的用Object接收)

(1)public String   getTInvPlan(String ipId)throws Exception{
        String sql="select PLAN_NAME  from T_INV_PLAN  where IP_ID='"+ipId+"'";
        List<String> objlist=getSession().createSQLQuery(sql).list();

        return objlist.get(0);
    }
    (2)public List<TTrainActivity> getTrainActivityInfo(String userGuid)
            throws Exception {
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT TA_GUID,TRAIN_TIME,BEGIN_DATE,END_DATE,ACTIVITY_NAME  FROM T_TRAIN_ACTIVITY  WHERE TA_GUID IN "
                + "(SELECT TA_GUID FROM t_train_invitation WHERE TI_GUID IN "
                + "(SELECT T .TI_GUID FROM T_TRAIN_INVITATIONRIGHTS T WHERE T .USER_GUID = '"
                + //此sql包含或取当前日期的方法
                + userGuid + "'))and END_DATE > =trunc(sysdate)");
//sql语句接收方式。
List<Object[] > objlist = this.getSession()
                .createSQLQuery(sql.toString()).list();
        List<TTrainActivity> list = new ArrayList<TTrainActivity>();
        TTrainActivity tadto = new TTrainActivity();
        for (int i = 0; i < objlist.size(); i++) {
            Object[] obj = objlist.get(i);
            SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
            tadto.setTrainTime(sim.parse(String.valueOf(obj[1])));
            tadto.setBeginDate(sim.parse(String.valueOf(obj[2])));
            tadto.setEndDate(sim.parse(String.valueOf(obj[3])));
            tadto.setTaGuid(String.valueOf(obj[0]));
            tadto.setActivityName(String.valueOf(obj[4]));
            list.add(tadto);
        }
        return list;
    }

hql 语句

sql 语句与hql语句最大的区别就是hql通过配置文件操作对象,sql语句直接操作数据库。
所以sql语句hql语句在写法上有区别。因为sql操作的是数据库,所以操作的表名字必须和数据库对应包括字段。hql语句操作实体类对象,所以操作的表名字及字段都是实体类的名字。通过配置文件与数据库关联。
hql语句案例。执行的方法是createQuery
public AppResListInfo getTrainActivityInfobook(
QueryInfo queryInfo, String userGuid) throws Exception {

    AppResListInfo<TTrainActivity> listInfo = new AppResListInfo();
    StringBuffer sql = new StringBuffer();
    // sql.append("SELECT * FROM T_TRAIN_ACTIVITY WHERE  END_DATE < trunc(sysdate)");
    sql.append("from TTrainActivity where END_DATE < trunc(sysdate)");
    // System.out.println(sql.toString());
    if (queryInfo.getRecordCount() == -1) {
        queryInfo.setRecordCount(this.getSession().createQuery(sql.toString()).list().size());
        listInfo.setCount(this.getSession().createQuery(sql.toString())
                .list().size());
    } else {
        listInfo.setCount(queryInfo.getRecordCount());
    }

    List<TTrainActivity> list = buildQuery(sql.toString(), queryInfo)
            .list();

    listInfo.setList(list);
    return listInfo;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值