通过仅更改占位符来在休眠中批量获取

时间:2013-10-21 06:53:36

标签: java performance hibernate

在简单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中完成它?

2 个答案:

答案 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)来定义命名参数

示例1:使用setParameter()方法

String hql = "from Student s where s.registerNumner = :registerNumner";
List result = session.createQuery(hql).setParameter("registerNumner", "12345").list();

setParameter()方法非常智能,可以发现绑定变量的参数数据类型。

示例2:使用setString()方法

您可以使用setString告诉Hibernate此参数日期类型为String。

String hql = "from Student s where s.registerNumber = :registerNumber";
List result = session.createQuery(hql).setString("registerNumber", "12345").list();

示例3:使用setProperties()方法

此功能非常棒!您可以将对象传递给参数绑定。 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();

示例4:

您也可以使用位置参数。

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 );
}