SpringDataJPA(二)——自定义Repository

编程

在上一篇 最基础JPA项目Demo的搭建 的基础上,写一个自定义Repository的Demo,仍是及其简单,注重流程。

一、定义一个自定义的Repository(泛型)接口,继承PagingAndSortingRepository,为了继承其分页和排序相关方法

@NoRepositoryBean

public 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

回到顶部