記事のディレクトリ
春ブーツ春データ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さんのブログ