iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Mobile Development

用Spring Boot架設後端結合Android前端建構智慧個人化推薦系統系列 第 12

Day12 使用Spring Data JPA進行SQL查詢:學習如何自定義查詢

  • 分享至 

  • xImage
  •  

為什麼要自定義查詢?

雖然Spring Data JPA提供了多種自動生成查詢的功能,但在某些情況下,我們需要更加複雜的查詢邏輯。這就是自定義查詢的用武之地。使用自定義查詢可以讓我們充分發揮SQL的強大功能

首先我們創建一個簡單的實體。假設我們有一個User實體,代表使用者的基本信息

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // getters and setters
}

接著我們需要創建一個repository介面,這個介面將繼承JpaRepository,並添加自定義查詢的方法

public interface UserRepository extends JpaRepository<User, Long> {

    // 基於方法名的查詢
    List<User> findByName(String name);

    // 自定義SQL查詢
    @Query("SELECT u FROM User u WHERE u.email = :email")
    User findUserByEmail(@Param("email") String email);
}

在上面的程式碼中,我們定義了一個方法findUserByEmail,這是一個自定義的JPQL查詢,你可以使用類似的方式來實現SQL原生查詢

如果你想使用原生SQL查詢,可以使用nativeQuery = true的屬性

@Query(value = "SELECT * FROM users WHERE email = :email", nativeQuery = true)
User findUserByEmailNative(@Param("email") String email);

再來創建一個UserService來使用這個repository

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User getUserByEmail(String email) {
        return userRepository.findUserByEmail(email);
    }

    public List<User> getUsersByName(String name) {
        return userRepository.findByName(name);
    }
}

最後,我們可以在控制器中測試這些查詢

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/email/{email}")
    public User getUserByEmail(@PathVariable String email) {
        return userService.getUserByEmail(email);
    }

    @GetMapping("/name/{name}")
    public List<User> getUsersByName(@PathVariable String name) {
        return userService.getUsersByName(name);
    }
}

透過簡單的實體、repository、service和controller層,我們可以輕鬆實現對資料庫的CRUD操作


上一篇
Day11 建立JPA實體與Repository:從資料庫到實體的過程
下一篇
Day13 Spring Data的Pagination與Sorting功能:如何處理大量資料
系列文
用Spring Boot架設後端結合Android前端建構智慧個人化推薦系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言