1.JpaRepository或MongoRepository繼承於CrudRepository,CrudRepository繼承於Repository
2.PagingAndSortingRepository繼承CrudRepository
3.
//ID是entity類T中ID的數據類型
public interface TestJpa extends JpaRepository<T,ID> {
}
4.Spring Data 的分頁查詢
分頁從0開始
//Dao層
@Repository
public interface TestData extends PagingAndSortingRepository<SysUser,String> {
}
//controller層
@ResponseBody
public void test19(){
Page<SysUser> users=testData.findAll(PageRequest.of(1,10));
}
5.Spring Data 查詢方法
entity:
import javax.persistence.*;
@Entity(name = "tb_test_person")
public class PersonEntity {
@Column(name = "ID_")
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private Integer id;
@Column(name ="NAME_")
private String name;
@Column(name = "CITY_")
private String city;
}
dao層:
public interface TestData extends Repository<PersonEntity,Integer> {
List<PersonEntity> findByName(String name);
}
config:
官方說需要此配置,但是我springboot項目中沒有配置也可以正常訪問,不太清楚爲什麼???
@EnableJpaRepositories(basePackages = ("repository所在的包路徑"))
public class SpringDataConfig {
}
test:
private final TestData testData;
public TestController(TestData testData){
this.testData=testData;
}
public void test19(String name){
List<PersonEntity> personEntities=testData.findByName(name);
System.out.println("======");
}
6.繼承CrudRepository定義CRUD methods;繼承Repository定義query methods
7.定義公共方法:
若多個需要繼承Repository的接口中有相同的方法,可以把這些相同的方法提取出來做成公共的
@NoRepositoryBean
interface MyBaseRepository<T, ID> extends Repository<T, ID> {
Optional<T> findById(ID id);
<S extends T> S save(S entity);
}
interface UserRepository extends MyBaseRepository<User, Long> {
User findByEmailAddress(EmailAddress emailAddress);
}
@NoRepositoryBean是爲了防止中間接口MyBaseRepository生成bean
8.IgnoreCase和AllIgnoreCase
IgnoreCase是單個屬性起作用,AllIgnoreCase對所有條件屬性起作用
IDEA中IgnoreCase和AllIgnoreCase不會自動拼寫,但是可以自動生效
9.排序
後面加OrderBy並以(ASC 或DESC)結尾
10.Property Expressions 針對Entity實體類中字段爲自定義類的情況
假設Person實體類中有Address屬性類,Address類的某個字段是ZipCode
寫法:
爲了避免PersonEntity實體類中有addressZip屬性,所以最好是在屬性值和屬性值的屬性值之間添加"_"
List<PersonEntity> findByAddress_ZipCode(String zipCode)
若PersonEntity實體類中沒有addressZip屬性,則以下寫法也可以:
List<PersonEntity> findByAddressZipCode(String zipCode)
方式一是官方推薦的最好方法.