项目中遇到的 传一个IN参数问题 比如说一个SQL文中 SELECT * FROM EMP WHERE EMP.ID IN ('1','2','3');要转成JPQL 因为我们项目中是不让写定值的 所以参数要通过参数的形式传进去写点伪代码 项目的带不出来 见谅 // 本人菜鸟 家里没环境 用记事本写的 很糙 见谅
public class Test{
// 参数拼装在一起
public String parameter(List<String> list){
StringBuffer sb = new StringBuffer();
for(T t :list){
if(t == null){
sb.append(“,”);
}
sb.append(“‘”);
sb.append(“t”);
sb.append(“’”);
}
return sb.toString();
} public static void main(){
//参数传进LIST
List<String> list = new Array<String>();
list.add("1");
list.add("2");
list.add("3");
//SELECT * FROM EMP WHERE EMP.ID IN ('1','2','3');
//拼上面的SQL 太麻烦不写了
StringBuffer sb = new StringBuffer();
sb.append(“SELECT * FROM EMP WHERE EMP.ID IN (:aa)”)
Query q = em.createQuery(sb.toString());
//将参数传进去
q.setParameter("aa",parameter(list));
}
}但是这样做太麻烦 这样看还可以 但是一旦参数多了 或者参数类型成为框架不能控制的时候
还需要做参数的转换 会很麻烦
我觉得JPQL是不是也想ibatis 一样 支持多个参数同时传递啊
求助各位大侠 在线等~
public class Test{
// 参数拼装在一起
public String parameter(List<String> list){
StringBuffer sb = new StringBuffer();
for(T t :list){
if(t == null){
sb.append(“,”);
}
sb.append(“‘”);
sb.append(“t”);
sb.append(“’”);
}
return sb.toString();
} public static void main(){
//参数传进LIST
List<String> list = new Array<String>();
list.add("1");
list.add("2");
list.add("3");
//SELECT * FROM EMP WHERE EMP.ID IN ('1','2','3');
//拼上面的SQL 太麻烦不写了
StringBuffer sb = new StringBuffer();
sb.append(“SELECT * FROM EMP WHERE EMP.ID IN (:aa)”)
Query q = em.createQuery(sb.toString());
//将参数传进去
q.setParameter("aa",parameter(list));
}
}但是这样做太麻烦 这样看还可以 但是一旦参数多了 或者参数类型成为框架不能控制的时候
还需要做参数的转换 会很麻烦
我觉得JPQL是不是也想ibatis 一样 支持多个参数同时传递啊
求助各位大侠 在线等~
sb.append(“SELECT * FROM EMP WHERE EMP.ID IN (:aa)”)在hibernate中,有一个方法叫做query.setParameterList("aa", praList);
在jpql中也应该有类似的方法吧,就是为了处理你的这种问题的。
不好意思 我知道不能这样写 拼太麻烦了 简单写的 JPQL也是支持的 但是问题是IN多个参数 要用一个变量传进去
,即使使用setParameter("aa",xxx),在内部实现中,对自动根据xxx的类型判断,在内部是使用普通的setparameter还是使用setParameterList的。
比如hibernate就是这样,即在使用setParameterList的地方,也是可以使用setParameter来代替的,它根据的是传递的值的类型来作判断的。
我知道hibernate 中传多个值 可以使用setParameterList 但是JPA中没有类似的方法
我查了下资料 不太能理解queryBuilder