这种查询可以声明在Repository方法中,摆脱像命名查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是Spring data的特有实现。
例如:
public interface UserRepository extends JpaRepository<User, Long>{
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress)
}
2、 @Query与 @Modifying 执行更新 *** 作
这两个annotation一起声明,可定义个性化更新 *** 作,例如只涉及某些字段更新时最为常用,示例如下:
@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname)
(1)索引参数如下所示,索引值从1开始,查询中 ”?X” 个数需要与方法定义的参数个数相一致,并且顺序也要一致
@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname)
(2)命名参数(推荐使用这种方式)
可以定义好参数名,赋值时采用@Param("参数名"),而不用管顺序。如下所示:
public interface UserRepository extends JpaRepository<User, Long>{
@Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname")
User findByLastnameOrFirstname(@Param("lastname") String lastname,
@Param("firstname") String firstname)
}
详情可查看 :http://jishiweili.iteye.com/blog/2088265
进行面向对象的分析,uer和role之间是双向多对多联系,使用JPA配置如下所示:@Entity
public class User implements Serizlizable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id
private String userName
private String passWord
@ManyToMany(cascade = CascadeType.ALL)
private List<Role>roles
......
......
}
@Entity
public class Role implements Serizlizable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id
private String role
@ManyToMany(mappedBy = "roles")
private User user
......
......
}
配置后,会在数据库中生存你想要的3个表。
请参考
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)