[조건문의 문법] 1) IF - if(true) => result : true => 실행 - if(false) => result : false => 실행되지 않음
2) ELSE - if 조건문에 해당하지 않은 경우 실행되지 않음
3) ELSE IF - if 조건문 다음에 오는 조건문
[조건문의 응용] - if(true) : 항상 실행되는 조건이기에 올바르지 않음 - prompt('질문내용'); : 입력창을 통해 사용자로부터 정보를 입력받을 수 있음
2. 반복문
- (Loop, Iterate) 반복적인 작업을 지시하는 방법
1) while while(boolean){ 반복해서 실행할 코드 } - 조건이 true에서 false가 될때까지 실행 (조건이 만족하면 실행) - while(true) : 무한한 반복을 의미하므로 가급적 사용X - while (i < 10) : i의 값이 10보다 작다면 true, 아니면 false, i 값이 10이 되면 종료
2) for for(초기화; 반복조건(true/false); 반복이 될 때마다 실행되는 코드){ 반복해서 실행될 코드 }
[반복문의 제어] - break : 반복문의 종료 - continue : 다음 코드 실행하지 않고 다음 증감값으로 이동 (반복문을 종료하지 않음)
[반복문의 중첩] for(i=0; i<10; i++){ for(j=0; j<10; j++){ 반복해서 실행할 코드 } }
[변수] - JavaScript에서 변수는 var로 시작 (변수 선언의 의미) - 특수문자를 제외한 모든 문자로 시작 가능 - 한번 선언한 이후에는 또 var를 안붙여도됨 - 숫자, 문자의 연산이 모두 가능함
[변수의 효용] - 변수를 쓰기 전 : 모든 영역이 변할 수 있는 영역 alert(100+10); // 100을 고치기 위해서는 모든 줄을 다 고쳐줘야함 alert((100+10)/10); alert(((100+10)/10)-10); alert((((100+10)/10)-10)*10); - 변수 사용 후 : 첫 줄은 변할 수 있는 영역, 나머지 줄은 변하지 않는 영역 a = 100; // 한번만 고치면 됨 a = a + 10; alert(a); a = a / 10; alert(a); a = a - 10; alert(a); a = a * 10; alert(a); - 변수를 사용하지 않으면 실수가 나올 수 있고 효율이 떨어지므로 유지보수력이 떨어지는 좋지 않은 코드가 됨
2. 비교 연산자
[연산자] - 어떤 작업을 컴퓨터에 지시하기 위한 기호
[대입 연산자 =] - a(변수) =(대입 연산자) 1(상수 : 고정된 값. 변수에 대응되는 개념) - 우항의 값을 좌항의 변수에 대입할때 사용
[동등 연산자 ==] - equal operator - 좌항과 우항을 비교해서 값이 같다면 true 다르다면 false - 값의 자료형보다 의미가 같으면 같다고 판단 - 숫자 1을 true로 간주, 1 외의 숫자들을 false로 간주
[일치 연산자 ===] - strict equal operator - 좌항과 우항이 정확하게 같을 때 true 다르다면 false - 정확하다는 의미 : 데이터형까지 같은 경우
- ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink,
DataNucleus같은 ORM 프레임워크를 사용해야 함
* ORM : 객체와 DB를 연결해주는 기술
1) spring.jpa.hibernate.ddl-auto 옵션 - create : 새로운 테이블 생성 - createdrop : 기존 테이블을 지우고 새로 생성 - none : 수동으로 직접 테이블을 생성해야함 - update : 현재 테이블 있으면 만들지 말고 데이터 누적. 테이블이 없으면 새로 생성(많이 사용).
시작 시 도메인과 스키마 비교하여 필요한 컬럼 추가 등의 작업 실행. 데이터는 삭제하지 않음. - validate : 기존과 새로운 것의 달라진 내용만 표시해줌. 스키마가 적합한지 검사함. 문제가 있으면 예외 발생.
2) spring.jpa.properties.hibernate.format_sql 옵션 - 콘솔에 sql 코드 보여질 때 문단 정리
3) spring.jpa.show-sql 옵션 - 실행했을 때 콘솔에 sql 코드 보여지기
//2.엔티티를 DB에 저장하기 Article target = articleRepository.findById(article.getId()).orElse(null); // DB에서 기존 데이터 가져오기 if (target != null) { // 기존 데이터가 있는지 확인하고 있으면 udpate articleRepository.save(article); }
//3.수정 후 결과 페이지로 이동하기 return "redirect:/articles/"+article.getId(); // return "redirect:/articles/"; // 목록으로 }
@GetMapping("/article/{id}/delete") public String delete(@PathVariable Long id) { //1. 삭제할 대상을 가져오기 Article article = articleRepository.findById(id).orElse(null);
//2. 대상 엔티티를 삭제하기 if (article != null) { articleRepository.delete(article); }
//3. 삭제 후 목록 페이지로 이동하기 return "redirect:/articles"; }
2. 특수 쿼리문 (직접 쿼리문 작성)
▶ ArticleRepository.java
@Transactional // 직접 쿼리 작성할때 반드시 필요 @Modifying(clearAutomatically = true) @Query(value="update article set content='kkk' where id = :id", nativeQuery=true) // :id는 값을 전달 받게됨 int updateTest(@Param("id")Long id);
▶ ArticleController
@GetMapping("/") public String index() { int res = articleRepository.updateTest(1L); return "index"; }
#mybatis mybatis.type-aliases-package=com.example.test.dto // alias가 등록되어있는 장소 mybatis.mapper-locations=/mybatis/**/*-mapper.xml // mapper.xml로 끝나는 파일 위치 mybatis.configuration.map-underscore-to-camel-case=true
▶ 맨 하단에 -javaagent:D:\fintechkmy\springboot\sts-4.24.0.RELEASE\lombok.jar 이렇게 수정
(경로에 한글이 있으면 STS 실행 안됨)
▶ STS DTO 파일로 돌아와서 @Data 추가하면 Outline에 Getter, Setter 메서드 모두 추가 되는 것을 알 수 있음
@Getter 추가하면 Getter 메서드만 추가됨
2) Anotation
(1) @ToString
- 디버깅 및 로깅 편의성 : @ToString 어노테이션을 사용하면 엔티티 객체의 문자열 표현을 쉽게 생성. 이는 디버깅 및 로깅 시 객체의 상태를 쉽게 확인할 수 있어 유용함. - 코드 간결성 : @ToString 어노테이션은 롬복(Lombok) 라이브러리에서 제공하는 기능임. 엔티티 클래스에서 직접 toString 메서드를 작성할 필요 없이 자동으로 생성해줌. 이는 코드의 간결성과 가독성을 높여줌. - 주의사항 - 엔티티 간의 양방향 연관 관계가 있는 경우, @ToString 어노테이션이 순환 참조를 일으킬 수 있음. - 이로 인해 StackOverflowError가 발생할 수 있음. 양방향 연관 관계가 있는 필드를 toString 메서드에서 제외해야함. - 롬복의 @ToString 어노테이션은 exclude 속성을 사용하여 특정 필드를 제외할 수 있음.
(2) @EqualsAndHashCode
- 롬복(Lombok) 라이브러리에서 제공하는 기능으로, 클래스의 모든 필드를 기준으로 equals 및 hashCode 메서드를 생성. - 주로 객체의 동등성 비교와 해시 기반 컬렉션(예: HashSet, HashMap)에서 사용. - 수동으로 작성해야 할 boilerplate 코드를 줄이고 코드의 가독성과 유지보수성을 높여줌
(3) @NoArgsConstructor
- Test() : 디폴트 생성자를 만들어줌
(4) @AllArgsConstructor - Test(String, String, String) : 전체 매개변수가 들어간 생성자를 만들어줌
(테스트 예제)
File ▶ New ▶ Spring Starter Project
▶ Name : test3 / Group : com.example.test3 / Artifact : test3 / Package : com.example.test3 ▶ Lombok, DevTool, Sprig Web 선택 ▶ com.example.test3 패키지 ▶ Test.java 클래스 생성
▶ Test.java
public class Test { private String id; private String name; private String cname; }
▶ STS - Windows - Show view - Outline에 보면 멤버변수만 있음
▶ Test.java
@Data public class Test { private String id; private String name; private String cname; }