Spring Data JPA 常用注解 @Query、@NamedQuery
2015-08-25 15:56
567 查看
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:在调用的地方必须加事务,没有事务不能正常执行
如果一个属性并非数据库表的字段映射,就务必将其标示为@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:在调用的地方必须加事务,没有事务不能正常执行
相关文章推荐
- java MD5 加密(16位/32位)
- 【转】JAVA中的反射机制
- java内存区域
- spring 框架的xml文件如何读取properties文件数据
- java中instanceof用法
- hadoop中javac编译添加jar库文件路径问题
- java scanner 接收键盘输入 中文乱码问题
- Java-数组
- 在eclipse中添加新软件 从JAVASE 到 JAVAEE
- Java泛型:类型檫除、模板和泛型传递
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
- Spring的数据源配置
- java语言的反射机制
- JAVA接口的一些理解描述
- java.util.ResourceBundle 和java.util.properties 读取配置文件区别
- Java.lang.RuntimeException: Unable to start activity ComponentInfo Caused by: java.lang.NullPointer
- Java 内存泄露
- 走迷宫回溯算法(Java实现)
- maven项目在eclipse中debug时看不到源码?
- 搭建最简单的SpringMVC框架(使用maven)