springboot连表查询数据库实现

  • 数据库连表
  • 需求示例

数据库连表

通过两张表相互关联,(某个相同的字段)实现两个数据库相互联系,通过连表查询语句可以同时访问两个表的数据.

需求示例

两张表;user表(有name,Email等属性),VerificationCode表(有Email,Verification等属性,)

现在想要实现两个接口功能,

1:通过Email同时查询name与Verification的值并返回;

2:通过name同时查询Email与Verification的值并返回

1通过Email同时查询name与Verification的值并返回

在UserRepository中,我们使用@Query注解来定义自定义查询语句,实现了通过Email同时查询name与Verification的功能:


@Repository
public interface UserRepository extends JpaRepository<UserLong{
    
    @Query("SELECT u.name, v.verification FROM User u JOIN VerificationCode v ON u.email = v.email WHERE u.email = :email")
    List findUserInfoByEmail(@Param("email") String email);
    
    User findByEmail(String email);
}

实现接口功能:

@RestController
public class UserController {
    
    private final UserRepository userRepository;
    
    @Autowired
    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @GetMapping("/user-info-by-email")
    public ResponseEntity> getUserInfoByEmail(@RequestParam String email) {
        List result = userRepository.findUserInfoByEmail(email);
        
        if (!result.isEmpty()) {
            Object[] data = result.get(0);
            Map resultMap = new HashMap<>();
            resultMap.put("name", (String) data[0]);
            resultMap.put("verification", (String) data[1]);
            return ResponseEntity.ok(resultMap);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}
2 通过name同时查询Email与Verification的值并返回

在VerificationCodeRepository中,我们同样使用@Query注解定义自定义查询语句,实现了通过name同时查询Email与Verification的功能:


@Repository
public interface VerificationCodeRepository extends JpaRepository {
    
    @Query("SELECT u.email, v.verification FROM User u JOIN VerificationCode v ON u.email = v.email WHERE u.name = :name")
    List findVerificationInfoByName(@Param("name") String name);
    
    VerificationCode findByEmail(String email);
}

功能实现:

@RestController
public class VerificationCodeController {
    
    private final VerificationCodeRepository verificationCodeRepository;
    
    @Autowired
    public VerificationCodeController(VerificationCodeRepository verificationCodeRepository) {
        this.verificationCodeRepository = verificationCodeRepository;
    }
    
    @GetMapping("/verification-info-by-name")
    public ResponseEntity> getVerificationInfoByName(@RequestParam String name) {
        List result = verificationCodeRepository.findVerificationInfoByName(name);
        
        if (!result.isEmpty()) {
            Object[] data = result.get(0);
            Map resultMap = new HashMap<>();
            resultMap.put("email", (String) data[0]);
            resultMap.put("verification", (String) data[1]);
            return ResponseEntity.ok(resultMap);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}

简单的讲解了连表查询,主要是查询语句的定义与数据返回的设置

本文由 mdnice 多平台发布

你可能感兴趣的:(后端)