Springアプリケーションの最初から最後まで3)-データベース操作


Spring Data JDBCというO/R Mapperでデータベース操作部を作成します.

作る部分はこの部分です

データベース接続


aplication.属性の設定


Spring Bootプロジェクトのアプリケーション.propertiesは、プリファレンスパラメータを実行するためのファイルです.
前の記事で作成したaccountdbに接続するには、設定する必要があります.src/main/resourcesapplication.propertiesファイルを開いて修正します.
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql 주소./accountdb
spring.datasource.username=ID
spring.datasource.password=PASSWORD
driver-class-nameの設定は同じです.urlはlocalhostに設定してもよいし、AWSのようなクラウドコンピューティングサービスのエンドポイントを設定してもよい.usernamepasswordを設定として入力します.

データベース操作処理の作成



O/R MapperはSpring Data JDBCを使用し、RepositoryImplはSpring Data JDBCによって自動的に作成されます.
したがって、このプロジェクトで直接記述する必要があるのはDomain ObjectおよびRepositoryである.

ドメインオブジェクトの作成


サービス処理に必要なリソースを実行します.
DBとしては、Entityと同じ言葉と言えるでしょう.
DB内の1行のテーブルに対応するクラス.src/main/java/からentityパッケージを追加し、Accountクラスを追加します.

Account.java
package com.example.account.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;

/**
 * account 테이블용 Entity
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Account {
    // 식별 ID
    @Id
    private Integer key;
    // 회원 id
    private String id;
    // 회원 이름
    private String name;
    // 회원 이메일 주소
    private String mail;
    // 회원 비밀번호
    private String password;
}
@Data構文はクラスを付与し、すべてのフィールドにgetter/setterにアクセスできます.@NoArgsConstructor操作自動生成基本生成器にクラスを付与@AllArgsConstructor操作により、クラスに与えられたコンストラクション関数(Constructor)が生成され、すべてのフィールドの初期化値が引数として取得される.@Idは、テーブル内のプライマリ・キーに対応するフィールドIDを提供する.

レポートの作成


Repositoryは、DB構成データ操作のみを定義するインタフェースです.src/main/javaからrepositoryパケットを追加し、AccountRepositoryインタフェースをパケットに追加します.

RepositoryImplの作成


Repositoryインタフェースでは、Spring DataはCrudRepositoryを継承し、RepositoryImplを生成する.CrudRepositoryの型パラメータは、Entity型Accountおよび@Idの説明を有するIntegerを順次指定する.
AccountRepository.java
package com.example.account.repository;

import com.example.account.entity.Account;
import org.springframework.data.repository.CrudRepository;

/**
 * Account 테이블의 RepositoryImpl
 */
public interface AccountRepository extends CrudRepository<Account, Integer> {
}
Spring Dataが提供するCurdRepositoryを継承することにより、CRUDを自動的にサポートする方法を使用することができる.
メソッドのタイプは次のとおりです.
CRUD Repositoryメソッドタイプ <Account, Integer>は、格納オブジェクトのオブジェクトタイプおよび格納オブジェクトのプライマリ・キー・タイプを指定する.

データベース操作処理の確認


SpringBootアプリケーション起動クラスAccountApplicationフィールドに、AccountRepository@Autowiredと入力し、AccountApplicationの動作状態を確認します.

登録処理の確認

src/main/java/AccountApplication.javaに追加:
AccountApplication.java
package com.example.account;

import com.example.account.entity.Account;
import com.example.account.repository.AccountRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AccountApplication {

    public static void main(String[] args) {
        SpringApplication.run(AccountApplication.class, args).getBean(AccountApplication.class).execute();
    }

    @Autowired
    AccountRepository repository;

    /**
     * 실행 메소드
     */

    private void execute() {
        // 등록처리
        setup();
    }

    /**
     * 2개의 계정 추가
     */
    private void setup() {
        // 엔티티 생성
        Account account1 = new Account(null, "aaaa", "가나다","[email protected]","11111");
        // 등록
        account1 = repository.save(account1);
        // 등록 확인
        System.out.println("등록된 데이터: " + account1);
        // 엔티티 생성
        Account account2 = new Account(null, "bbbb", "James","[email protected]","22222");
        // 등록
        account2 = repository.save(account2);
        // 등록 확인
        System.out.println("등록된 데이터: " + account2);
    }

}
@Autowired注入AccountRepository.
mainメソッドはexecuteメソッドを呼び出し、executeメソッドはsetupメソッドを呼び出します.
setupメソッドでCrudRepositoryのsaveメソッドを継承するように呼び出されます.
saveメソッドは、エンティティを格納するメソッドです.したがって、エンティティは空ではありませんが、エンティティが@Idの場合、自動的に反映され、INSERTクエリ文がSQLに投げ込まれます.
指定したエンティティをデータベースに保存します.
実行結果


SQL DBは、クエリ文を正常に実行することもできます.

すべての検索をチェック

AccountApplicaionクラスに以下のメソッドを追加
private void showList() {
        System.out.println("---전체 검색 시작---");
        // Repository를 사용하여 모든 내역을 얻는 결과
        Iterable<Account> accounts = repository.findAll();
        for (Account account : accounts) {
            System.out.println(account);
        }
    }
showListメソッドは、CrudRepositoryを継承した上で有効なfindAllメソッドを呼び出し、すべてのエンティティの値をIterable形式に変換して格納する.
それらをfor文の形式に出力する方法.
実行するために、AccountApplicaionのexecuteメソッドの値を変更することもできます.
    /**
     * 실행 메소드
     */

    private void execute() {
        // 등록처리
        //setup();
        showList();
    }
次に、次の値を出力します.

データを1つ取得

AccountApplicaionクラスに以下のメソッドを追加
    /**
     * 1건 데이터 얻기
     */
    private void showOne() {
        System.out.println("---1건의 데이터 얻기---");
        // Repository를 사용하여 1건의 데이터를 얻고 결과를 얻음
        // return값은 Optional
        Optional<Account> accountOptional =repository.findById(2);
        // 값 존재 확인
        if(accountOptional.isPresent()) {
            System.out.println(accountOptional.get());
        } else {
            System.out.println("해당 퀴즈가 없습니다.");
        }
        System.out.println("---1건 데이터 얻기 완료---");
    }
showOneメソッドは、CrudRepositoryを継承するfindByIdメソッドを呼び出すことによって、メソッドに与えられた値に対応するエンティティを得ることができる.
ここで、IDはマスターキーの2を超えている.
findByIdメソッドの戻り値はOptional(java.util.Optional)です
nullの値がある可能性があるので、オプションで値を入力できます.
OptionalメソッドisPresent()で値が含まれているかどうかをチェックし、getメソッドでパッケージされた値を取得します.
値が存在しない場合は、運転時異常-NoSuchElementExceptionを放出します.
同様に、AccountApplicaionのexecuteメソッドを変更します.
    /**
     * 실행 메소드
     */

    private void execute() {
        // 등록처리
        //setup();
        //showList();
        showOne();
    }
次の値を出力します.

更新プロセスの実行

AccountApplicaionクラスに以下のメソッドを追加
    /**
     * 업데이트 처리
     */
    private void updateAccount() {
        System.out.println("--- 업데이트 처리 시작 ---");
        // 변경 엔티티 설정
        Account account1 = new Account(1, "abab","가가가", "[email protected]", "1212");
        // 업데이트 실행
        account1 = repository.save(account1);
        // 업데이트 확인
        System.out.println("업데이트 된 데이터: " + account1);
        System.out.println("--- 업데이트 처리 완료 ---");
    }
}
updateAccountメソッドは、CrudRepository継承後に使用可能なsaveメソッドを呼び出し、指定したエンティティをデータベースに格納します.
前にsaveについて説明しましたが、省略してください.AccountApplicaionのexecuteメソッド図を変更
    /**
     * 실행 메소드
     */

    private void execute() {
        // 등록처리
        //setup();
        //showList();
        //showOne();
        updateAccount();
    }
実行結果


正常に動作していることを示します.

削除の実行

AccountApplicaionクラスに以下のメソッドを追加
    /**
     * 삭제
     */
    private void deleteAcoount() {
        System.out.println("--- 삭제 처리 실행 ---");
        repository.deleteById(2);
        System.out.println("--- 삭제 처리 완료 ---");
    }
}
継承されたCrudRepositoryのdeleteByIdメソッドの使用
ID 2のエンティティが削除されます.AccountApplicaionクラスexecuteメソッドの変更
	/**
     * 실행 메소드
     */
    private void execute() {
        // 등록처리
        //setup();
        //showList();
        //showOne();
        //updateAccount();
        deleteAcoount();
    }
実行結果


正常に動作.