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")})
注:定義多個時使用下面的注解
@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:在調用的地方必須加事務,沒有事務不能正常執行