Spring Data JPA 經常使用註解 @Query、@NamedQuery

一、@Transientjava

@Transient表示該屬性並不是一個到數據庫表的字段的映射,ORM框架將忽略該屬性;
若是一個屬性並不是數據庫表的字段映射,就務必將其標示爲@Transient,不然ORM框架默認其註解爲@Basic;mysql

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

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

 

Jackson相關:json

二、@JsonIgnoreProperties框架

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

 

三、@JsonIgnorespa

此註解用於屬性或者方法上(最好是屬性上),做用和上面的@JsonIgnoreProperties同樣。.net

 

四、@JsonFormatorm

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

 

五、@JsonSerialize

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

 

六、@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:在調用的地方必須加事務,沒有事務不能正常執行
相關文章
相關標籤/搜索