SpringData系列三 Repository Bean 方法定义规范

 本节主要介绍Repository Bean中方法定义规范。

  1、方法不是随便声明,需要符合一定的规范。

  2、按照Spring Data的规范,查询方法以find|read|get开头,涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性需要首字母大写

  3、Spring Data支持的关键字如下:

   

   

  4、支持属性的级联查询,若当前类有符合条件的属性,则优先使用,而不使用级联属性。若想使用级联属性,则属性之间用"_"连接。

复制代码
 1 package com.ntjr.springdata;
 2 
 3 import java.util.Date;
 4 
 5 import javax.persistence.CascadeType;
 6 import javax.persistence.Column;
 7 import javax.persistence.Entity;
 8 import javax.persistence.GeneratedValue;
 9 import javax.persistence.Id;
10 import javax.persistence.JoinColumn;
11 import javax.persistence.ManyToOne;
12 import javax.persistence.Table;
13 
14 @Table(name = "JPA_PERSONS")
15 @Entity
16 public class Person {
17 
18     private Integer id;
19     private String lastName;
20     private String email;
21     private Date birth;
22     private Address address;
23     private Integer addressId;
24 
25     @GeneratedValue
26     @Id
27     public Integer getId() {
28         return id;
29     }
30 
31     public void setId(Integer id) {
32         this.id = id;
33     }
34 
35     public String getLastName() {
36         return lastName;
37     }
38 
39     @Column(name = "LAST_NAME")
40     public void setLastName(String lastName) {
41         this.lastName = lastName;
42     }
43 
44     public String getEmail() {
45         return email;
46     }
47 
48     public void setEmail(String email) {
49         this.email = email;
50     }
51 
52     public Date getBirth() {
53         return birth;
54     }
55 
56     public void setBirth(Date birth) {
57         this.birth = birth;
58     }
59 
60     @JoinColumn(name = "ADDRESS_ID")
61     @ManyToOne(cascade = { CascadeType.ALL }, targetEntity = Address.class)
62     public Address getAddress() {
63         return address;
64     }
65 
66     public void setAddress(Address address) {
67         this.address = address;
68     }
69     
70     
71     public Integer getAddressId() {
72         return addressId;
73     }
74 
75     public void setAddressId(Integer addressId) {
76         this.addressId = addressId;
77     }
78 
79     @Override
80     public String toString() {
81         return "Person [id=" + id + ", lastName=" + lastName + ", email=" + email + ", birth=" + birth + "]";
82     }
83 
84 }
复制代码
复制代码
 1 package com.ntjr.springdata;
 2 
 3 import javax.persistence.Entity;
 4 import javax.persistence.GeneratedValue;
 5 import javax.persistence.Id;
 6 import javax.persistence.Table;
 7 
 8 @Table(name="JPA_ADDRESSES")
 9 @Entity
10 public class Address {
11 
12     private Integer id;
13     private String province;
14     private String city;
15 
16     @GeneratedValue
17     @Id
18     public Integer getId() {
19         return id;
20     }
21 
22     public void setId(Integer id) {
23         this.id = id;
24     }
25 
26     public String getProvince() {
27         return province;
28     }
29 
30     public void setProvince(String province) {
31         this.province = province;
32     }
33 
34     public String getCity() {
35         return city;
36     }
37 
38     public void setCity(String city) {
39         this.city = city;
40     }
41 
42 }
复制代码
复制代码
 1 package com.ntjr.springdata;
 2 
 3 import java.util.Date;
 4 import java.util.List;
 5 
 6 import org.springframework.data.repository.RepositoryDefinition;
 7 
 8 /**
 9  * 
10  * 1、实现Repository接口 2、通过注解的方式@RepositoryDefinition将一个bean定义为Repository接口
11  */
12 @RepositoryDefinition(idClass = Integer.class, domainClass = Person.class)
13 public interface PersonRepsitory {
14     // 根据lastName获取对应的person
15     Person getByLastName(String lastName);
16 
17     // WHERE lastName like ?% AND id<?
18     List<Person> findByLastNameStartingWithAndIdLessThan(String lastName, Integer id);
19 
20     // WHERE lastName Like %? And Id <?
21     List<Person> findByLastNameEndingWithAndIdLessThan(String lastName, Integer id);
22 
23     // WHERE email IN(?,?,?) Or birth <?
24     List<Person> findByEmailInOrBirthLessThan(List<String> emails, Date birth);
25 
26     // WHERE a.id >?
27     /**
28      * AddressId 优先查找Person类中的AddressId属性,如果Person类中没有,就查找Address类中的Id属性
29      * 这样容易出现问题,建议级联查询中,属性之间使用"_"连接
30      *
31      */
32     List<Person> findByAddressIdGreaterThan(Integer id);
33 
34     // 这样就很明确是进行级联查询,Address类中的ID属性
35     List<Person> findByAddress_IdGreaterThan(Integer id);
36 }
复制代码
posted on 2020-07-05 21:25  云淡风轻博客  阅读(479)  评论(0编辑  收藏  举报