• 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 }
    Person.java
     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 }
    Address.java
     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 }
    PersonRepository.java

        

  • 相关阅读:
    centos 给终端设快捷键
    centos 给鼠标右击添加 “打开终端” 菜单项
    centos 6.X 安装输入法
    centos U盘安装
    js的构造函数
    onresize的定义方式
    两个时间对比
    AMD和CMD的区别
    spring加载配置文件
    cglib代理
  • 原文地址:https://www.cnblogs.com/zhaobingqing/p/6859100.html
Copyright © 2020-2023  润新知