以下哪一个更好(EJB 3 JPA)
//查询
一个)。 getEntityManager().createQuery("select o from User o");
//命名查询,其中 findAllUser 定义在实体级别
b). getEntityManager().createNamedQuery("User.findAllUser");**
//原生查询
c). getEntityManager().createNativeQuery("SELECT * FROM TBLMUSER ");
请解释一下哪种方法在哪种情况下更好?
最佳答案
创建查询()
它应该用于动态查询创建。
//Example dynamic query StringBuilder builder = new StringBuilder("select e from Employee e"); if (empName != null) { builder.append(" where e.name = ?"); } getEntityManager().createQuery(builder.toString());
创建命名查询()
它就像一个常量变量,可以通过名称重复使用。你应该在常见的数据库调用中使用它,例如“查找所有用户”、“按 id 查找”等。
createNativeQuery()
这将创建一个完全依赖于底层数据库的 SQL 脚本语言支持的查询。当需要复杂的查询并且 JPQL 语法不支持时,它很有用。
但是,如果底层数据库从一个更改为另一个,它可能会影响您的应用程序并需要做更多的工作。一个例子是,如果您的开发环境是 MySQL,而您的生产环境是使用 Oracle。此外,如果有多个结果,则返回的结果绑定(bind)可能会很复杂。
关于java - Named Query or Native Query or Query 从性能角度看哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25180597/