記事ディレクトリ
この章の内容は次のとおりです。
- SpringのJdbcTemplateを使用します。
- SimpleJdbcTemplateを使用してデータを挿入します。
- SpringデータでJPAリポジトリーを宣言します。
2.春のデータ
Spring Dataプロジェクトには、次のプロジェクトが含まれます。
- 春のデータJPA、これはリレーショナルデータベース用です。
- 春のデータMongoDB、これはMongoドキュメントデータベース用です。
- 春のデータNeo4j、これはNeo4jグラフデータベース用です。
- 春のデータCassandra、これはCassandraデータベース用です。
2.1 Spring Data JPAをプロジェクトに追加する
次の依存関係を追加します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
デフォルトはHibernateです。他の実装に変更する必要がある場合は、以下を実行できます。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<artifactId>hibernate-entitymanager</artifactId>
<groupId>org.hibernate</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.2</version>
</dependency>
2.2エンティティのステートメント
package tacos;
import javax.persistence.Entity;
import javax.persistence.Id;
import lombok.AccessLevel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
@Data
@RequiredArgsConstructor
@NoArgsConstructor(access=AccessLevel.PRIVATE, force=true)
@Entity
public class Ingredient {
@Id
private final String id;
private final String name;
private final Type type;
public static enum Type {
WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
}
}
@Entityと@Idを追加します。
アノテーション@ NoArgsConstructor、JPAは2次メソッドを使用したくないため、パラメーターなしのコンストラクターを必要とするため、privateに設定します。
2.3 JPAリポジトリを宣言する
CrudRepositoryを継承するだけです。
package tacos.data;
import org.springframework.data.repository.CrudRepository;
import tacos.Ingredient;
public interface IngredientRepository extends CrudRepository<Ingredient, String> {
}
2.4カスタムJPAリポジトリ
例:
List<Order> findByDeliveryZip(String deliveryZip);
Spring Dataは、ドメイン固有言語(DSL)メカニズムを使用してメソッドシグネチャを解決します。
List<Order> readOrdersByDeliveryZipAndPlacedAtBetween(
String deliveryZip, Date startDate, Date endDate);
次の例もあり
ます。complexは@Queryを使用できます。
@Query("Order o where o.deliveryCity='Seattle'")
List<Order> readOrdersDeliveredInSeattle();