一、Repository
Repository类的定义:
public interface Repository<T, ID extends Serializable> {
}
二、Repository接口详解
1)Repository是一个空接口,标记接口
没有包含方法声明的接口
2)如果我们定义的接口EmployeeRepository extends Repository,就会被spring所管理
如果我们自己的接口没有extends Repository,运行时会报错:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.tinner.repository.EmployeeRepository' available
3) 添加注解能到达到不用extends Repository的功能
@RepositoryDefinition(domainClass = Employee.class, idClass = Integer.class)
三、Repository的子接口
- CrudRepository:继承Repository,实现了CRUD相关的方法
- PagingAndSortingRepository:继承CrudRepository,实现了分页排序相关的方法
- JpaRepository:继承PagingAndSortingRepository,实现JPA规范相关的方法
四、弊端
对于按照方法命名规则来使用的话,有弊端:
- 方法名会比较长: 约定大于配置
- 对于一些复杂的查询,是很难实现
五、@Query注解
- 使用这个注解可以支持原生sql。
- 加了nativeQuery = true后,sql为原生sql,不加nativeQuery = true时,sql语句中from写的是entity名称,加了nativeQuery = true后sql就是原生的数据库中的写法,from后写的是表名。要注意的是写原生态的sql得到的结果如果是model,需要进行转换,否则会出现转换异常~
六、事务在Spring data中的使用:
- 事务一般是在Service层,@Transactional放在service层
- @Query、 @Modifying、@Transactional的综合使用
网友评论