[SpringBoot]V-RIS開発ログ(2)-MySQLバインドを使用し、Spring Data JPAを使用して会員管理システムと誤り訂正を簡略化
7949 ワード
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=[ ]
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java'
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
前述したように、接続情報を入力すると、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で使用される構文です.
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;
}
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でレポートが見つかりません.
Reference
この問題について([SpringBoot]V-RIS開発ログ(2)-MySQLバインドを使用し、Spring Data JPAを使用して会員管理システムと誤り訂正を簡略化), 我々は、より多くの情報をここで見つけました
https://velog.io/@wjawksl/Spring-Boot-V-RIS-개발-일지2-MySQL-연동-Spring-Data-JPA를-이용한-간단한-회원-관리-시스템-및-오류-수정
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Reference
この問題について([SpringBoot]V-RIS開発ログ(2)-MySQLバインドを使用し、Spring Data JPAを使用して会員管理システムと誤り訂正を簡略化), 我々は、より多くの情報をここで見つけました https://velog.io/@wjawksl/Spring-Boot-V-RIS-개발-일지2-MySQL-연동-Spring-Data-JPA를-이용한-간단한-회원-관리-시스템-및-오류-수정テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol