才开始接触springDataJpa,遇到不少坑,总结一下,希望能够帮助到大家。
一般我们使用Repository进行数据库操作,只需要创建接口类,继承JPA的CrudRepository接口就可以了,需要分页的话继承PagingAndSortingRepository接口。不过,难免有一些复杂的数据库操作,需要自己创建sql语句,不过,JPA还为我们提供了@Query注解。但是,如果sql语句是动态进行拼接的,通过@Query注解也没有办法(@Query的value必须是常量)。这时候,就需要我们自己去实现方法了。
这个实现和一般的类继承实现是有不同的,需要单独创建一个接口,用来对repository接口进行扩展,并创建repository进行实现。
贴代码:
1.repository接口, 添加继承的自定义接口
@Repository
public interface MyRepository
extends PagingAndSortingRepository<ProgramInfoEntity, Long>,
CustomRepository{
}
2.自定义扩展接口
public interface CustomRepository {
int update(int status, Set<Long> ids, Long count);
}
3.对扩展进行实现
public class MyRepositoryImpl implements CustomRepository {
@PersistenceContext
private EntityManager entityManager;
@Override
@Modifying
public int update(int status, Set<Long> ids, Long count) {
Query query = entityManager.createQuery(" sql 语句");
query.setParameter("status", status);
return query.executeUpdate();
}
}
注意:实现类的名称必须是要扩展的接口名+impl,spring会默认进行装载。可以通过@EnableJpaRepositories(repositoryImplementationPostfix="Custom")来更改具体实现的后缀。
网友评论