zoukankan      html  css  js  c++  java
  • 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:在调用的地方必须加事务,没有事务不能正常执行

     

     
     
     
     
  • 相关阅读:
    AFNetworking
    Alpha、Beta、RC、GA版本的区别
    Cocoa的MVC架构分析
    Core Graphics 和Quartz 2D的区别
    Linux基础--03--磁盘分区、挂载
    Linux基础--02--top、free and ps
    linux基础-01-用户和目录、vim、归档和解压、系统启动流程、加密
    Oracle VM VirtualBox 中安装linux步骤
    009--项目成本管理
    008--项目立项管理
  • 原文地址:https://www.cnblogs.com/cnblog-long/p/7425964.html
Copyright © 2011-2022 走看看