Manager中部分代码如下:
@Transactional(readOnly = true)
public Page<Org> findPage(Page<Org> page,String oname,String createtime) {
StringBuffer hql=new StringBuffer();
hql.append("select x from Org x,User u where x.adminId=u.id and x.isDel=0");
Map<String,Object> map=new HashMap<String,Object>();
map.put("isDel", 0);
//写法一:
if(StringUtils.isNotBlank(oname)){
hql.append(" and x.oname like :oname");
map.put("oname", "%"+oname+"%");
}
//写法二:
if(StringUtils.isNotBlank(createtime)){
hql.append(" and x.createtime like '%"+createtime+"%'");
}
return orgDao.findPage(page,hql.toString(),map);
其中“createtime” 传进来的是时间,这个就不能像写法一那样 put到map里。
if(StringUtils.isNotBlank(createtime)){
if(StringUtils.isNotBlank(endtime)){
hql.append(" and x.createtime >='"+createtime+"' and x.createtime <='"+endtime+"'");
// hql.append(" and x.createtime >=:createtime and x.createtime <=:endtime");
// pros.put("createtime", createtime);
// pros.put("endtime", endtime);
}else{
hql.append(" and x.createtime >='"+createtime+"'");
// hql.append(" and x.createtime >=:createtime");
// pros.put("createtime", createtime);
}
}
还有这种写查询起始时间的。使用拼接的方式 可以,但put到map中就会报错。程序现在别人在用,暂时不能提供报错信息。
不过记得有提示过String 转Data类型出错。
那这个是在HQL里转数据类型还是在PUT的时候转呢?应该怎么写呢?
求大神给个示例,谢谢。
------解决思路----------------------
为什么不能Put呢? 用占位符啊
而且你这样拼接参数,不用担心sql注入么?
------解决思路----------------------
java.lang.String cannot be cast to java.util.Date
你做日期比较,当你数据库表的字段为日期类型,你传入字符串去比较肯定不对
String createtime 这个createtime 进行转一下,转成日期类型去做操作
或者 在sql里面加上日期函数去操作