Cassandra Java驱动程序@Select注解是否使用预处理语句?

w9apscun  于 2023-01-25  发布在  Cassandra
关注(0)|答案(1)|浏览(133)

Cassandra DataStax的@Select注解是否在生成的查询中使用了PreparedStatement?它是否像我使用PreparedStatement并手动执行一样有效?

5cnsuln7

5cnsuln71#

是的,Map器也准备语句。如果你观察Map器生成的日志,你可以看到它为我们准备语句。例如,当你configure logging时,你会注意到如下构造Map器代码时的情况:

DEBUG ProductDaoImpl__MapperGenerated - [s0] Initializing new instance for keyspace = ks_0 and table = null
DEBUG ProductHelper__MapperGenerated - [s0] Entity Product will be mapped to ks_0.product
DEBUG ProductDaoImpl__MapperGenerated - [s0] Preparing query
      `SELECT id,description,dimensions FROM ks_0.product WHERE id=:id`
      for method findById(java.util.UUID)

可选/附加:正如本文DataStax Java Driver文档中所建议的那样,您可以并且一定要在使用QueryBuilder时利用PreparedStatement,以便为经常使用的查询使用绑定语句。您仍然可以使用查询构建器并准备结果:

// During application initialization:
  Select selectUser = selectFrom("user").all().whereColumn("id").isEqualTo(bindMarker());
  // SELECT * FROM user WHERE id=?
  PreparedStatement preparedSelectUser = session.prepare(selectUser.build());

  // At runtime:
  session.execute(preparedSelectUser.bind(userId));

相关问题