我在使用mongo和spring时遇到了这个问题。所以让我们假设我们使用MongoRepository来提供基本的crud操作,假设我们需要使用mongoTemplate实现一些自定义的条件查询操作。为了实现一个接口来注入用于crud和自定义的repository,我们需要指定:
自定义接口:
public interface UserCustomRepository {
List<User> findAllUsersBySomeCriteria(UserCriteriaRequest criteriaRequest);
}
UserRepository接口'必须'先继承UserCustomRepository,然后再继承MongoRepository
@Repository
public interface UserRepository extends UserCustomRepository, MongoRepository<User, ObjectId> {
}
UserRepositoryImpl 必须与带有 *Impl 后缀的 crud 接口名称相同。
@Component
@NoArgsConstructor
@AllArgsConstructor(onConstructor = @__(@Autowired))
public class UserRepositoryImpl implements UserCustomRepository {
private MongoTemplate mongoTemplate;
@Override
public List<User> findAllUsersBySomeCriteria(UserCriteriaRequest criteriaRequest){
}
}
让我们实现一些服务 - 在这里我们只注入UserRepository接口,并使用crud存储库和自定义类实现的方法。
@Service
@NoArgsConstructor
@AllArgsConstructor(onConstructor = @__(@Autowired))
public class UserService {
private UserRepository userReposityry;
public List<User> getUserByCriteria(UserCriteriaRequest request) {
userRepository.findById(request.getUserId);
userRepository.findAllUsersBySomeCriteria(request);
}
}