我正在使用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();
谢谢!
答案 0 :(得分:1)
由于“视图”将始终为0,因此我想说第一个版本更正确。它更适合目标。不用担心0是硬编码的事实:它不应该改变。
也就是说,如果将来您还需要与“视图”列作为动态参数进行交互,则可以创建另一个查询,我会将两个列都作为参数传递给该查询>
答案 1 :(得分:1)
使用参数是一种好习惯,因为它具有以下优点:
Plus更易于维护,如果您想生成更通用的 update 方法,则可以使用两个参数,因为在将来,您可能需要使用查看值不同于0(零)。
希望有帮助。