Hibernate分页的小bug

前两天写了一个很简单的分页查询,但是遇到了点问题,用代码一查询,查出来的transfer_type和state都只显示第一个字符,应该是‘02’但是只显示‘0’,用代码二九没有这个问题。我现在也不知道是为什么。只是把代码贴出来,以记录一下sql和hql的组合方式。
[size=medium]代码一:[/size]
StringBuilder sql = new StringBuilder("select sdt.domain_name,sdt.agent_code,sdt.transfer_date,sdt.transfer_type,sdt.state from  service_domaintransfer sdt where 1=1 ");
if(null != domainTransferSearchVO) {
String domainName = domainTransferSearchVO.getDomainName();
String startDate1 = domainTransferSearchVO.getStartDate1();
String startDate2 = domainTransferSearchVO.getStartDate2();
String agentCode = domainTransferSearchVO.getAgentCode();
String state = domainTransferSearchVO.getState();
String transferType = domainTransferSearchVO.getTransferType();
String ec_s_transferDate = domainTransferSearchVO.getEc_s_transferDate();
if(StringUtil.notEmpty(domainName)) {
sql.append(" and sdt.domain_name like '%").append(domainName).append("%' ");
}
if(StringUtil.notEmpty(startDate1)) {
sql.append( " and ('").append(startDate1).append("' <= ");
sql.append("to_char(sdt.transfer_date,'YYYY-MM-DD'))");
}
if(StringUtil.notEmpty(startDate2)) {
sql.append(" and (to_char(sdt.transfer_date,'YYYY-MM-DD') <= ");
sql.append("'").append(startDate2).append("') ");
}
if(StringUtil.notEmpty(agentCode)) {
sql.append(" and sdt.agent_code = '").append(agentCode).append("' ");
}
if(StringUtil.notEmpty(state)) {
sql.append(" and sdt.state = '").append(state).append("' ");
}
if(StringUtil.notEmpty(transferType)) {
sql.append(" and sdt.transfer_type = '").append(transferType).append("'");
}

if(StringUtil.notEmpty(ec_s_transferDate)) {
if("asc".equals(ec_s_transferDate)) {
sql.append(" order by sdt.transfer_date asc");
}
else {
sql.append(" order by sdt.transfer_date desc");
}
}

}
log.debug("getDomainTransfer sql: " + sql);
Page page = this.getDomainTransferDao().pageQuerySQL(sql.toString(), domainTransferSearchVO.getEc_p(), domainTransferSearchVO.getEc_crd());
log.debug("pageSize:" + page.getPageSize() + " page.getTotalCount: " + page.getTotalCount() + " page.getTotalPageCount():" + page.getTotalPageCount());
List list = page.getResult();
List<DomainTransferVO> listVO = new ArrayList<DomainTransferVO>();
if(null != list && list.size() > 0) {
for(int i = 0; i < list.size();i++) {
Object[] obj = (Object[]) list.get(i);
DomainTransferVO vo = new DomainTransferVO();
vo.setDomainName(String.valueOf(obj[0]));
vo.setAgentCode(String.valueOf(obj[1]));
vo.setTransferDate(DateUtil.getTimestamp(String.valueOf(obj[2])));
vo.setTransferType(String.valueOf(obj[3]));
vo.setState(String.valueOf(obj[4]));
listVO.add(vo);
}
}
page.setResult(listVO);

[size=medium]代码二:[/size]
 StringBuffer hql = new StringBuffer();
List params = new ArrayList();
hql.append("select p.domainName,p.agentCode,p.transferDate,p.state,p.transferType from DomainTransfer p where 1=1 ");
if(null != domainTransferSearchVO) {
String domainName = domainTransferSearchVO.getDomainName();
String startDate1 = domainTransferSearchVO.getStartDate1();
String startDate2 = domainTransferSearchVO.getStartDate2();
String agentCode = domainTransferSearchVO.getAgentCode();
String state = domainTransferSearchVO.getState();
String transferType = domainTransferSearchVO.getTransferType();
String ec_s_transferDate = domainTransferSearchVO.getEc_s_transferDate();
if(StringUtil.notEmpty(domainName) && !StringUtil.notEmpty(domainName)) {
domainName = StringUtil.getSQLString(domainName.trim(), false);
hql.append(" and p.domainName like ? ");
params.add((new StringBuilder("%"))
.append(domainName.toLowerCase()).append("%").toString());
}
if(StringUtil.notEmpty(startDate1)) {
startDate1 = StringUtil.getSQLString(startDate1.trim(), false);
hql.append(" and p.transferDate >= ? ");
params.add(Timestamp.valueOf(startDate1 + " 00:00:00.0"));
}
if(StringUtil.notEmpty(startDate2)) {
startDate2 = StringUtil.getSQLString(startDate2.trim(), false);
hql.append(" and p.transferDate <= ? ");
params.add(Timestamp.valueOf(startDate2 + " 23:59:59.0"));
}
if(StringUtil.notEmpty(agentCode)) {
agentCode = StringUtil.getSQLString(agentCode.trim(), false);
hql.append(" and p.agentCode = ? ");
params.add(agentCode);
}
if(StringUtil.notEmpty(state)) {
state = StringUtil.getSQLString(state.trim(), false);
hql.append(" and p.state = ? ");
params.add(state);
}
if(StringUtil.notEmpty(transferType)) {
transferType = StringUtil.getSQLString(transferType.trim(), false);
hql.append(" and p.transferType = ? ");
params.add(transferType);
}

if(StringUtil.notEmpty(ec_s_transferDate)) {
if("asc".equals(ec_s_transferDate)) {
hql.append(" order by p.transferDate asc");
}
else {
hql.append(" order by p.transferDate desc");
}
}

}
log.debug("getDomainTransfer hql: " + hql);
Page page = this.getDomainTransferDao().pagedQuery(hql.toString(), domainTransferSearchVO.getEc_p(), domainTransferSearchVO.getEc_crd(),params.toArray());
log.debug("pageSize:" + page.getPageSize() + " page.getTotalCount: " + page.getTotalCount() + " page.getTotalPageCount():" + page.getTotalPageCount());
List list = page.getResult();
List<DomainTransferVO> listVO = new ArrayList<DomainTransferVO>();
if(null != list && list.size() > 0) {
for(int i = 0; i < list.size();i++) {
Object[] obj = (Object[]) list.get(i);
DomainTransferVO vo = new DomainTransferVO();
vo.setDomainName(String.valueOf(obj[0]));
vo.setAgentCode(String.valueOf(obj[1]));
vo.setTransferDate(DateUtil.getTimestamp(String.valueOf(obj[2])));
vo.setState(String.valueOf(obj[3]));
vo.setTransferType(String.valueOf(obj[4]));
listVO.add(vo);
}
}
page.setResult(listVO);


说明:1.返回结果都是List<Object[]>
2.第一种方式,可以重写一下mappingRow,例子如下:

@Override
public Object mappingRow(ResultSet resultset, int i, Object obj) throws SQLException {

VZZJZVO vHostVO = new VZZJZVO();
vHostVO.setProductCode(resultset.getString("PRODUCT_CODE"));
vHostVO.setServiceCode(resultset.getString("SERVICE_CODE"));
vHostVO.setGoodsName(resultset.getString("GOODS_NAME"));
vHostVO.setGoodsCode(resultset.getString("GOODS_CODE"));
vHostVO.setDomainName(resultset.getString("DOMAIN_NAME"));
vHostVO.setServiceStartDate(resultset.getTimestamp("SERVICE_START_DATE"));
vHostVO.setServiceEndDate(resultset.getTimestamp("SERVICE_END_DATE"));
vHostVO.setSubProductCount(resultset.getString("SUB_NUM"));
vHostVO.setServiceState(resultset.getString("SERVICE_STATE"));
vHostVO.setTasteType(resultset.getString("TASTE_TYPE"));
vHostVO.setReturnsType(resultset.getString("RETURNS_TYPE"));
vHostVO.setGoodsType(resultset.getString("GOODS_TYPE"));
vHostVO.setManualClose(resultset.getString("MANUAL_CLOSE"));

// 设置是否退费期:单品+允许退费+服务开始时间在7天以内
Timestamp curDate = new Timestamp(System.currentTimeMillis());
if (vHostVO.getGoodsType().equals(AdminConstants.GOODS_TYPE_SINGLE)
&& !AgentConstants.RETURNS_TYPE_DENYE.equals(vHostVO.getReturnsType())
&& DateUtil.getIntervalDays(curDate, resultset.getTimestamp("service_start_date")) < AgentConstants.PERIOD_REFUND) {
vHostVO.setPeriodRefund(true);
} else {
vHostVO.setPeriodRefund(false);
}
return vHostVO;
}

/*
* (non-Javadoc)
* @see com.sitechasia.xinnet.agent.serv.dao.IVirtualHostManageJdbcDao#findVHostProductList(java.lang.String,
* java.lang.Object, int, int)
*/
public Page findVHostProductList(String sql, Object parameter, int pageNo, int pageSize) {
return this.pagedQueryObject(sql, parameter, pageNo, pageSize);
}


调用:

Object parameter = null;
System.out.println("=======tangwenchao-----------------" + sql);
Page page =this.getVzzjzManageJdbcDao().findVHostProductList(
sql.toString(), parameter, pageNo, pageSize);

List<VZZJZVO> list = page.getResult();

这种返回List<VZZJZVO>(就是mappingRow的对象的集合)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值