SpringData Repository Bean方法定义规范代码实例

 更新时间:2020年08月27日 10:18:01   作者:云淡风轻博客  
这篇文章主要介绍了SpringData Repository Bean方法定义规范代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

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

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

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

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

package com.ntjr.springdata;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Table(name = "JPA_PERSONS")
@Entity
public class Person {

  private Integer id;
  private String lastName;
  private String email;
  private Date birth;
  private Address address;
  private Integer addressId;

  @GeneratedValue
  @Id
  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getLastName() {
    return lastName;
  }

  @Column(name = "LAST_NAME")
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }

  public Date getBirth() {
    return birth;
  }

  public void setBirth(Date birth) {
    this.birth = birth;
  }

  @JoinColumn(name = "ADDRESS_ID")
  @ManyToOne(cascade = { CascadeType.ALL }, targetEntity = Address.class)
  public Address getAddress() {
    return address;
  }

  public void setAddress(Address address) {
    this.address = address;
  }


  public Integer getAddressId() {
    return addressId;
  }

  public void setAddressId(Integer addressId) {
    this.addressId = addressId;
  }

  @Override
  public String toString() {
    return "Person [id=" + id + ", lastName=" + lastName + ", email=" + email + ", birth=" + birth + "]";
  }

}
package com.ntjr.springdata;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name="JPA_ADDRESSES")
@Entity
public class Address {

  private Integer id;
  private String province;
  private String city;

  @GeneratedValue
  @Id
  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getProvince() {
    return province;
  }

  public void setProvince(String province) {
    this.province = province;
  }

  public String getCity() {
    return city;
  }

  public void setCity(String city) {
    this.city = city;
  }

}
package com.ntjr.springdata;

import java.util.Date;
import java.util.List;

import org.springframework.data.repository.RepositoryDefinition;

/**
 *
 * 1、实现Repository接口 2、通过注解的方式@RepositoryDefinition将一个bean定义为Repository接口
 */
@RepositoryDefinition(idClass = Integer.class, domainClass = Person.class)
public interface PersonRepsitory {
  // 根据lastName获取对应的person
  Person getByLastName(String lastName);

  // WHERE lastName like ?% AND id<?
  List<Person> findByLastNameStartingWithAndIdLessThan(String lastName, Integer id);

  // WHERE lastName Like %? And Id <?
  List<Person> findByLastNameEndingWithAndIdLessThan(String lastName, Integer id);

  // WHERE email IN(?,?,?) Or birth <?
  List<Person> findByEmailInOrBirthLessThan(List<String> emails, Date birth);

  // WHERE a.id >?
  /**
   * AddressId 优先查找Person类中的AddressId属性,如果Person类中没有,就查找Address类中的Id属性
   * 这样容易出现问题,建议级联查询中,属性之间使用"_"连接
   *
   */
  List<Person> findByAddressIdGreaterThan(Integer id);

  // 这样就很明确是进行级联查询,Address类中的ID属性
  List<Person> findByAddress_IdGreaterThan(Integer id);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot系列教程之日志配置

    Spring Boot系列教程之日志配置

    这篇文章主要给大家介绍了关于Spring Boot系列教程之日志配置的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 利用@Value注解为bean的属性赋值方法总结

    利用@Value注解为bean的属性赋值方法总结

    这篇文章主要介绍了利用@Value注解为bean的属性赋值方法总结,文中有详细的代码示例,对学习@Value注解有一定的参考价值,需要的朋友可以参考下
    2023-05-05
  • java如何确定一个链表有环及入口节点

    java如何确定一个链表有环及入口节点

    这篇文章主要介绍了java如何确定一个链表有环及入口节点,想了解数据结构的同学可以参考下
    2021-04-04
  • java之StringBuffer常见使用方法解析

    java之StringBuffer常见使用方法解析

    这篇文章主要介绍了java之StringBuffer常见使用方法解析,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 阿里巴巴 Sentinel + InfluxDB + Chronograf 实现监控大屏

    阿里巴巴 Sentinel + InfluxDB + Chronograf 实现监控大屏

    这篇文章主要介绍了阿里巴巴 Sentinel + InfluxDB + Chronograf 实现监控大屏,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • mybatis实现增删改查_动力节点Java学院整理

    mybatis实现增删改查_动力节点Java学院整理

    本文通过实例代码给大家介绍了mybatis实现增删改查功能,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-09-09
  • 五分钟解锁springboot admin监控新技巧

    五分钟解锁springboot admin监控新技巧

    本文不会讲如何搭建企业的运维监控系统,有兴趣的可以去找找成熟的比如Zabbix、Prometheus,甚至比较简单的Wgcloud都能满足一定的需求,不在此赘述。本文讲解如何使用Springboot admin对spring boot项目进行应用监控,感兴趣的朋友一起看看吧
    2021-06-06
  • 解决IDEA2020.1版本不兼容Lombok的问题

    解决IDEA2020.1版本不兼容Lombok的问题

    这篇文章主要介绍了解决IDEA2020.1版本不兼容Lombok的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • springboot配置https安全连接的方法

    springboot配置https安全连接的方法

    这篇文章主要介绍了springboot配置https安全连接的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • springboot启动不了也不报错的问题及解决

    springboot启动不了也不报错的问题及解决

    这篇文章主要介绍了springboot启动不了也不报错的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论