hibernate:设置固定参数是一个好的实践吗?

tktrz96b  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(268)

我正在使用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\u 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();

谢谢!

50pmv0ei

50pmv0ei1#

因为“views”总是0,所以我认为第一个版本更正确。它更符合目的。不用担心0是硬编码的:它不应该改变。
也就是说,如果将来还需要与列“views”作为动态参数进行交互,我将创建另一个查询,并将两个列作为参数传递给该查询

fcipmucu

fcipmucu2#

使用参数是一种很好的做法,因为您有以下几个优点:
您不需要担心sql注入
持久性提供程序将查询参数Map到正确的类型
持久性提供者可以进行内部优化以提供更好的性能。
plus更易于维护,如果您想生成更通用的更新方法,那么使用两个参数是有意义的,因为将来您可能需要使用不同于0(零)的视图值更新具体pic。
希望有帮助。

相关问题