전체 글
-
Java 오버로딩과 오버라이딩Java 2022. 1. 5. 11:03
오버로딩 같은 이름의 메서드 이면서 매개변수의 유형과 개수를 다르도록 하는 기술 오버라이딩 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다. 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재 정의해서 사용 오버로딩 사용법 //오버로딩 예제 void tiger(){ System.out.println("어흥"); } void tiger(int age){ System.out.println("어흥" + "나이는" + age); } void tiger(int age, int weight){ System.out.println("어흥" + "나이는" + age + "무게는" + weight); }오버로딩은 메서드 오버로딩과 생성자 오버로딩이 있다. 둘다 개념은 같다. 오버라이딩 사용법 //오버라이딩 예제 ..
-
Java 가변인자Java 2022. 1. 5. 10:47
오버로딩의 한계를 극복한 가변인자 오버로딩을 통해 어떤 메소드의 매개변수가 계속해서 늘어난다고 가정해보자 //ex public OrderItem orderItems(OrderItme orderitem1){...} public OrderItem orderItems(OrderItme orderitem1, OrderItme orderitem2){...} public OrderItem orderItems(OrderItme orderitem1, OrderItme orderitem2, OrderItme orderitem3){...}이런 경우 일일이 매개변수 하나하나 오버로딩 해줘야할까? 아니다. 이럴 땐 매개변수의 개수를 동적으로 지정해줄 수 있는 가변인자를 사용하면 된다. 가변인자 사용법 public static..
-
JPA @Transactional과 @RollbackJPA 2022. 1. 4. 18:30
스프링 @Transactional의 특징과 @Rollback 사용 스프링에서 제공하는 @Transactional은 기본적으로 커밋을 하지 않고 데이터를 롤백을 시킨다. 그렇게 되면 반복적인 테스트할 때 유용하다. 하지만 insert나 update 등의 쿼리문을 보기 위해선 데이터가 DB에 접근을 해야되는데 JPA 특성상 커밋을 하지 않으면 DB에 쿼리가 날라가지 않는다. 따라서, @Transactional을 사용하고 있을 때, DB 쿼리 문을 확인하고 싶으면 @Rollback(false)를 사용해주면 된다. (단, yml에 org.hibernate.type: trace을 선언하면 insert 문이 보이지 않는다.) @Rollback(value = false)
-
intellij maven이 안보이는 error트러블슈팅 2021. 12. 31. 11:15
maven이 어느 순간 안보이기 시작했다. settings에도 maven이 없고, pom.xml에서도 자동으로 dependency하지 못한다.. pom.xml에선 cannot symbol error와 URI 인식 에러가 뜨고.. new project를 해봐도 maven이 뜨지 않는다. cashe를 재설치해봐도 안되고.. 리빌드를 해봐도 안된다... 현재까지 이유를 못찾고 있는 중이다.(이유를 아시는 분은 댓글에 남겨주시면 감사하겠습니다 ㅠㅠ) 지금 하던 project는 라이브러리가 다 설치되어있어서 그나마 실행은 되는듯 하다.. 프로젝트를 다 끝내면 intellij를 다시 받아봐야겠다.
-
JPA flush()와 clear()JPA 2021. 12. 27. 17:41
flush()와 clear() JPA의 EntityManager는 persist, flush, clear 세가지 동작이 있는데 각각, persist(영속성 컨텍스트에 저장) flush()(영속성 컨텍스트에서 데이터를 DB까지 접근 시키지만 commit은 하지 않음) clear()(영속성 컨텍스트 안을 모두 지움) 와 같은 기능을 한다. DB 쿼리 문을 확인하고 싶을 때 flush와 clear를 선언해줘야 하는데, 그 이유는 flush로 DB에 접근하고 clear를 시켜줌으로써 영속성 컨텍스트를 비운다. 영속성 컨텍스트가 비었으므로 JPA는 DB에서 정보를 가져올 수 밖에 없다. 이를 이용해서 DB에서 날라오는 쿼리문을 확인할 수 있게 되는 것이다. JPA 특성상 바로 DB에 접근하지 않고 영속성 컨텍스트..
-
JPA 변경 감지와 병합(merge)JPA 2021. 12. 22. 16:46
JPA 변경 감지(dirty checking) 기본적으로 변경이 일어나면 database에 commit을 해준다. //JPA 변경 감지 Test @RunWith(SpringRunner.class) @SpringBootTest public class ItemUpdateTest { @Autowired EntityManager em; @Test public void updateTest() throws Exception { Book book = em.find(Book.class, 1L); //Transaction book.setName("changeName"); //데이터 변경 //변경 감지 == dirty checking //TX commit } }준영속 엔티티 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 ..
-
Spring @Valid와 BindingResult 파라미터Spring 2021. 12. 21. 20:20
@Valid 필드 값을 기본 값으로 가져가고 싶을 때, Controller에 @Valid 어노테이션을 선언할 수 있다. //@Valid 예시 @PostMapping("/members/new") public String create(@Valid MemberForm form){ Address address = new Address(form.getCity(), form.getStreet(), form.getZipcode()); Member member = new Member(); member.setName(form.getName()); member.setAddress(address); memberService.join(member); return "redirect:/"; } //NotEmpty Valid @N..
-
Spring Controller Model modelSpring 2021. 12. 21. 19:06
Spring Model 객체 Controller의 메서드는 Model이라는 타입의 객체를 파라미터로 받을 수 있다. 순수 JSP Servlet은 request.setAttribute()로 선언한 것을 Spring에서는 model.addAttribute로 대체할 수 있다. //JSP Servlet 방식 request.setAttribute("member", member ); //Model에 데이터를 보관한다. String viewPath = "/WEB-INF/views/save-result.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request. response); //Spri..