[SpringbootとJPA 1を活用]2プロジェクトの環境設定


目次

  • プロジェクトの作成
  • ライブラリ概要
  • Viewプリファレンス->レンダリング用
  • H 2データベースインストール
  • JPAおよびDB設定、動作チェック
  • 1.プロジェクトの作成


  • Springイニシエータ(start.spring.io)
  • gradle
  • java11
  • springboot 2.5.4
  • groupId: jpabook
  • artifactId: jpashop

  • 使用機能:web、thymeleaf、jpa、h 2、lombok
  • Spring Web Starter:Webアプリケーションの開発に必要
  • thymeleaf:モダンサーバ側Javaテンプレートエンジン
  • Spring Data JPA:Spring Data and Hibernate
  • Java Persistence APIを使用
  • h2:埋め込みデータベース
  • lombok:簡単な音声プレゼンテーションで重複コードを減らす
  • プロジェクトからIntelliJのImportまたはOpenにダウンロード
  • プロジェクトを実行する場合、Tomcatが8080 portで実行されていることを示すログは少ない
  • IntelliJ > Preference > Plugins > Lombok
  • インストール
  • rombook後、次の手順が完了していることを確認してください->有効
  • IntelliJ > Preference > Build, Execution, Deployment > Compiler > Annotation Processors
  • Enable annotation処理選択
  • 2.リポジトリの表示


    依存関係の表示方法


    1)プロジェクトで端末を開き、入力する
    $ ./gradlew dependencies
    2)IntelliJの右側のGradleタブで依存関係を検証する
    spring-boot-starter-web 아래엔 embedded된 tomcat과 webmvc가 있음.

    ネコ匹


    Javaを使用するWebアプリケーションの異なる仕様(Spec)に合致し、JSP、HTMLファイルからなる.warファイルを配備するエンジン
    Spring Bootに内蔵され、Javaを使用してWebファイルを配備するエンジン?
  • spring-boot-starter-data-jpaの下にはcoreaopjdbc(接続プール)、HikariCPhibernate(logginglogback-印刷ログのインタフェースの集合)があります.
  • Testslf4jは、spring-boot-starter-testおよびjunitmockitoなどを含む.
  • コアライブラリ

  • Spring MVC
  • Spring ORM
  • JPA,HyperNate
  • SpringデータJPA
  • その他のライブラリ

  • H 2データベースクライアント->ダウンロードしたh 2バージョンとクライアントh 2バージョンを併用することを推奨
  • 接続プール(起動デフォルトはHikariCP)
  • WEB (thymeleaf)
  • 記録SLF 4 J&LobNack
  • テスト
  • 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

  • ナチュラルテンプレート:htmlタグをサポート
  • 2.xバージョンの問題がありますがxバージョンでパフォーマンスと効率性が向上
  • Spring boot thymeleafからviewNameへのマッピング

  • resources : templates/+ {ViewName} + .html
  • @Controller
    public class HelloController {
        // hello url 오면 이 컨트롤러 호출
        @GetMapping("hello")
        public String hello(Model model){
            model.addAttribute("data", "hello!");
            return "hello";
        }
    }
  • Controllerassertjにデータをロードし、ビュー→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>
  • 純htmlレンダリング時「こんにちは」出力、サーバ側レンダリング時こんにちはreturn "ViewName"出力.
  • アプリケーションの実行->http://localhost:8080/hello入力->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を設定し、動作を確認する

  • Spring公式ドキュメント閲覧
  • https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/

    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_sqlOptions HyperNateを実行するSQLをloggerで残します.
  • 注)アプリケーション.ymlのようなymlファイルは、2つのスペースを使用して階層を作成します.

    アクションの確認

  • 会員実体
  • @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.SQLAnotationはテスト後にロールバックされるため、保存されたデータはありません.@Transactional操作を追加するとロールバックせずにコミットされ、テスト内容はDBに格納されます.
        @Test
        @Transactional
        @Rollback(false)
        public void save() {
    保存されているのはクエリーと同じですか?@Rollback(false)2つのオブジェクトの結果は同じです.
    →同じトランザクション内でデータをクエリーおよび格納する場合は、永続性コンテキストは同じです.同じ永続性コンテキストでは、Assertions.assertThat(findMember).isEqualTo(member);(識別子)の値が同じ場合、同じエンティティとして認識されます.メインキャッシュに格納されます.

    クエリー・パラメータのログを残す

  • id
  • クエリに「?」SQL実行パラメータをログとして保持します.
    insert
    into
    member
    (username, id)
    values
    (?, ?)
    : binding parameter [1] as [VARCHAR] - [member1]
  • https://github.com/gavlyukovskiy/spring-boot-data-source-decorator
  • implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
    注:クエリー・パラメータをログの外部ライブラリとして残してシステム・リソースを使用し、開発段階で簡単に使用できます.ただし、オペレーティングシステムに適用する場合は、パフォーマンステストと使用が望ましい.
  • 結果
  • insert into member (username, id) values (?, ?)
    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); クエリーデータが表示されます.