前言
上一篇博文Spring Data JPA的簡單使用 講到,如果按照JPA的命名規范,Spring Data Jpa會自動為我們實作資料庫相關操作,但如果我們想自己實作資料庫相關操作該怎么做?
自定義資料庫操作
1、使用HQL陳述句:定義Dao方法,并使用@Query注解寫自定義sql,如果是修改型別的SQL,還必須加上@Modifying和@Transactional注解
import com.prince.entity.VipCourse;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
public interface CourseRepository extends JpaRepository<VipCourse, String> {
/**
* 自定義實作資料庫操作
* @param cname
*/
@Modifying
@Transactional
@Query("delete from VipCourse where course_name=:courseName")
void deleteByCname(@Param("courseName") String cname);
}
2、 使用SQL陳述句
public interface CourseRepository extends JpaRepository<VipCourse, String> {
/**
* 使用sql陳述句實作自定義查詢
* 注意:這里查詢出來的欄位名后面不能取別名,Jpa會自動映射到物體類的屬性名
* 也就是這樣會報錯:select course_id courseId from vip_course
* @return
*/
@Query(value = "select course_id, course_name, price, description from vip_course", nativeQuery = true)
List<VipCourse> findAll();
}
3、使用SPEL運算式
public interface CourseRepository extends JpaRepository<VipCourse, String> {
/**
* 使用SPEL運算式實作資料庫操作
* @param course
*/
@Modifying
@Transactional
@Query(value = "update vip_course set course_name=:#{#course.courseName}, price=:#{#course.price}, description=:#{#course.description} " +
"where course_id=:#{#course.courseId}", nativeQuery = true)
void updateCourse(@Param("course") VipCourse course);
}
附:JPA命名規范


轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/3378.html
標籤:其他
下一篇:Laravel框架中連表查詢
