Spring Boot Jpa對數據庫進行查詢,增刪改

前提

首先,我們需要定義一個接口繼承自JpaRepository,比如

public interface FilesDao extends JpaRepository<Files, Long>

1. 查詢

查詢是最簡單的操作,繼承該接口之後,我們便可以使用其中的一些查詢操作,比如
findAll, findAllById之類的,都可以到JpaRepository中找,我們也可以自定義查詢,使用@Query即可

@Query(value = "SELECT * FROM files WHERE file_name=:file_name AND user_id=:user_id", nativeQuery = true)
    List<Files> findFilesByFileNameAndUserId(String file_name, Long user_id);

指定nativeQuery = true之後,我們可以使用原生的SQL語句
在語句中的參數可以用 :var_name的形式來表示,也可以直接使用?,傳入參數可以用@Param("var_name") String name來指定,也可以直接寫String name,但是需要一一對應

@Query(value = "SELECT * FROM user WHERE username=:username", nativeQuery = true)
Optional<User> findUserByUsername(@Param("username") String username);

沒有指定nativeQuery = true的時候,我們不能使用部分語句,比如select *之類的

2. 增刪改

使用這類的操作的時候,需要加上兩個註解才能完成,一個是@Modifying用來聲明是數據庫的修改操作, 另一個是 @Transactional用來處理數據庫的事務
加上這兩個註解之後,我們可以像使用SQL語句一樣對數據庫進行操作,下面給個例子

@Modifying
@Query(value = "INSERT INTO user(username, password, email, gender, academy, grade) VALUES(:username, :password, :email, :gender, :academy, :grade)", nativeQuery = true)
void insertUser(@Param(value = "username") String username, @Param(value = "password") String password, @Param(value = "email") String email, @Param(value = "gender") String gender, @Param(value = "academy") String academy, @Param(value = "grade") String grade);

@Modifying
@Query(value = "UPDATE user SET password=:password WHERE username=:username", nativeQuery = true)
void updatePasswordByUsername(@Param(value = "username") String username, @Param(value = "password") String password);

@Modifying
@Query(value = "DELETE FROM user WHERE username=:username", nativeQuery = true)
void deleteUserByUsername(@Param(value = "username") String username);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章