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:在调用的地方必须加事务,没有事务不能正常执行
相关文章
相关标签/搜索