SpringDataJPA(二)——自定义Repository
在上一篇 最基础JPA项目Demo的搭建 的基础上,写一个自定义Repository的Demo,仍是及其简单,注重流程。
一、定义一个自定义的Repository(泛型)接口,继承PagingAndSortingRepository,为了继承其分页和排序相关方法
@NoRepositoryBeanpublic interface CustomRepository<T,ID extends Serializable> extends PagingAndSortingRepository<T,ID> {
void add(T t);
}
二、实现这个接口
public class CustomRepositoryImpl<T,ID extends Serializable> extends SimpleJpaRepository<T,ID> implements CustomRepository<T, ID> {
private EntityManager entityManager;
public CustomRepositoryImpl(Class<T> domainClass, EntityManager entityManager) {
super(domainClass, entityManager);
this.entityManager = entityManager;
}
@Override
public void add(T t) {
if(null != t){
entityManager.persist(t);
entityManager.flush();
}
}
}
其中add()方法是我们的定制方法,这里可以根据实际需求去定义,重点在于EntityManager的使用,关于EntityManager的各种方法,网络上已有各种介绍。EntityManager的一个亮点就是,我们可以选择无视要操作的领域对象的实际类型而进行操作,其中有涉及反射机制。
三、然后让PersonRepository接口,实现CustomRepository这个泛型接口,后面就可以直接通过PersonRepository调用我们自定义的Repository中的方法。
public interface PersonRepository extends JpaRepository<Person,Long>,CustomRepository<Person,Long> {}
四、使用,直接通过PersonRepository调用即可。
@Transactional(readOnly=false)@RequestMapping(value = "/add")
public void add(String name,Integer age,String address){
personRepository.add(new Person(null,name,age,address));
}
说明:目前项目的配置及其简单,没有做事务处理。如果没有@Transactional(readOnly=false)这个注解,会报下面的错误:
五、运行:
以上是 SpringDataJPA(二)——自定义Repository 的全部内容, 来源链接: utcz.com/z/515499.html