[SpringBoot]V-RIS開発ログ(2)-MySQLバインドを使用し、Spring Data JPAを使用して会員管理システムと誤り訂正を簡略化


Spring BootとMySQLの統合📡


まずspringプロジェクトを作成し、次のdependencyを構築してMySQLと連携します.gradeに追加します.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java'
その後の申請.次のコードをpropertiesに追加します.
server.address=localhost
server.port=8080 #서버는 8080 port를 이용

#db_name에 로컬 DB명을 기입
spring.datasource.url=jdbc:mysql://localhost:3306/db_name?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root # 사용자 아이디
spring.datasource.password=1234 # 사용자 비밀번호
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# mysql 연동
spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

#DB의 고유 기능 사용 가능
spring.jpa.hibernate.ddl-auto=create

logging.level.org.hibernate=info

# Hibernate에서의 SQL문 확인 가능
spring.jpa.properties.hibernate.show_sql=true
# Hibernate에서의 SQL문의 가독성을 증가
spring.jpa.properties.hibernate.format_sql=true

spring.jpa.properties.hibernate.use_sql_comments=true

spring.jpa.hibernate.ddl-auto=[ ]

  • create:既存テーブルを削除して[DROP+CREATE]を再作成
  • create-drop:CREATE属性に追加したアプリケーション終了時に生成したDDLを削除[DROP+CREAT+DROP]
  • update:データベーステーブルとエンティティマッピング情報を比較し、変更のみ修正[テーブルがない場合はCREATE]
  • validate:データベーステーブルとエンティティマッピング情報を比較し、差異がある場合は警告を残してアプリケーションを実行しない
  • none:自動生成機能無効
  • IntelliJのデータベースに接続しているかどうか見てみましょう.

    前述したように、接続情報を入力すると、Test ConnectionにSuccededが表示され、接続が良好であることを示します.

    Spring Data JPAを使用してメンバーを管理する📃


    まず、DBに格納されているテーブルを作成します.sqlコードで直接生成することもできますが、筆者はUserクラスで@Entityを使用してUserクラスとテーブルをマッピングしてみました.

    User

    import lombok.AccessLevel;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import javax.persistence.*;
    import javax.validation.constraints.Past;
    import javax.validation.constraints.Size;
    import java.util.Date;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    @Entity(name="user")
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer userIdx;
    
        @Column(name = "userId")
        private String userId;
    
        @Column(name = "userPwd")
        private String userPwd;
    
        @Column(name = "email")
        private String email;
    
        @Column(name = "veganLevel")
        private Integer veganLevel;
    }
    @Entityを使用して、各メンバー変数をtableの列に関連付けます.
    以下はuserIdxで使用される構文です.
  • @Id:Primary Keyとして登録
  • @GeneratedValue:自動生成用の値は、MySQLのAUTO INCREMENTメソッドを使用する
  • UserRepository


    Spring Data JPAは、JPAの実装チェーンHibernateを使用するための複数のAPIを提供し、そのうちの1つはJPA Repositoryである.
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.repository.query.Param;
    import org.springframework.stereotype.Repository;
    
    import java.util.Optional;
    
    @Repository
    public interface UserRepository extends JpaRepository<User, Integer> {
    
    }
    Jpa Repositoryを継承するだけで、もちろんインタフェースに他のメソッドを作成することもできます.@Repositoryを追加し、コントローラに依存性注入を可能にします.
    Jpa Repositoryを継承することで、sqlを必要とせずにCRUD操作を行うことができます.

    UserJpaController

    import lombok.RequiredArgsConstructor;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
    
    import javax.validation.Valid;
    import java.net.URI;
    import java.util.List;
    import java.util.Optional;
    
    @RestController
    @RequiredArgsConstructor
    @RequestMapping("/v1/vegan-res")
    public class UserJpaController {
    
        @Autowired
        private UserRepository userRepository;
    
        // 전체 사용자 조회
        @GetMapping("/users")
        public List<User> retrieveAllUsers() {
            return userRepository.findAll();
        }
    
    
        // 개별 사용자 조회
        @GetMapping("/users/{id}")
        public User retrieveUser(@PathVariable int id){
            Optional<User> user = userRepository.findById(id);
    
            if(!user.isPresent()){
                throw new UserNotFoundException(String.format("ID[%s] not found", id));
            }
    
            return user.get(); // .get()은 Optional에서 가져옴
        }
    
        // 사용자 추가(회원 가입)
        @PostMapping("/users")
        public ResponseEntity<User> createUser(@Valid @RequestBody User user)
        {
            User savedUser = userRepository.save(user);
    
            URI location = ServletUriComponentsBuilder.fromCurrentRequest()
                    .path("/{id}")
                    .buildAndExpand(savedUser.getUserIdx()) 
                    .toUri(); // Uri화 함
    
            return ResponseEntity.created(location).build();
        }
        // 회원 정보 수정
        @PutMapping("/users/{id}")
        public ResponseEntity<User> updateUser(@PathVariable int id, @RequestBody User user) {
            Optional<User> optionalUser = userRepository.findById(id);
    
            if (!optionalUser.isPresent()) {
                throw new UserNotFoundException(String.format("ID[%s} not found", id));
            }
    
            User storedUser = optionalUser.get();
            ///수정할 정보 입력
            storedUser.setUserId(user.getUserId());
            storedUser.setUserPwd(user.getUserPwd());
            storedUser.setVeganLevel(user.getVeganLevel());
            storedUser.setEmail(user.getEmail());
    
            User updatedUser = userRepository.save(storedUser);
    
            URI location = ServletUriComponentsBuilder.fromCurrentRequest()
                    .path("/{id}")
                    .buildAndExpand(updatedUser.getUserIdx())
                    .toUri();
    
            return ResponseEntity.created(location).build();
        }
        //회원 탈퇴
        @DeleteMapping("/users/{id}")
        public void deleteUser(@PathVariable int id) {
            userRepository.deleteById(id);
        }
    }
    これで簡単な会員管理に必要なCRUD操作のAPIが実現!!

    PostManによるテスト


    ユーザー情報の作成(create)



    ユーザ情報照会(read)



    ユーザー情報の変更(update)



    ユーザー情報の削除(delete)



    最終結果



    見つからない404 notfoundを削除しました!

    エラーの修正



    Domain、Controller、Repositoryを作成して実行しようとしたが、上記の写真などのエラーが常に発生し、独自に解決できないため、チームメンバーの助けを得た.理由は.
    spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
    application.これはpropertiesに追加されたこの行のコードのため、、、、いつもControllerでレポートが見つかりません.