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)
方式一是官方推荐的最好方法.