Spring data

一.继承Repository接口

Repository是Spring data的核心接口,不提供任何方法,属于标记接口,内容如下

public  interface  Repository<T,ID  extends  Serializable> {}

实例代码:

public  interface  CourseRepository  extends  Repository<CoursePO,Integer> {
     //根据teacherId获取课程,数据库中需要有teacher_id字段
     public  CoursePO findByTeacherId(Integer teacherId);
 
}

可以通过继承Repository接口或者使用RepositoryDefinition注解

@RepositoryDefinition (domainClass = CoursePO. class ,idClass = Integer. class )
public  interface  CourseRepository{
     //根据teacherId获取课程,数据库中需要有teacher_id字段
     public  CoursePO findByTeacherId(Integer teacherId);
 
}

二.Repository查询方法定义规则

弊端:方法名较长,一些复杂的查询难以实现

三.Query注解

@Query ( "select c from course c where c.teacher_id =?1 " )
public  CoursePO test(Integer teacherId);
  
@Query ( "select c from course c where c.teacher_id =:teacherId " )
public  CoursePO test1( @Param ( "teacherId" ) Integer teacherId);
  
@Query ( "select c from course c where c.teacher_name like %?1%" )
public  List<CoursePO> queryLike( @Param ( "teacherName" ) String name);

四.更新删除整合事务

做更新操作的时候需要加上@Modifying注解,并且在service层加上事务注解@Transactional

CourseRepository:
@Modifying
@Query ( "update course set teacher_id =:teacherId where id=:id" )
public  void  update( @Param ( "id" )Integer id, @Param ( "teacherId" )Integer teacherId);

CourseService:

@Service
public  class  CourseService {
  
     @Autowired
     private  CourseRepository courseRepository;
     
     @Transactional
     public  void  update(Integer id ,Integer teacherId){
         courseRepository.update(id,teacherId);
     }
}

五.Repository子接口

1)CurdRepository:继承Repository,实现了curd方法

Entity类中也可以不通过类名创建表,具体如下

@Entity
@Table (name =  "course_test" )
public  class  CoursePO {
     private  Integer id;
  
     …………
  
}

2)PagingAndSortingRepository:继承CurdRepository,实现了分页排序功能

@NoRepositoryBean
public  interface  PagingAndSortingRepository<T, ID  extends  Serializable>  extends  CrudRepository<T, ID> {
     Iterable<T> findAll(Sort var1);
 
     Page<T> findAll(Pageable var1);
}

测试类:

@Service
public  class  CourseServiceTest {
 
     @Autowired
     private  CourseRepository courseRepository;
 
     @Test
     public  void  testPage(){
         //从第1页开始(数字为0,代表第一页)每页5条
         Pageable pageable =  new  PageRequest( 0 , 5 );
         Page<CoursePO> page = courseRepository.findAll(pageable);
         System.out.println( "查询总页数:" +page.getTotalPages());
         System.out.println( "查询总记录数:" +page.getTotalElements());
         System.out.println( "查询当前页数:" +(page.getNumber() +  1 ));
         System.out.println( "查询当前页面的集合:" +page.getContent());
         System.out.println( "查询当前页面的记录数:" +page.getNumberOfElements());
     }
  
     @Test
     public  void  testPageAndSort(){
         //按照id升序
         Sort.Order order =  new  Sort.Order(Sort.Direction.ASC, "id" );
         Sort sort =  new  Sort(order);
         //从第1页开始(数字为0,代表第一页)每页5条
         Pageable pageable =  new  PageRequest( 0 , 5 , sort);
         Page<CoursePO> page = courseRepository.findAll(pageable);
         System.out.println( "查询总页数:" +page.getTotalPages());
         System.out.println( "查询总记录数:" +page.getTotalElements());
         System.out.println( "查询当前页数:" +page.getNumber());
         System.out.println( "查询当前页面的集合:" +page.getContent());
         System.out.println( "查询当前页面的记录数:" +page.getNumberOfElements());
     }
}


3)JpaRepository:继承PagingAndSortingRepository,实现Jpa规范相关方法

findAll,findAll(Sort sort),save(entities),flush,deleteInBatch(entities),exits(Integer id)等方法

4)JpaSpecificationExecutor:

public interface CourseRepository extends PagingAndSortingRepository<CoursePO,Integer>,JpaSpecificationExecutor<CoursePO> {}

测试类:

@Test
public  void  testQuery(){
     //按照id升序
     Sort.Order order =  new  Sort.Order(Sort.Direction.ASC, "id" );
     Sort sort =  new  Sort(order);
     //从第1页开始(数字为0,代表第一页)每页5条
     Pageable pageable =  new  PageRequest( 0 , 5 , sort);
 
     Specification<CoursePO> specification =  new  Specification<CoursePO>() {
         @Override
         public  Predicate toPredicate(Root<CoursePO> root,
                                      CriteriaQuery<?> criteriaQuery,
                                      CriteriaBuilder criteriaBuilder) {
             Path path = root.get( "views" );
             return  criteriaBuilder.gt(path, 50 ); //浏览量大于50
         }
     };
 
     Page<CoursePO> page = courseRepository.findAll(pageable);
     System.out.println( "查询总页数:" +page.getTotalPages());
     System.out.println( "查询总记录数:" +page.getTotalElements());
     System.out.println( "查询当前页数:" +page.getNumber());
     System.out.println( "查询当前页面的集合:" +page.getContent());
     System.out.println( "查询当前页面的记录数:" +page.getNumberOfElements());
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值