春ブーツ春データJPA紹介


春ブーツ春データJPA紹介

JPAは、Java Persistence API(JPA)春データJPA JPAは、私たちは簡単にデータにアクセスすることができます実現の一種であるが、彼は、標準のストレージAPIであるの略です。、慣例法によるDAO層インターフェイスよく書かれた命名規則ので、データベースのアクセスおよび操作のためのインタフェースの実装はありません。同時に、CRUDに加えて、というように複雑なクエリを並べ替え、ページングなどの機能の多くを提供しています。

春データJPAは、Hibernateのための二次包装として見ることができます。この記事では、春ブーツで春データJPAを使用する方法を説明するために具体的な例になります。

依存追加

私たちは、テストを容易にするために、我々はH2-メモリデータベースを追加し、次のように春データJPAは従属追加します:

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

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

エンティティBeanを追加します。

のは、エンティティBeanを作成してみましょう:

@Entity
@Data
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(nullable = false, unique = true)
    private String title;

    @Column(nullable = false)
    private String author;
}

ダオの作成

public interface BookRepository extends JpaRepository<Book, Long> {
    List<Book> findByTitle(String title);

    @Query("SELECT b FROM Book b WHERE LOWER(b.title) = LOWER(:title)")
    Book retrieveByTitle(@Param("title") String title);
}

インタフェースリポジトリを継承するすべてのダオの必要性は、リポジトリは空のインターフェースです。

@Indexed
public interface Repository<T, ID> {

}

あなたはいくつかの実装の一般的なデフォルトを使用する場合は、CrudRepository、PagingAndSortingRepositoryとJpaRepositoryを継承することができます。

上記の例では、JpaRepositoryを受け継いでいます。

上記の例では、タイトルで検索する方法を作成しました:

List<Book> findByTitle(String title);

私たちが達成するために自分自身を必要としないこの方法では、春データJPAは、私たちが達成するのに役立ちます。私たちは、検索...デベロッパーを使用することができ、読み...デベロッパーは、クエリ...デベロッパーは、当時エンティティによってある属性、クエリのフォーマットの定義によると... ...デベロッパーをカウントし、取得します。それに加えて、我々はまた、我々は次の例を挙げ、スプライスにメソッドを使用したりすることができます:

interface PersonRepository extends Repository<Person, Long> {

  List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);

  // Enables the distinct flag for the query
  List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
  List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);

  // Enabling ignoring case for an individual property
  List<Person> findByLastnameIgnoreCase(String lastname);
  // Enabling ignoring case for all suitable properties
  List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);

  // Enabling static ORDER BY for a query
  List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
  List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}

もちろん、ステッチ加工方法、我々はまた、SQLクエリをカスタマイズすることができます。

    @Query("SELECT b FROM Book b WHERE LOWER(b.title) = LOWER(:title)")
    Book retrieveByTitle(@Param("title") String title);

春データJPAへのカスタムクエリは、想像力のためのより多くの部屋を提供します。

春のデータ構成

春データJPAを使用するために、我々はまた、設定ファイルでスキャンするディレクトリを指定する必要があり、使用@EnableJpaRepositories注釈は、実装します:

@Configuration
@EnableJpaRepositories(basePackages = "com.flydean.repository")
public class PersistenceConfig {
}

また、設定ファイルの属性データソースを指定する必要があります。

spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa

テスト

上記のすべてで、我々は、データのわれわれの情報源をテストすることができます。

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {JpaApp.class})
public class BookRepositoryTest {

    @Autowired
    private BookRepository bookRepository;

    @Test
    @Transactional(readOnly=false)
    public void testBookRepository(){
        Book book = new Book();
        book.setTitle(randomAlphabetic(10));
        book.setAuthor(randomAlphabetic(15));

        bookRepository.save(book);

       bookRepository.findByTitle(book.getTitle()).forEach(e -> log.info(e.toString()));
       log.info(bookRepository.retrieveByTitle(book.getTitle()).toString());
    }
}

:例は、本明細書を参照することがhttps://github.com/ddean2009/learn-springboot2/tree/master/springboot-jpa

より多くのチュートリアルを参照してくださいflydeanさんのブログ

公開された113元の記事 ウォンの賞賛117 ビュー320 000 +

おすすめ

転載: blog.csdn.net/superfjj/article/details/104490203