SpringBootでのJPA統合PostgreSql(詳細)
23818 ワード
SpringBootでのJPA統合PostgreSql(詳細)
JPA(Java Persistence API)とは
Spring Data JPA, part of the larger Spring Data family, makes it easy to easily implement JPA based repositories. This module deals with enhanced support for JPA based data access layers. It makes it easier to build Spring-powered applications that use data access technologies.
Implementing a data access layer of an application has been cumbersome for quite a while. Too much boilerplate code has to be written to execute simple queries as well as perform pagination, and auditing. Spring Data JPA aims to significantly improve the implementation of data access layers by reducing the effort to the amount that’s actually needed. As a developer you write your repository interfaces, including custom finder methods, and Spring will provide the implementation automatically.
Features Sophisticated support to build repositories based on Spring and JPA Support for Querydsl predicates and thus type-safe JPA queries Transparent auditing of domain class Pagination support, dynamic query execution, ability to integrate custom data access code Validation of Support for XML based entity mapping JavaConfig based repository configuration by introducing
国内説
JPAとは、Java Persistence API、すなわちJavaの永続化仕様を指し、当初はJSR-220の一部として扱われていた.JPAの提案は、主にJava EEとJava SEの応用開発を簡略化し、当時のいくつかの異なるORM技術を統一するためである.一般的に、仕様は動作のルール、すなわちインタフェースを定義しているだけで、私たちがよく知っているHibernateはJPAの実装(Provider)です.
JPAは何を定義していますか.大体次のようなものがあります. ORMマッピングメタデータは、オブジェクトをテーブル、フィールドに関連付けるための である.はAPIを操作し、すなわち、追加削除調査を完了する一連のインタフェース である. JPQLクエリー言語は、移植可能なオブジェクト向けクエリー式 を実現する.
PostgreSQLの概要
PostGreSQLは強力なオープンソースオブジェクト関係データベース管理システム(ORDBMS)であり、世界で最も先進的なオープンソース関係型データベースと称され、15年以上にわたる積極的な開発と絶えず改善を経て、PostGreSQLは信頼性、安定性、データ整合性などで大きな向上を遂げた.現在最も流行しているMySQLと比較して、PostGreSQLはより柔軟で、より高度な互換性のある標準的な特性を持っています.また、PostGreSQLはMITオープンソースプロトコルに基づいており、その開放性が極めて高く、これも各クラウドコンピューティングの大きなTの主なRDSデータベースとなっている根本的な原因である.
JPAでのPostgreSQLの使用
一、依存パッケージの追加
Spring Boot MavnプロジェクトPom.xmlファイルに依存パッケージを追加
二、PostgreSQLとjpaの配置
アプリケーションでpropertiesファイルには、次のように追加されます.
注意: yourdatabase,yourusername,yourpasswordなどの情報が正しく構成されているかどうか. spring.jpa.hibernate.ddl-autoはupdateとして指定され、フレームワークがテーブル構造 を自動的に作成または更新します.
三、Entityの定義
注意:データベースに独自に作成したネストschemaがある場合は、Tableプロパティに@Table(name=「bookshelf」、schema=「yourschema」) を明記します. bookNameという書き方は、データベースにこのデータ要素がない場合、book_として作成されます.name
四、repositoryの定義
注意:**@Queryに*号**がある場合は、末尾にnativeQuery=true を付ける
五、サービスの定義
ユニットテスト
本人のテスト結果は以下の通りです(データは自分がデータベースに追加した2つのデータです):
JPA(Java Persistence API)とは
Spring Data JPA, part of the larger Spring Data family, makes it easy to easily implement JPA based repositories. This module deals with enhanced support for JPA based data access layers. It makes it easier to build Spring-powered applications that use data access technologies.
Implementing a data access layer of an application has been cumbersome for quite a while. Too much boilerplate code has to be written to execute simple queries as well as perform pagination, and auditing. Spring Data JPA aims to significantly improve the implementation of data access layers by reducing the effort to the amount that’s actually needed. As a developer you write your repository interfaces, including custom finder methods, and Spring will provide the implementation automatically.
Features
@Query
annotated queries at bootstrap time @EnableJpaRepositories
. 国内説
JPAとは、Java Persistence API、すなわちJavaの永続化仕様を指し、当初はJSR-220の一部として扱われていた.JPAの提案は、主にJava EEとJava SEの応用開発を簡略化し、当時のいくつかの異なるORM技術を統一するためである.一般的に、仕様は動作のルール、すなわちインタフェースを定義しているだけで、私たちがよく知っているHibernateはJPAの実装(Provider)です.
JPAは何を定義していますか.大体次のようなものがあります.
PostgreSQLの概要
PostGreSQLは強力なオープンソースオブジェクト関係データベース管理システム(ORDBMS)であり、世界で最も先進的なオープンソース関係型データベースと称され、15年以上にわたる積極的な開発と絶えず改善を経て、PostGreSQLは信頼性、安定性、データ整合性などで大きな向上を遂げた.現在最も流行しているMySQLと比較して、PostGreSQLはより柔軟で、より高度な互換性のある標準的な特性を持っています.また、PostGreSQLはMITオープンソースプロトコルに基づいており、その開放性が極めて高く、これも各クラウドコンピューティングの大きなTの主なRDSデータベースとなっている根本的な原因である.
JPAでのPostgreSQLの使用
一、依存パッケージの追加
Spring Boot MavnプロジェクトPom.xmlファイルに依存パッケージを追加
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-jpaartifactId>
dependency>
<dependency>
<groupId>org.postgresqlgroupId>
<artifactId>postgresqlartifactId>
dependency>
二、PostgreSQLとjpaの配置
アプリケーションでpropertiesファイルには、次のように追加されます.
#
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/yourdatabase
spring.datasource.username=yourusername
spring.datasource.password=yourpassword
spring.jpa.show-sql=true
#JPA
spring.jpa.database=postgresql
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL9Dialect
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
注意:
三、Entityの定義
package com.book.entity;
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
@Table(name = "bookshelf")
public class BookshelfItem {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(name = "bookName",nullable = false)
private String bookName;
@Column(name = "describe")
private String describe;
@Column(name = "detail")
private String detail;
public String ToString()
{
return bookName + "-" + describe;
}
}
注意:
四、repositoryの定義
package com.book.repository;
import com.book.entity.BookshelfItem;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface BookshelfRepository extends JpaRepository<BookshelfItem,Integer> {
@Query(value = "select * from bookshelf",nativeQuery = true)
List<BookshelfItem> GetAllBookData();
@Query(value = "select * from bookshelf where book_name = :bookName",nativeQuery = true)
List<BookshelfItem> GetBooksByName(@Param("bookName") String bookName);
}
注意:
五、サービスの定義
package com.book.service;
import com.book.entity.BookshelfItem;
import com.book.repository.BookshelfRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookshelfService {
@Autowired
private BookshelfRepository bookshelfRepository;
public List<BookshelfItem> GetAll()
{
return bookshelfRepository.GetAllBookData();
}
public List<BookshelfItem> GetNyBookname(String bookName)
{
return bookshelfRepository.GetBooksByName(bookName);
}
}
ユニットテスト
package com.book;
import com.book.entity.BookshelfItem;
import com.book.service.BookshelfService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class BookApplicationTests {
@Autowired
BookshelfService bookshelfService;
@Test
public void contextLoads() {
System.out.println("Get book All");
List<BookshelfItem> temp = bookshelfService.GetAll();
for (int i = 0; i < temp.size(); i++) {
BookshelfItem item = temp.get(i);
System.out.println(item.toString());
}
System.out.println("Get book by Name");
temp = bookshelfService.GetNyBookname("boo1");
for (int i = 0; i < temp.size(); i++) {
BookshelfItem item = temp.get(i);
System.out.println(item.toString());
}
}
}
本人のテスト結果は以下の通りです(データは自分がデータベースに追加した2つのデータです):
2019-10-08 17:01:07.646 INFO 4276 --- [ main] com.book.BookApplicationTests : Started BookApplicationTests in 4.878 seconds (JVM running for 5.5)
Get book All
Hibernate: select * from bookshelf
BookshelfItem(id=1, bookName=boo1, describe=sdfsad, detail=sdfgdg)
BookshelfItem(id=2, bookName=boo2, describe=jkjkjk, detail=aaaaaa)
Get book by Name
Hibernate: select * from bookshelf where book_name = ?
BookshelfItem(id=1, bookName=boo1, describe=sdfsad, detail=sdfgdg)
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.406 s - in com.book.BookApplicationTests