前提
首先,我們需要定義一個接口繼承自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);