当前位置: 首页 > 知识库问答 >
问题:

JpaRepository实现-列表与集

仲阳朔
2023-03-14

我正在使用JPA构建我的第一个Spring Boot应用程序,并像这样设置了我的数据存储库和服务:

@Repository
public interface FooRepository extends JpaRepository<Foo, Long> {
    Set<Foo> findAllByActiveInstallationIsNull();
}

然后是粗制滥造的服务

public interface CrudService<T extends BaseEntity> {
    Set<T> findAll();

    T findById(Long id);

    T save(T object);

    void delete(T object);

    void deleteById(Long id);
}
public interface FooService extends CrudService<Foo> {
    Set<Foo> findAllAvailable();
    Foo getIfAvailable(Long id);
}

服务实现的抽象类

public abstract class AbstractJpaService<T extends BaseEntity, R extends JpaRepository<T, Long>> implements CrudService<T> {
    protected R repository;

    public AbstractJpaService(R repository) {
        this.repository = repository; }

    @Override
    public Set<T> findAll() {
        return new HashSet<>(repository.findAll()); }

    @Override
    public T findById(Long id) {
        return repository.findById(id).orElse(null); }

    @Override
    public T save(T object) {
        return repository.save(object); }

    @Override
    public void delete(T object) {
        repository.delete(object); }

    @Override
    public void deleteById(Long id) {
        repository.deleteById(id); }
}

最后,一个扩展上述服务类的实际服务类示例:

@Service
@Transactional
public class FooJpaService extends AbstractJpaService<Foo, FooRepository> implements FooService {
    public FooJpaService(FooRepository repository) {
        super(repository);
    }
 ///
}

我写了一些服务层逻辑和控制器,一旦我对第一次迭代感到满意,我就做了一些邮递员测试,这些测试工作顺利。

    @Test
    void findAll() {
        Set<Foo> returnFooSet = new HashSet<>();
        returnFooSet.add(new Foo(boo, 1d, 2d));
        returnFooSet.add(new Foo(baz, 3d, 4d));
        when(fooRepository.findAll()).thenReturn(returnFooSet);
        Set<Foo> foos = service.findAll();

        assertNotNull(foos);
        assertEquals(2, foos.size());
    }

共有1个答案

督德明
2023-03-14

我认为,在JPA世界中,关于listset的唯一经验法则是,在@manytomany关系中始终使用set,而决不使用list。除此之外,我什么也不知道。不过,我可以猜测,也许set在性能方面更好,因为它是无序的,而list是有序的。如果JParepository有一个返回List方法,那么最终更好的性能可能还不够相关。

 类似资料:
  • 问题内容: 我的春季启动应用程序中有一个存储库类。首先,我用添加了注释,然后实现了。现在我摆脱了注释,它仍然有效。 我看到有注释。 这是如何运作的?还是这不行,我的应用程序中发生了一些奇怪的事情? 问题答案: 确实没有必要将注释放在扩展的接口上;Spring通过扩展预定义接口之一来识别存储库。 注释的目的是防止Spring本身将该特定接口视为存储库。该接口具有此批注,因为它本身不是存储库,它是由您

  • 我有两个表user和userprofiles。 使用者 和用户配置文件 这两个实体是一对一的关系。 和用户描述实体 正如您所看到的,只有在UserProlie表中有一个datecreated信息。我想做的是,按datecreated获取所有User降序。 所以,在我的控制器里。 因为我的DAO接口扩展了JpaRepository类。我试过这样。。 但它失败了。。我只想获取按datecreated排

  • 我只是在Spring数据中偶然发现了一些意想不到的行为。为了演示我设置了一些Spring Boot应用程序,其中添加了JPA、Web、H2https://start.spring.io/。 该应用程序包含两个表和一些数据: data.sql: 这个表结构只有一个模型,因为两个表的结构都是一样的。我为这个表创建了一个JpaRepository 示例DAO: 最后我添加了一个控制器(TestContr

  • 为了实现有序列表,我们必须记住项的相对位置是基于一些潜在的特性。上面给出的整数的有序列表17,26,31,54,77 和 93 可以由 Figure 15 所示的链接结构表示。节点和链接结构表示项的相对位置。 Figure 15 为了实现 OrderedList 类,我们将使用与前面看到的无序列表相同的技术。再次,head 的引用为 None 表示为空链表(参见 Listing 8)。 class

  • 本文向大家介绍JavaScript实现下拉列表,包括了JavaScript实现下拉列表的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了JavaScript实现下拉列表的具体代码,供大家参考,具体内容如下 这一次写了一个比较简单的下拉列表的实现,点击出现列表内容,再次点击列表消失,研究了很久,发现这种js写法确实比较好用。先看一下效果。 直接上代码,js是主要写的部分,css是随意调试

  • 为了实现无序列表,我们将构造通常所知的链表。回想一下,我们需要确保我们可以保持项的相对定位。然而,没有要求我们维持在连续存储器中的定位。例如,考虑 Figure 1 中所示的项的集合。看来这些值已被随机放置。如果我们可以在每个项中保持一些明确的信息,即下一个项的位置(参见 Figure 2),则每个项的相对位置可以通过简单地从一个项到下一个项的链接来表示。 Figure 1 Figure 2 要注