//////
Search
🍒

[1028] Hash, CRUD 실습

생성일
2022/11/10 07:58
태그
TodayILearn
Spring
생성일 1

CRUD 실습

1. JDBC 및 DB 세팅

docker - mysql 버전

a) Dependency 추가

→ Maven
<!-- JDBC --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- H2 DB --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <!-- MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency>
XML
복사
H2 Database를 사용하는 이유

b) yml 파일 작성

application-dev.yml
# h2 spring: h2: console: enabled: true path: /h2-console datasource: url: jdbc:h2:mem:test username: sa password:
YAML
복사
실제 서버에선 develop 서버, production 서버 등을 구분
production 서버의 db 정보, token 값 등 보안상 문제가 되는 yml 파일은 gitignore에 추가
로컬에서 H2를 사용하는 develop 관련 yml 파일은 github에 올려도 상관없음 (.env의 역할)
application.yml
spring: mvc: pathmatch: matching-strategy: ant_path_matcher profiles: include: - dev
YAML
복사
profiles → include → dev

2. 동작 원리 (실습 기준)

3. DTO

// UserDto.java package com.springboot.hello.domain.dto; import lombok.AllArgsConstructor; import lombok.Getter; @Setter @Getter @AllArgsConstructor public class UserDto { private String id; private String name; private String password; }
Java
복사
계층 간 데이터 교환을 하기 위한 객체
getter와 setter만 가짐
로직 없음

4. DAO

// UserDao.java package com.springboot.hello.dao; import com.springboot.hello.domain.dto.UserDto; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; @Component public class UserDao { private final JdbcTemplate jdbcTemplate; public UserDao(JdbcTemplate jdbcTemplate){ this.jdbcTemplate = jdbcTemplate; } public int insert(UserDto user){ return this.jdbcTemplate.update("INSERT INTO users(id, name, password) VALUES (?, ?, ?)", user.getId(), user.getName(), user.getPassword()); } public int deleteById(String id){ return this.jdbcTemplate.update("delete from users where id = ?", id); } public int deleteAll() { return this.jdbcTemplate.update("delete from users"); } }
Java
복사
DB의 데이터에 접근하기 위한 객체
DB 관련 비즈니스 로직을 분리하기 위해 사용

5. Controller

// UserController.java package com.springboot.hello.controller; import com.springboot.hello.dao.UserDao; import com.springboot.hello.domain.dto.UserDto; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @AllArgsConstructor @Slf4j @RestController @RequestMapping("/api/v1/user-api") public class UserController { private final UserDao userDao; @PostMapping("/sign-up") public String add(@RequestBody UserDto user) { int result = userDao.insert(user); if(result==1){ return user.getId() + "번에 정보가 등록되었습니다."; } else { return "잘못된 양식입니다"; } } @DeleteMapping(value = "/user/{id}") public String deleteById(@PathVariable String id) { int result = userDao.deleteById(id); if(result==1){ return id + "번 유저가 삭제되었습니다."; } else { return "잘못된 양식입니다"; } } @DeleteMapping(value = "/user/all") public String deleteAll() { int result = userDao.deleteAll(); if(result==1){ return "모든 유저가 삭제되었습니다."; } else { return "오류가 발생했습니다"; } } }
Java
복사
사용자의 요청을 받고 처리 후 응답
실습 코드에서는 각 메서드에 직접 로직을 작성했지만, 원래는 Controller가 아닌 Service에 작성해야 하는 코드

알고리즘 1. 폰켓몬

HashSet
이 클래스의 가장 큰 특징은 중복을 허용하지 않는다는 것이다.
중복을 걸러내는 과정
문제 풀이에 필요한 HashSet문법
코드 설계 과정
1.
중복 제거를 할 수 있는지?
2.
N을 구하는 식을 짤 수 있는지?
1. 개수의 절반의 크기를 미리 int N 변수에 저장 2. 배열의 index 0부터 nums.length-1 까지 차례로 Hashset에 add 하고 나면 중복이 제거된 값만 set에 저장됨. 3. if(N > Hashset.size()) answer = N 4. else answer = Hashset
Plain Text
복사
public static int solution(int[] nums) { HashSet<Integer> set = new HashSet<>(); int answer = 0; int N = nums.length / 2; for(int i = 0; i<nums.length; i++){ set.add(nums[i]); } // 중복제거된 값 확인 // System.out.println(set.toString()); if(set.size() < N){ answer = set.size(); }else { answer = N; } return answer; }
Java
복사