一.继承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());
}
|