命名查询或本机查询或查询哪一个在性能上更好?

Jek*_*iya 14 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");

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

Wun*_*orn 23

  1. 的createQuery()

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

    //Example dynamic query
    StringBuilder builder = new StringBuilder("select e from Employee e");
    if (empName != null) {
        builder.append(" where e.name = ?");
    }
    getEntityManager().createQuery(builder.toString());
    
    Run Code Online (Sandbox Code Playgroud)
  2. createNamedQuery()

    它就像常量变量和可重用,你应该在常见的db调用中使用它; 查找所有用户,按ID查找等

  3. createNativeQuery()

    它完全取决于底层数据库支持的sql脚本.

    当需要复杂查询并且不支持JPQL语法时,它很有用.

    但如果底层数据库从一个数据库更改为另一个数据库,它可能会影响您的应用程序并需要更多工作.例如,如果您的开发环境使用MySQL,并且您的生产环境使用的是Oracle.+如果超过单个结果,返回的结果绑定可能很复杂.