spring data 简介(三)

版权声明:如果觉得好的话,不防点个赞,那点你们认为不对或是需要补充,可以留言啊!本人原创,未经允许不得转载!! https://blog.csdn.net/qq_28289405/article/details/82453840

目录

 

SpringData_JpaRepository接口

SpringData_JpaSpecificationExecutor接口

SpringData_自定义Repository方法

如何为某一个Repository 上添加自定义方法


SpringData_JpaRepository接口

接口更改:

public interface PersonRepository extends JpaRepository<Person, Integer>{

}

测试:

//JpaRepository
	@Test
	public void testJpaRepository(){
		Person person = new Person();
		person.setBrith(new Date());
		person.setEmail("[email protected]");
		person.setLastName("AA");
		person.setId(28);
		
		Person person2 = personRepository.saveAndFlush(person);
		System.out.println(person == person2);
	}

结果:

先执行select ,在执行update 

SpringData_JpaSpecificationExecutor接口

接口:

public interface PersonRepository extends JpaRepository<Person, Integer> ,JpaSpecificationExecutor<Person> {

}

通用的带查询条件的分页,JpaSpecificationExecutor接口 可以实现。它不属于Repository 体系,实现一组Jpa Criteria查询相关方法

Specification 实际上是封装了查询条件,是Jpa Criteria 相关的查询条件

测试:
      ①、目标:实现带查询条件的分页    查询条件id>5
      ②、 调用JpaSpecificationExecutor 的Page<T> findAll(Specification<T> spec , Pageable pageable);
      ③、Specification :封装了JPA Criteria 查询的查询条件 
      ④、 Pageable : 封装了请求分页的信息:例如 pageNo,pageSize , Sort  

@Test
public void JpaSpecificationExecutor(){
	//pageNo 从0开始
		int pageNo = 3 -1 ;
		int pageSize = 5;
	PageRequest pageable = new PageRequest(pageNo, pageSize);
		
	//通常使用它 的匿名内部类
	Specification<Person> specification = new Specification<Person>() {

		/**
		 * 
		 * @param *root : 代表查询的实体类
		 * @param query:可以从中得到root对象,即告知 JPA Criteria 查询要查询哪一个实体类,
		 * 还可以来添加查询条件,还可以结合EntityManager 对象割刀最终查询的TypeQuery对象
		 * @param *cb:CriteriaBuilder 对象,用于创建Criteria 相关对象的工厂,
         *                   当然可以从中获取到Predicate 对象
		 * @return *Predicate 类型 ,代表一个查询条件
		 */
		@Override
		public Predicate toPredicate(Root<Person> root,
			                CriteriaQuery<?> query, CriteriaBuilder cb) {
			Path path = root.get("id");
			Predicate predicate = cb.gt(path,5);
			return predicate;
			}
		};
		
	Page<Person> page = personRepository.findAll(specification,pageable);
		
	System.out.println("总记录数:" + page.getTotalElements());
	System.out.println("总页数 :" + page.getTotalPages());
	System.out.println("当前页面的List :"+page.getContent());
	System.out.println("当前第几页:" +(page.getNumber() +1 ));
	ystem.out.println("当前页面的记录数:" + page.getNumberOfElements());
}

结果:

SpringData_自定义Repository方法

①、为某一个Repository 上添加自定义方法

②、为所有的Repository 都添加自实现的方法

如何为某一个Repository 上添加自定义方法

步骤:

    ①、定义一个接口,声明要添加的,并自实现的方法

    ②、提供该接口的实现类:类名需要在声明的Repository 后添加Impl,并实现方法

    ③、声明Repository  接口吧,并继承声明的接口

详解:定义了一个PersonDao 接口,里面有一个test方法

然后 PersonRepository 接口,继承了PersonDao 接口

public interface PersonRepository extends JpaRepository<Person, Integer>,
JpaSpecificationExecutor<Person>, PersonDao{ }

最后PersonRepository 在PersonRepositoryImpl 里面找方法的实现

测试:

//SpringData_自定义Repository方法
@Test
public void testCustomRepositoryMethod(){
	personRepository.test();
}	

结果:打印出来person 

猜你喜欢

转载自blog.csdn.net/qq_28289405/article/details/82453840