java - Named Query or Native Query or Query 从性能角度看哪个更好?

标签 java ejb-3.0

以下哪一个更好(EJB 3 JPA)

//查询

一个)。 getEntityManager().createQuery("select o from User o");

//命名查询,其中 findAllUser 定义在实体级别

b). getEntityManager().createNamedQuery("User.findAllUser");**

//原生查询

c). getEntityManager().createNativeQuery("SELECT * FROM TBLMUSER ");

请解释一下哪种方法在哪种情况下更好?

最佳答案

  1. 创建查询()

    它应该用于动态查询创建。

    //Example dynamic query
    StringBuilder builder = new StringBuilder("select e from Employee e");
    if (empName != null) {
        builder.append(" where e.name = ?");
    }
    getEntityManager().createQuery(builder.toString());
    
  2. 创建命名查询()

    它就像一个常量变量,可以通过名称重复使用。你应该在常见的数据库调用中使用它,例如“查找所有用户”、“按 id 查找”等。

  3. createNativeQuery()

    这将创建一个完全依赖于底层数据库的 SQL 脚本语言支持的查询。当需要复杂的查询并且 JPQL 语法不支持时,它很有用。

    但是,如果底层数据库从一个更改为另一个,它可能会影响您的应用程序并需要做更多的工作。一个例子是,如果您的开发环境是 MySQL,而您的生产环境是使用 Oracle。此外,如果有多个结果,则返回的结果绑定(bind)可能会很复杂。

关于java - Named Query or Native Query or Query 从性能角度看哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25180597/

相关文章:

java - 方面j : deploying aspects in an existing web application

java - 不再使用 EJB 3.0 的首要原因是什么?

java - Spring Rest Data 如何更改默认格式从 json 响应中删除 "_"下划线

java - 线程结果显示在文本区域中

java - 如何将文件加载到 session bean 中

java - 如何从 SFSB 的 SessionContext 获取业务对象

java - 如何保护 GlassFish 2 上的 Web 服务?

java - 通过 jdbc 通过准备好的语句传递 SQL 命令时出错

java - While循环将循环遍历数组java中的条目

java - Android:选择微调项时如何提示其他详细信息