【问题标题】:interface (mock) repository pattern java spring接口(模拟)存储库模式 java spring
【发布时间】:2021-05-26 22:03:35
【问题描述】:

我是 Java 和 Spring 环境的初学者。目前我必须实现一个 CustomerRepository。 CustomerRepository 实现了 CrudRepository 接口。目的是在存储库中,应该存储和检索客户对象。 我必须使用 Spring 类 CrudRepository 的 Mock 实现。

类图如下所示: classdiagram

CrudRepository 接口:

public interface CrudRepository<Customer, String> {

<S extends Customer> S save( S entity );
...
}

完整的 CustomerRepository 类:

public class CustomerRepository implements CrudRepository<Customer, String> {
 
private CrudRepository crudrepository;

/*long count();*/
@Override
public long count() {
    long count = crudrepository.count();
    return count;
}

/*<S extends Customer> S save( S entity );*/
@Override
public <S extends Customer> S save(S entity) {
    crudrepository.save(entity);
    return entity;
}

/*<S extends Customer> Iterable<S> saveAll( Iterable<S> entities );*/
@Override
public <S extends Customer> Iterable<S> saveAll(Iterable<S> entities) {
    Iterable<S> response = crudrepository.saveAll(entities);
    return (Iterable<S>) response;
}

/*Optional<Customer> findById(String id );*/
@Override
public Optional<Customer> findById(String id) {
    Optional<Customer> customerResponse = crudrepository.findById(id);
    return customerResponse;

}

/*Iterable<Customer> findAllById(Iterable<String> ids );*/
@Override
public Iterable<Customer> findAllById(Iterable<String> ids) {
    Iterable<Customer> customerResponse = crudrepository.findAllById(ids);
    return customerResponse;
}

/*Iterable<Customer> findAll();*/
@Override
public Iterable<Customer> findAll() {
    Iterable<Customer> customerResponse = (Iterable<Customer>) crudrepository
            .findAll();
    return customerResponse;
}

/*boolean existsById(String id );*/
@Override
public boolean existsById(String id) {
    return crudrepository.existsById(id);
}

/*void deleteById(String id );*/
@Override
public void deleteById(String id) {
    crudrepository.deleteById(id);

}

/*void delete(Customer entity );*/
@Override
public void delete(Customer entity) {
    crudrepository.delete(entity);

}

/*void deleteAllById(Iterable<? extends String> ids );*/
@Override
public void deleteAllById(Iterable<? extends String> entities) {
    crudrepository.deleteAll(entities);

}

/*void deleteAll();*/
@Override
public void deleteAll() {
    crudrepository.deleteAll();
}

/*void deleteAll(Iterable<? extends Customer> entities );*/
@Override
public void deleteAll(Iterable<? extends Customer> entities) {
    crudrepository.deleteAll(entities);
    
} }

你觉得怎么样?有什么建议吗?

【问题讨论】:

    标签: java spring mocking repository-pattern class-diagram


    【解决方案1】:

    我认为你误解了一些概念。

    CrudRepository 是一个 Spring 对象,它是一个不需要实现的接口。你必须扩展它,而 Spring 为你提供了所有的魔法。

    您可以通过以下方式实现您的目标:

    存储库

    import org.springframework.data.repository.CrudRepository;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface CustomerRepository extends CrudRepository<Customer, String> {
    
    }
    

    服务

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class CustomerService {
        
        @Autowired
        private CustomerRepository customerRepository;
    
        public Customer save(Customer customer) {
            Customer response = customerRepository.save(customer);
            return response;
        }
    }
    

    【讨论】:

    • nachi,非常感谢!一般可以用 Iterable 实现接口吗?
    • 我不明白Iterable 的用途,但也许这可以帮助你:stackoverflow.com/questions/11880924/…。是的,总的来说我认为这是可能的。
    • WTF 你一直在改变问题哈哈??‍♂️
    • 但是……这对我来说看起来很奇怪。为什么需要模拟?用于单元测试?我不明白你的意思,我认为你应该以更好的方式解释你的场景/问题。
    猜你喜欢
    • 2017-07-16
    • 2017-09-12
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多