Spring Data 相關(一)

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)

方式一是官方推薦的最好方法.

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章