Spring Data JPA 常用注解 @Query、@NamedQuery


1、@Transient

@Transient表示該屬性並非一個到數據庫表的字段的映射,ORM框架將忽略該屬性;
如果一個屬性並非數據庫表的字段映射,就務必將其標示為@Transient,否則ORM框架默認其注解為@Basic;

//表示該字段在數據庫表中沒有

@Transient
public int getAge() {
 return 1+1;
}

 

Jackson相關:

2、@JsonIgnoreProperties

此注解是類注解,作用是json序列化時將Java bean中的一些屬性忽略掉,序列化和反序列化都受影響。

 

3、@JsonIgnore

此注解用於屬性或者方法上(最好是屬性上),作用和上面的@JsonIgnoreProperties一樣。

 

4、@JsonFormat

此注解用於屬性或者方法上(最好是屬性上),可以方便的把Date類型直接轉化為我們想要的模式,比如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")

 

5、@JsonSerialize

此注解用於屬性或者getter方法上,用於在序列化時嵌入我們自定義的代碼,比如序列化一個double時在其后面限制兩位小數點。

 

6、@JsonDeserialize

此注解用於屬性或者setter方法上,用於在反序列化時可以嵌入我們自定義的代碼,類似於上面的@JsonSerialize

 

 

*可以使用JPA的NamedQueries,方法如下:
1:在實體類上使用@NamedQuery,示例如下:
@NamedQuery(name = "UserModel.findByAge",query = "select o from UserModel o where o.age >= ?1")
注:定義多個時使用下面的注解 
@NamedQueries(value = { 
         @NamedQuery(name = User.QUERY_FIND_BY_LOGIN, 
                                        query = "select u from User u where u." + User.PROP_LOGIN 
                                                + " = :username"), 
        @NamedQuery(name = "getUsernamePasswordToken", 
                        query = "select new com.aceona.weibo.vo.TokenBO(u.username,u.password) from User u where u." + User.PROP_LOGIN 
                            + " = :username")}) 
2:在自己實現的DAO的Repository接口里面定義一個同名的方法,示例如下:
public List<UserModel> findByAge(int age);
3:然后就可以使用了,Spring會先找是否有同名的NamedQuery,如果有,那么就不會按照接口定義的方法來解析。
*使用@Query
這種查詢可以聲明在繼承JpaRepository接口方法中,可以在自定義的查詢方法上使用@Query來指定該方法要執行的查詢語句,比如:
@Query("select o from UserModel o where o.uuid=?1")
public List<UserModel> findByUuidOrAge(int uuid);
注意:
1:方法的參數個數必須和@Query里面需要的參數個數一致
2:如果是like,后面的參數需要前面或者后面加“%”,比如下面都對:
@Query("select o from UserModel o where o.name like ?1%")
public List<UserModel> findByUuidOrAge(String name);
 
@Query("select o from UserModel o where o.name like %?1")
public List<UserModel> findByUuidOrAge(String name);
 
@Query("select o from UserModel o where o.name like %?1%")
public List<UserModel> findByUuidOrAge(String name);
 
當然,這樣在傳遞參數值的時候就可以不加‘%’了,當然加了也不會錯
 
n還可以使用@Query來指定本地查詢,只要設置nativeQuery為true,比如:
@Query(value="select * from tbl_user where name like %?1" ,nativeQuery=true)
public List<UserModel> findByUuidOrAge(String name);
注意:當前版本的本地查詢不支持翻頁和動態的排序
 
使用命名化參數,使用@Param即可,比如:
@Query(value="select o from UserModel o where o.name like %:nn")
public List<UserModel> findByUuidOrAge(@Param("nn") String name);
同樣支持更新類的Query語句,添加@Modifying即可,比如:
@Modifying
@Query(value="update UserModel o set o.name=:newName where o.name like %:nn")
public int findByUuidOrAge(@Param("nn") String name,@Param("newName") String newName);
注意:
1:方法的返回值應該是int,表示更新語句所影響的行數
2:在調用的地方必須加事務,沒有事務不能正常執行

 

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM