我从一张表之中查3个字段
查完之后这3个字段组合为一个对象
现在想查询这个对象的list,该如何做呢? public List<NormalKaoQin> getNormalKaoQinList() {
Session s = this.getSession();
List list = s.createSQLQuery("select cio1.userid,cio1.checktime,cio2.checktime " +
"from checkinout cio1,checkinout cio2 " +
"where cio1.userid = cio2.userid " +
"and cio1.checktype='I' " +
"and cio2.checktype='O' " +
"and year(cio1.checktime) = year(cio2.checktime) " +
"and month(cio1.checktime) = month(cio2.checktime) " +
"and day(cio1.checktime) = day(cio2.checktime);").addEntity(NormalKaoQin.class).list();
return list;
}
查完之后这3个字段组合为一个对象
现在想查询这个对象的list,该如何做呢? public List<NormalKaoQin> getNormalKaoQinList() {
Session s = this.getSession();
List list = s.createSQLQuery("select cio1.userid,cio1.checktime,cio2.checktime " +
"from checkinout cio1,checkinout cio2 " +
"where cio1.userid = cio2.userid " +
"and cio1.checktype='I' " +
"and cio2.checktype='O' " +
"and year(cio1.checktime) = year(cio2.checktime) " +
"and month(cio1.checktime) = month(cio2.checktime) " +
"and day(cio1.checktime) = day(cio2.checktime);").addEntity(NormalKaoQin.class).list();
return list;
}
cio1.userid,
cio1.checktime,
cio2.checktime
这3个字段组合后查list 能把效果和例子说明下吗?
其中的checktime为签到时间,签退时间
用一个checktype的状态属性来标识,I为签到,O为签退。我查询完之后,需要给客户展示的是:
员工 当天签到时间 当天签退时间但是我用hibernate查完之后,新建了一个entity,里面就这3个属性,想产生关联。不知道该如何做
private CheckinoutPK pk;
private String checktype;
private Integer verifycode;
private String sensorid; public String getChecktype() {
return checktype;
} public void setChecktype(String checktype) {
this.checktype = checktype;
} public Integer getVerifycode() {
return verifycode;
} public void setVerifycode(Integer verifycode) {
this.verifycode = verifycode;
} public String getSensorid() {
return sensorid;
} public void setSensorid(String sensorid) {
this.sensorid = sensorid;
} public CheckinoutPK getPk() {
return pk;
} public void setPk(CheckinoutPK pk) {
this.pk = pk;
}
}
查询完后需要的entity:package com.zndt.znfw.entity;import java.util.Date;public class NormalKaoQin {
private Integer id;
private Date comeTime;
private Date backTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getComeTime() {
return comeTime;
}
public void setComeTime(Date comeTime) {
this.comeTime = comeTime;
}
public Date getBackTime() {
return backTime;
}
public void setBackTime(Date backTime) {
this.backTime = backTime;
}
}
要查看里面的元素、得转换成Object[]!
for(int i = 0 ; i < list.size(); i ++){
/*
* 数组元素顺序跟sql中字段的顺序一致、从0开始
*/
Object[] objarr = (Object[])list.get(i);
System.out.println(objarr[0]); //cio1.userid
System.out.println(objarr[1]); //cio1.checktime
System.out.println(objarr[2]); //cio2.checktime
}
junit测试下,打印结果咋是这样的呢?
//output:
1
2012-11-12 09:08:22.0
2012-11-12 09:08:22.0
给两个checktime字段分别加上不同的别名试试
cio2.checktime
前面的cio1跟cio2不区分的、显示的时候取的是checktime
你看看你在数据查询显示出来的字段名字就知道了!
而程序在获取字段信息的时候、也是根据key值这样映射的!
rs.getString("checktime")它总是按照顺序找相近的字段然后按照rs给的行号信息给值返回给你!只有像 count、max、age使用这样的函数他的字段名称才是全名、如 count(name)如果你不给一个别名、那么程序也得rs.getInt("count(name)")这样!只是这些get取值部分Hibernate封装了!