Hibernate:设置固定参数是一种好习惯吗?

时间:2018-12-30 22:27:49

标签: java mysql hibernate mariadb

我正在使用Java + Hibernate + MariaDB,并且对良好做法有疑问。

如果要执行此查询:

UPDATE Pics SET views = 0 WHERE id=:id_pic;

我在Java代码中使用了它:

Transaction tx = session.getTransaction();
try {           
    tx.begin();

    NativeQuery query = session.createNativeQuery("UPDATE Pics SET views = 0 WHERE id=:id_pic");
    query.setParameter("id_pic", id_pic);
    result = query.executeUpdate();

    tx.commit();
}
// Exceptions stuff...

如您所见,我使用id_pic参数来避免安全问题。我的问题是,如果我在使用固定变量时应该使用参数,例如查询中出现的0(它始终必须为0,这是一种重置方法)。我的意思是,我必须使用以下查询还是上面的查询?

NativeQuery query = session.createNativeQuery("UPDATE Pics SET views=:views WHERE id=:id_pic");
query.setParameter("id_pic", id_pic);
query.setParameter("views", String.valueOf(0));
result = query.executeUpdate();

谢谢!

2 个答案:

答案 0 :(得分:1)

由于“视图”将始终为0,因此我想说第一个版本更正确。它更适合目标。不用担心0是硬编码的事实:它不应该改变。

也就是说,如果将来您还需要与“视图”列作为动态参数进行交互,则可以创建另一个查询,我会将两个列都作为参数传递给该查询

答案 1 :(得分:1)

使用参数是一种好习惯,因为它具有以下优点:

  • 您无需担心SQL注入
  • 持久性提供程序将您的查询参数映射到正确的类型
  • 持久性提供程序可以进行内部优化以提供更好的性能。

Plus更易于维护,如果您想生成更通用的 update 方法,则可以使用两个参数,因为在将来,您可能需要使用查看值不同于0(零)。

希望有帮助。