spring-data-jpa 如何在Spring Data JPA中创建自定义方法

juzqafwq  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(156)

目前,我正在学习Spring Data JPA,我发现我需要创建一个自定义接口来创建一个自定义方法。我想知道是否有人能解释为什么会这样。假设我有一个带有字段的实体UseruserIdname。另外,我还有UserRepository

public interface UserRepository extends JpaRepository<User, Long> {...}

我发现我需要创建一个新的接口-UserRepositoryCustom,在那里我应该创建自定义的抽象方法。另外,在那之后,我发现我需要创建一个类UserRepositoryImpl,它实现了UserRepositoryCustom。让我们看看我所做的代码:

@Repository
public class UserRepositoryImpl implements UserRepositoryCustom{

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public List<User> findUserByName(String name) {
        Query query = entityManager.createNativeQuery("SELECT em.* FROM User em " +
                "WHERE em.name = ?1", User.class);
        query.setParameter(1, name);
        return query.getResultList();
    }
}

你能解释一下为什么我需要UserRepositoryCustomUserRepositoryImpl在前台,为什么我需要EntityManager@PersistenceContext在上面吗?每一条信息对我来说都很重要,因为这样我就能提取出对我来说最重要的东西,那就是理解。
我在网上找到了这段代码,它运行得很好,但我需要理解它。

zc0qhyus

zc0qhyus1#

您不需要*****来完成这个操作。直接等价的方法是UserRepository接口中的一个方法,定义为List<User> findByName(String name)。您也可以使用JPA命名查询、@Query注解等。
附加接口和实现类的使用旨在用于高级用例,这些用例在Spring Data JPA基于方法名称、注解等为您生成的查询中(不容易)实现。它不适用于简单的用例,如您显示的查询。
我强烈建议您阅读完整的Spring Data JPA documentation。您会注意到您问题中的解决方案只是文档的一小部分,它清楚地表明这是一个逃生通道,而不是使用Spring Data JPA的主要方式。

相关问题