Spring Data之春D(1)

Spring Data之春D(1)

开心一笑

你捂错地方了

某日,体育课中途,洗手间解决个人问题。结果着急误进男厕。看到一男生正在小便池嘘嘘,俺当时就蒙了,一秒过后正准备悄悄撤退,结果被发现,晕死。只见那男生大叫一声“流氓,非礼”,然后双手捂胸。后来,后来俺说了一句自己都觉得不可思议的话:“同学,你捂错地方了……”

自我介绍

我是Sping Data,是程序员的春天,因为我提供很多接口给开发人员,减少程序员重复的写CRUD和分页等方法,你们也可以叫我春D,或者春帝,因为我很酷

我的特长

在Spring Data模块中定义依赖:

<dependencies>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
  </dependency>
<dependencies>

春D(Spring Data)帮我们封装了基本的增删改查,而且还提供很多便利的查询方法,继续看吧!

春D提供的最重要的接口是Repository,CrudRepository实现这接口,先看看CrudRepository这鬼东西:

//T表示实体类,ID则是实体中id的类型
public interface CrudRepository<T, ID extends Serializable>
    extends Repository<T, ID> {

    <S extends T> S save(S var1);

    <S extends T> Iterable<S> save(Iterable<S> var1);

    T findOne(ID var1);

    boolean exists(ID var1);

    Iterable<T> findAll();

    Iterable<T> findAll(Iterable<ID> var1);

    long count();

    void delete(ID var1);

    void delete(T var1);

    void delete(Iterable<? extends T> var1);

    void deleteAll();
}

CrudRepository如其名,封装了基本的增删改查接口

再看看PagingAndSortingRepository,他是CrudRepository的儿子,具体源码如下:

public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
    Iterable<T> findAll(Sort var1);

    Page<T> findAll(Pageable var1);
}

eg:访问第二页,每页20条数据,可以这样:

PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(new PageRequest(1, 20));

另外对于查询方法,删除和级数查询可以用如下的:

eg:

public interface UserRepository extends CrudRepository<User, Long> {
    //查询lastname为某某的数量
    Long countByLastname(String lastname);
}

eg:

public interface UserRepository extends CrudRepository<User, Long> {
  //删除lastname为某某的记录
  Long deleteByLastname(String lastname);
  //删除lastname为某某的记录,返回删除的所有记录
  List<User> removeByLastname(String lastname);

}

定义自己的repository,需要下面4个步骤:

1.声明自己的一个接口,继承Repository 或者其他一个继承Repository的子类:

interface PersonRepository extends Repository<Person, Long> { … }

2.在接口上定义查询方法:

interface PersonRepository extends Repository<Person, Long> {
  List<Person> findByLastname(String lastname);
}

3.设置spring去为这些自定义的Repository创建代理类:

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@EnableJpaRepositories
class Config {}

或者XML配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jpa="http://www.springframework.org/schema/data/jpa"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/data/jpa
     http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

   <jpa:repositories base-package="com.acme.repositories"/>

</beans>

4.获得自定义的repository实例:

public class SomeClient {

  @Autowired
  private PersonRepository repository;

  public void doSomething() {
    List<Person> persons = repository.findByLastname("Matthews");
  }
}

根据方法名创建查询:
public interface PersonRepository extends Repository

原文

http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/#dependencies.train-names

你可能感兴趣的:(spring)