//传入一个list变量,但是这个list是不确定的,动态的,但是这个list又要作为一个条件
//这是一个简单示例。只是针对对于?复制的情况
public List<?> findByPkids(List<String> pkids) {
List<Object> params = new ArrayList<Object>();
StringBuffer sb = new StringBuffer();
sb.append("from Test where 1 = 1 ");
if (pkids != null && pkids.size() > 0) {
sb.append("and bt.pkid in( ");
for (int i = 0; i < pkids.size(); i++) {
if (i==0) {
sb.append(" ? ");
params.add(pkids.get(i));
}else {
sb.append(" , ? ");
params.add(pkids.get(i));
}
}
sb.append(") ");
}
Session session = HibernateUtil.getSession();
SQLQuery query = session.createSQLQuery(sql.toString());
for (int i = 0; i < params.size(); i++) {
query.setParameter(i, params.get(i));
}
List<Map<String, Object>> reList = new ArrayList<Map<String, Object>>();
List<Object[]> list = query.list();
return reList;
}
对于HQL的另外一种就是给变量起别名的赋值方式:
public List<?> findByPkids(List<String> pkids) {
List<Object> params = new ArrayList<Object>();
StringBuffer sb = new StringBuffer();
sb.append("from Test where 1 = 1 ");
if (pkids != null && pkids.size() > 0) {
sb.append("and bt.pkid in( ");
for (int i = 0; i < pkids.size(); i++) {
if (i==0) {
sb.append(" pkid"+i+" ");
params.add(pkids.get(i));
}else {
sb.append(" , pkid"+i+" ");
params.add(pkids.get(i));
}
}
sb.append(") ");
}
Session session = HibernateUtil.getSession();
SQLQuery query = session.createSQLQuery(sql.toString());
for (int i = 0; i < params.size(); i++) {
query.setParameter("pkid"+i, params.get(i));
}
List<Map<String, Object>> reList = new ArrayList<Map<String, Object>>();
List<Object[]> list = query.list();
return reList;
}
对SQL类似。请自行变通。