SpringData之repository接口详解

来源:互联网 发布:ebody哪些好看知乎 编辑:程序博客网 时间:2024/06/08 03:46

SpringData官方文档

以下是本人阅读各种大牛博客 + 官方文档总结的知识点
避免大家学习走弯路 总结如下

Repository 接口是 Spring Data 的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法
与继承 Repository 等价的一种方式。@RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。
目前我所了解 两种方式没有区别

public interface Repository< T, ID extends Serializable> { } 仅仅是一个标识,表明任何继承它的均为仓库接口类
CrudRepository: 继承 Repository,实现了一组 CRUD 相关的方法
PagingAndSortingRepository: 继承 CrudRepository,实现了一组分页排序相关的方法
JpaRepository: 继承 PagingAndSortingRepository,实现一组 JPA 规范相关的方法
自定义的 XxxxRepository 需要继承 JpaRepository,这样的 XxxxRepository 接口就具备了通用的数据访问控制层的能力。

一: SpringData 方法定义规范
SpringData 方法定义规范
SpringData 方法定义规范

注意:注意:注意
该接口允许级联查询 -> 最好在级联的属性用 ( _ ) 来包含 否则出现同名属性 则查询同名属性 不查询级联属性!!!

二 : @Query 注解 支持JPQL以及SQL(不推荐使用SQL效率不如JDBC直连)

    // 自定义JPQL传递参数查询    @Query("SELECT e FROM EMP WHRER e.eid= 1?")    Emp testGetEmpById(Integer eid){};    @Query("SELECT e FROM EMP WHRER e.ename = :ename?")    List<Emp> testGetEmpByName(@Param("ename")String ename){};    // 模糊查询    @Query("select e from EMP e where e.ename %?1%")    List<Emp> findByUuidOrAge(String name);    // 本地SQL查询    @Query(value="select count(*) from emp" ,nativeQuery=true)    Long findAllEmp();

三 : @Modifying
若你想要执行DML(除增加)默认的事物管理无法达成
所以需要在repository内执方法添加该注解
并在service层调用该方法位置添加@Transactional修改调用方法

阅读全文
0 0
原创粉丝点击