[SpringbootとJPA 1を活用]2プロジェクトの環境設定
20837 ワード
目次
1.プロジェクトの作成
Springイニシエータ(start.spring.io)
使用機能:web、thymeleaf、jpa、h 2、lombok
Spring Web Starter
:Webアプリケーションの開発に必要thymeleaf
:モダンサーバ側JavaテンプレートエンジンSpring Data JPA
:Spring Data and Hibernateh2
:埋め込みデータベースlombok
:簡単な音声プレゼンテーションで重複コードを減らす2.リポジトリの表示
依存関係の表示方法
1)プロジェクトで端末を開き、入力する$ ./gradlew dependencies
2)IntelliJの右側のGradleタブで依存関係を検証するspring-boot-starter-web 아래엔 embedded된 tomcat과 webmvc가 있음.
ネコ匹
Javaを使用するWebアプリケーションの異なる仕様(Spec)に合致し、JSP、HTMLファイルからなる.warファイルを配備するエンジン
Spring Bootに内蔵され、Javaを使用してWebファイルを配備するエンジン?
$ ./gradlew dependencies
spring-boot-starter-web 아래엔 embedded된 tomcat과 webmvc가 있음.
spring-boot-starter-data-jpa
の下にはcore
、aop
、jdbc
(接続プール)、HikariCP
、hibernate
(logging
、logback
-印刷ログのインタフェースの集合)があります.slf4j
は、spring-boot-starter-test
およびjunit
、mockito
などを含む.コアライブラリ
その他のライブラリ
3.Viewプリファレンス
Thymeleaf公式サイト:https://www.thymeleaf.org/
スプリング公式チュートリアル:https://spring.io/guides/gs/serving-web-content/
スプリングスタートメニュー:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-template-engines
小贴士:https://spring.io/guides-検索に必要なものはすべて出てきます!基礎に沿って歩きたい時に探していたガイドさん
thymeleaf
Spring boot thymeleafからviewNameへのマッピング
@Controller
public class HelloController {
// hello url 오면 이 컨트롤러 호출
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "hello!");
return "hello";
}
}
assertj
にデータをロードし、ビュー→Model
(.html省略)Thymeleafテンプレートのエンジン動作を確認します(hello.html)-サーバー側のレンダリング
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
return "ViewName"
出力.data
検証データ静的ページインデックス。htmlを作成します。こんにちは。hello!
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
リファレンス
build.gradeに入り、次のライブラリを追加します.
spring-boot-devtoolsライブラリを追加することで、htmlファイルをコンパイルするだけでサーバを再起動せずにビューファイルを変更できます.
implementation 'org.springframework.boot:spring-boot-devtools'
htmlファイルのコンパイル方法:メニュー構築→復元4.H 2データベースのインストール
プリインストール完了
ここにh 2をインストールします.
C:\Program Files (x86)\H2\bin
h 2 windowsデプロイメントファイルを実行すると、自動的にWebにアップロードされます.
前のipがlocalhost:8082/loginに変更された場合.jsp?jessionid~~~
H 2データベース
開発やテストに便利なDB、Web画面を提供
static/index.html
(少なくとも1回、セッションキーは変わらない)jdbc:h2:~/jpashop
検証ファイル生成~/jpashop.mv.db
このように接続5.JPAとDBを設定し、動作を確認する
main/resources/application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop;MVCC=TRUE
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
# show_sql: true
format_sql: true
logging:
level:
org.hibernate.SQL: debug
jdbc:h2:tcp://localhost/~/jpashop
オプションアプリケーションの実行時にテーブルを削除し、テーブルを再生成ddl-auto: create
オプションはシステムです.OutにHyperNateを実行するSQLを残します.->書き込みなしでログのみshow_sql
Options HyperNateを実行するSQLをloggerで残します.アクションの確認
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
@RunWith(SpringRunner.class) // junit에게 스프링관련테스트할것을 알림
@SpringBootTest
class MemberRepositoryTest {
@Autowired MemberRepository memberRepository;
@Test
public void save() {
// given
Member member = new Member();
member.setUsername("member1");
// when
Long savedId = memberRepository.save(member);
Member findMember = memberRepository.findById(savedId);
// then
Assertions.assertThat(savedId).isEqualTo(findMember.getId());
Assertions.assertThat(member.getUsername()).isEqualTo(findMember.getUsername());
}
}
テスト実行時エラーNo EntityManager with actual transaction available for current thread
→EntityManagerによるすべてのデータ変更は常にトランザクションで行う必要があります.
→(Repositoryやメソッドで@Transactionalを掛けてもいいですが)、先にTestに追加できます.
@Test
@Transactional
public void save() {
テスト成功H 2データベースにメンバーテーブルが作成されていることがわかります.
org.hibernate.SQL
Anotationはテスト後にロールバックされるため、保存されたデータはありません.@Transactional
操作を追加するとロールバックせずにコミットされ、テスト内容はDBに格納されます. @Test
@Transactional
@Rollback(false)
public void save() {
保存されているのはクエリーと同じですか?@Rollback(false)
2つのオブジェクトの結果は同じです.→同じトランザクション内でデータをクエリーおよび格納する場合は、永続性コンテキストは同じです.同じ永続性コンテキストでは、
Assertions.assertThat(findMember).isEqualTo(member);
(識別子)の値が同じ場合、同じエンティティとして認識されます.メインキャッシュに格納されます.クエリー・パラメータのログを残す
id
insert
into
member
(username, id)
values
(?, ?)
: binding parameter [1] as [VARCHAR] - [member1]
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
注:クエリー・パラメータをログの外部ライブラリとして残してシステム・リソースを使用し、開発段階で簡単に使用できます.ただし、オペレーティングシステムに適用する場合は、パフォーマンステストと使用が望ましい.insert into member (username, id) values ('member1', 1);
2021-09-20 22:04:32.890 INFO 1464 --- [ Test worker] p6spy : #1632143072890 | took 1ms | commit | connection 3| url jdbc:h2:tcp://localhost/~/jpashop
insert into member (username, id) values ('member1', 1); クエリーデータが表示されます.
Reference
この問題について([SpringbootとJPA 1を活用]2プロジェクトの環境設定), 我々は、より多くの情報をここで見つけました https://velog.io/@redcarrot01/Springboot와-JPA-활용1-2.-프로젝트-환경설정テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol