其中 class 实现了 CrudRepository

Which class has the implementation of CrudRepository

我正在使用 Spring Data JPA 来创建和查询我的表。

这是我的 UserService class,

@Service
public class UserService {
    
    @Autowired
    UserRepository userRepository;
    
    public User saveUser(User u) {
        User savedUser = userRepository.save(u); //<----- line that I debug
        return savedUser;
    }
    
    public boolean usernameExists(String username) {
        List<User> users = userRepository.findByUsername(username); //<----- line that I debug
        return !users.isEmpty();
    }
}

这是 UserRepository class

public interface UserRepository extends CrudRepository<User, Integer> {

    public List<User> findByUsername(String username);    
}

我正在调试我的代码,当到达上面的“linesToDebug”时,我在我的 IDE 中执行了一个 Step-Into,希望我会被带到save()findByUsername() 方法的实现,但没有任何反应,用户被保存到存储库,我的 IDE (Netbeans 8.0) 执行不导航到这些方法的实现。

哪些class实现了这些方法?

编辑: 这是我在 save() 方法的控制台中得到的:

2021-06-06 16:24:36.779 DEBUG 6948 --- [nio-8181-exec-5] org.hibernate.SQL                        : insert into user (date_created, password, username) values (?, ?, ?)
2021-06-06 16:24:36.784 TRACE 6948 --- [nio-8181-exec-5] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [TIMESTAMP] - [Sun Jun 06 16:24:27 IST 2021]
2021-06-06 16:24:36.791 TRACE 6948 --- [nio-8181-exec-5] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [VARCHAR] - [a$Ad0G05HssJUb4xaEMTqFTOlWZijMbXBSLSgyxbjVQzOEdZn7Lxuz2]

但是 org.hibernate 包中没有名为 SQL 的 class。

关于您的实际问题,这个问题及其答案可能会有所帮助: How do I step into an implemented method in debug mode in NetBeans?

关于您在标题中提出的问题:

Spring Data JPA 中的 CrudRepository 实现是 SimpleJpaRepository

关于您 post 的 body 中的问题: public List<User> findByUsername(String username); 不是预先存在的接口的一部分。所以没有直接的实现。相反,一些动态代码通过代理执行。

如果您对查询的实际执行更感兴趣,PartTreeJpaQuery.getExecution() if you are interested in the construction of the query and AbstractJpaQuery.execute() 是一个很好的调试切入点。