SpringData Repository Bean方法定義規(guī)范代碼實(shí)例
本節(jié)主要介紹Repository Bean中方法定義規(guī)范。
1、方法不是隨便聲明,需要符合一定的規(guī)范。
2、按照Spring Data的規(guī)范,查詢方法以find|read|get開(kāi)頭,涉及條件查詢時(shí),條件的屬性用條件關(guān)鍵字連接,要注意的是:條件屬性需要首字母大寫。
3、Spring Data支持的關(guān)鍵字如下:


4、支持屬性的級(jí)聯(lián)查詢,若當(dāng)前類有符合條件的屬性,則優(yōu)先使用,而不使用級(jí)聯(lián)屬性。若想使用級(jí)聯(lián)屬性,則屬性之間用"_"連接。
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、實(shí)現(xiàn)Repository接口 2、通過(guò)注解的方式@RepositoryDefinition將一個(gè)bean定義為Repository接口
*/
@RepositoryDefinition(idClass = Integer.class, domainClass = Person.class)
public interface PersonRepsitory {
// 根據(jù)lastName獲取對(duì)應(yīng)的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 優(yōu)先查找Person類中的AddressId屬性,如果Person類中沒(méi)有,就查找Address類中的Id屬性
* 這樣容易出現(xiàn)問(wèn)題,建議級(jí)聯(lián)查詢中,屬性之間使用"_"連接
*
*/
List<Person> findByAddressIdGreaterThan(Integer id);
// 這樣就很明確是進(jìn)行級(jí)聯(lián)查詢,Address類中的ID屬性
List<Person> findByAddress_IdGreaterThan(Integer id);
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis?mysql模糊查詢方式(CONCAT多個(gè)字段)及bug
這篇文章主要介紹了Mybatis?mysql模糊查詢方式(CONCAT多個(gè)字段)及bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
java GUI編程之布局控制器(Layout)實(shí)例分析
這篇文章主要介紹了java GUI編程之布局控制器(Layout),結(jié)合實(shí)例形式分析了java GUI編程中布局控制器(Layout)具體功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-01-01
java中的動(dòng)態(tài)代理與責(zé)任鏈模式詳解
這篇文章主要介紹了java中的動(dòng)態(tài)代理與責(zé)任鏈模式詳解,動(dòng)態(tài)代理提供了一種靈活且非侵入式的方式,可以對(duì)對(duì)象的行為進(jìn)行定制和擴(kuò)展,它在代碼重用、解耦和業(yè)務(wù)邏輯分離、性能優(yōu)化以及系統(tǒng)架構(gòu)中起到了重要的作用,需要的朋友可以參考下2023-08-08
Java 實(shí)戰(zhàn)練手項(xiàng)目之酒店管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)酒店管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(13)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07
mybatis mapper.xml獲取insert后的自增ID問(wèn)題
這篇文章主要介紹了mybatis mapper.xml獲取insert后的自增ID問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法
這篇文章主要介紹了Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法,涉及Java數(shù)學(xué)運(yùn)算計(jì)算隨機(jī)數(shù)及字符串操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
詳解MyBatisPlus邏輯刪除與唯一索引沖突問(wèn)題
這篇文章主要介紹了詳解MyBatisPlus邏輯刪除與唯一索引沖突問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

