在简单JDBC中(没有Hibernate) 我们可以通过仅更改占位符来进行批量选择,如此
PreparedStatement stmt = conn.prepareStatement(
"select id, name from users where id = ?");
for ( int i=0; i < 10; i++ ) {
stmt.setInt(i); // or whatever values you are trying to query by
// execute statement and get result
}
我们如何在Hibernate中完成它?
答案 0 :(得分:2)
希望这可以帮助你,
String hql = "from Users s where s.id= :userId";
for(int i=0; i< 10;i++){
List result = session.createQuery(hql)
.setParameter("userId", i)
.list();
}
答案 1 :(得分:0)
这是最常见且用户友好的方式。它使用冒号后跟参数名称(:example)来定义命名参数
String hql = "from Student s where s.registerNumner = :registerNumner";
List result = session.createQuery(hql).setParameter("registerNumner", "12345").list();
setParameter()方法非常智能,可以发现绑定变量的参数数据类型。
您可以使用setString告诉Hibernate此参数日期类型为String。
String hql = "from Student s where s.registerNumber = :registerNumber";
List result = session.createQuery(hql).setString("registerNumber", "12345").list();
此功能非常棒!您可以将对象传递给参数绑定。 Hibernate将自动检查对象的属性并与冒号参数匹配。
Student student = new Student();
Student.setRegisterNumber("12345");
String hql = "from Strudent s where s.registerNumber = :registerNumber";
List result = session.createQuery(hql).setProperties(student).list();
您也可以使用位置参数。
String hql = "from Student s where s.registerNumber = ? and s.studentName = ?";
List result = session.createQuery(hql).setString(0, "12345").setParameter(1, "Harshad").list();
但它易受破坏,因为绑定参数的位置(即索引)的每次更改都需要更改参数绑定代码
您可以使用以下方式进行批量选择
String hql = "from Users s where s.id= :userId";
List finalResult = new ArrayList();
for(int i=0; i< 10;i++){
List result = session.createQuery(hql).setParameter("userId", i).list();
finalResult.addCollection(result );
}