개발/스프링(Spring)16 Spring ) Assert 사용하기 (if 대용) if문 대신 인수를 검증하고 조건에 맞지 않는 경우, IllegalArgumentException 또는 IllegalStateException 예외를 발생 시킴 문자열 파악하는 예시 (true, false 반환) null을 포함해서 공백만 존재한다면 False를 반환 Assert 적용 전 if문 if(!StringUtils.hasText(user)) { throw new IllegalArgumentException("User가 없습니다."); } Assert 적용 후 import org.springframework.util.Assert; /*------------------------------------------------------------------*/ Assert.hasText(user, "U.. 2023. 2. 2. (스프링) 게시판 전체 선택 후 삭제 (이전 페이지로 이동) ex ) 6페이지에 Record가 하나 존재하는데 해당 Record를 삭제하게 될 경우 5페이지로 이동하게 끔 하기 위한 코드 그림1 5페이지에서 게시글 전체 선택 후 삭제 하면 5페이지로 이동 2. 5페이지로 성공적으로 이동 화면 Java 코드 전체 레코드(totalRecord) 한 페이지에 뿌려줄 pageSIZE (임의이지만 5개로 고정) 위에 두 조건이 딱 나누어 떨어질 경우(% 모드 연산) ( == 해당 페이지에 레코드가 모두 삭제되어 없다는 의미) @RequestMapping(value="/deleteList", method= RequestMethod.POST) @ResponseBody public int deleteList(RedirectAttributes redirectAttributes ,.. 2022. 8. 17. (JPA) 복합 키 설정하기 (JPA) 복합 키 설정하기 @Embeddable 어노테이션이 붙어있는 클래스를 생성하고 해당 클래스 안에 복합키 속성들을 넣어주면 됨 해당 클래스는 Seriallize를 구현 해야함 @EmbeddedId public class 복합키클래스명 implements Serializable { private 복합키클래스 속성명1; private 복합키클래스 속성명2; } 선언 @Embeddable public class 복합키클래스명 implements Serializable { @Column(name="키1") private String 키1; @Column(name="키2") private String 키2; } VO @EmbeddedId private 복합키클래스명(타입으로사용) id; 2022. 6. 30. (JPA) 사용자 정의 sql (@Query) JPA 사용자 정의 sql @Query 어노테이션을 이용하여 정의 테이블 명은 Entity 클래스 이름과 일치시켜야함 select 문 주의할 점은 테이블 명으로 Entity가 될 클래스 명을 그대로 써줘야함. 예를들어) OrderVO라는 이름을 같은 클래스를 Entity로 만들 때 OrderVO를 그대로 사용 (select * from OrderVO) @Query("쿼리문") public 타입 '쿼리문을 실행 할 함수명()'; @Query("select nvl(max(orderid),0) +1 from Orders") public int getNextNo(); insert, delete, update 문 select 문과 다르게 table 명 입력 시 실제 클래스 명이 아닌 실제 @Modifying @Q.. 2022. 6. 28. JPA 관계 맵핑 JPA 관계 맵핑 @OneToMany (1:N) @ManyToOne (N:1) OneToMany @OneToMany(mappedBy="book", fetch=FetchType.eager) private List orders; -> book 테이블 입장에서 book 테이블과 orders 테이블은 1:N 관계라는 의미 ManyToOne @JoinColumn(name = "조인 할 컬럼", insertable =true ,updatable = true) private Book book; -> Orders 입장에서 orders 테이블과 와 book 테이블은 은 N:1 관계라는 의미 2022. 6. 27. Spring Data JPA Spring Data JPA mybatis 대신 JPA를 사용 JPA에서 VO는 Entity라고 표현 Spring Data JPA 기본 구성 요소 1. Project 생성 시 Spring Data JPA 선택하여 생성 2. JPA에서 필요한 디펜던시 설정 (pom.xml) com.zaxxer HikariCP 3. application.properties mybatis설정과 동일한데 jps관련 설정이 들어감 주의할 설정 (spring.jpa.hibernate.ddl-auto = '옵션 입력') create - 해당 속성에 의해 VO에 해당하는 Table이 자동으로 DB에 생성 됨 - 해당 테이블이 있으면 DROP하고 새로 생성 create-drop - create와 동일하지만 종료 시점에 DROP이 됨 u.. 2022. 6. 26. (Spring) 한글 처리 - filter 이용 Spring filter (한글 처리) web.xml에 선언 enc org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 enc /* 2022. 6. 11. (Spring) redirect 함수 redirect 명령어 리다이렉트 하는 명령어 mav.setViewName("redirect:/xxxx.do) response.sendRedirect() 비슷한 동작을 함 setViewName("redirect:/listBook.do"); Controller에서 특정 Service의 return redirect 사용 return "redirect:/list" 'list'라는 서비스를 컨트롤러에서 실행시킴 return "list" 'list'라는 View로 이동하라는 의미 2022. 6. 10. (Spring <-> Mybatis) Spring / Mybatis 설정 or 동작 원리 / 순서 Mybatis란 자바 객체와 데이터베이스 테이블을 맵핑을 해줌 VO를 이용한 getter/setter 작업을 덜어 줌. DAO를 사용하기 대신에 xml 을 이용할 것임 (BookMapper.xml) xml이 매핑 파일에 의해 관리될 것임 (sqlMapConfig.xml) Spring / Mybatis 설정 or 동작 원리 / 순서 1. web.xml 기존과 동일하게 DispactcherServlet / HandlerMapping 을 동일하게 선언 gaebal org.springframework.web.servlet.DispatcherServlet gaebal *.do 2. xxx-servlet.xml web.xml에서 설정한 servlet-name을 접두어로 하는 xml 생성 servlet-name이 x.. 2022. 6. 9. (Spring) Model 클래스를 이용하여 상태유지 Model 클래스를 이용하여 상태유지 아래와 같이 사용 가능 (매개변수로 전달) @RequestMapping("/listBook.do") public void list (Model model) { model.addAttribute("title", "상품목록"); model.addAttribute("list", dao.listBook()); } 2022. 6. 7. (Spring) @ReqeustMapping GET/POST 방식 설정 ReqeustMapping GET/POST 방식 설정 @ReqeustMapping(value=".do", method=RequestMethod.GET) @ReqeustMapping(value=".do", method=RequestMethod.POST) 2022. 6. 5. (Spring) MVC Spring MVC 스프링 MVC의 구성요소 DispatcherServlet HandlerMapping 컨트롤러(Controller) ModelAndView ViewResolver DispatcherServlet 클라이언트의 모든 요청을 전달 받음 모든 요청을 컨트롤러에게 전달하고 해당 컨트롤러가 리턴한 결과 값을 View에게 전달하여 알맞은 응답을 생성 servlet-name 과 동일한 이름의 xml파일이 필요 ( 아래의 경우 cclee-servlet.xml ) web.xml에 설정 cclee org.springframework.web.servlet.DispatcherServlet HandlerMapping 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할 지를 결정 @RequestMapping("서비.. 2022. 6. 2. (Spring) 스프링 객체 생성 방법 스프링 객체 생성 방법1. XML 기반 (옛날 방식)2. 어노테이션 기반 (요즘 방식)1. XML 기반의 객체 생성 (환경설정)- 스프링 설정파일을 이용한 객체 생성xml 설정파일.. 2022. 6. 1. (Spring) Bean 범위(scope) 설정 Bean 범위 설정singtone : 하나의 Bean 정의에 대해 "하나의 객체만 존재" (기본 값) : 같은 객체를 모두가 공유함prototype : 하나의 Bean 정의에 대해 "다수의 객체가 존재 가능": 서로 다른 객체request - 하나의 Bean 정의에 대해 "HTTP Request 생명주기 안에서는 단 하나의 객체만 존재"session - 하나의 Bean 정의에 대해 "하나의 HTTP Session 생명주기 안에서는 단 하나의 객체만 존재"global session .. 2022. 5. 31. Spring Spring 자바 어플리케이션 개발 프레임워크 주요 개념 경량 컨테이너 DI (Dependency Injection) AOP(Aspect Oriented Programming) DI (Dependency Injection) - 강한 의존 관계를 줄이는 개념 - 유지보수에 용이하도록 만들 수 있음 (수정에 대한 요청에 유연하게 대처 가능) - 클래스 간의 의존 관계를 스프링이 알아서 해줌 직접 객체 선언 X (객체를 스프링이 제공해주는 환경설정에서 설정) 만약 어떤 객체가 바뀌면 스프링 환경설정 에서만 바꾸면 된다 강한 의존 관계 객체를 직접 선언할 경우 강한 의존 관계에 있다고 볼 수 있음 이럴 경우에 객체가 바뀌게 되면 일일이 찾아다니면서 바꿔야 해서 유지보수의 어려움이 있음 그래서 '느슨한 의존 관계.. 2022. 5. 30. 이전 1 2 다음 반응형