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;
}