jparepository 怎样自定义查询

jparepository 怎样自定义查询,第1张

1、使用@Query自定义查询(Spring Data提供的)

这种查询可以声明在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)

3、 索引参数与命名参数

(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个表。

请参考


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11317683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存