2016년 10월 27일 목요일

[자바교육,스프링교육,IT실무교육추천]스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice

스프링 WEB MVC에서 컨트롤러에서 예외처리하는 방법에 관해 설명한 PPT 입니다. @ExceptionHandler는 스프링 컨트롤러에서 정의한 메소드에서 기술한 예외가 발생되면 자동으로 받아낼 수 있는데 이를 이용하여 컨트롤러에서 발생하는 예외를 View단 JSP등으로 보내서 처리할 수 있으며@ControllerAdvice는 스프링3.2 이상에서 사용가능하며 @Controller 나 스프링 4.0이상에서 지원하는 @RestController 에서 발생하는 예외 등을 catch하는 기능을 가지고 있으며 클래스 위에 @ControllerAdvice를 붙이고 어떤 예외를 잡아낼 것인지 메소드 상단에 @ExceptionHandler(예외클래스명.class)를 기술합니다. 스프링4.0이상에서는 특정한 컨트롤러만 지정해서 캐치할 수 있죠

2016년 10월 26일 수요일

[자바교육,JPA교육,스프링교육_탑크리에듀][스프링부트JPA강좌]Querydsl,오라클시퀀스(Sequence)예제

[스프링부트JPA강좌]Querydsl,오라클시퀀스(Sequence)예제 

감사합니다.

@Override 
public Long insertMyemp1(String ename, Long sal, String deptno) { 
//////////////////////////////////////////////////////////////// 
// myemp1테이블에 insert, 오라클 시퀀스이용 
// 시퀀스생성:create sequence seq_myemp1_empno start with 10000003 
//          select seq_myemp1_empno.nextval from dual; 
// 시퀀스이름을 줄때 앞에스키마명까지 줘야한다. 아니면 ORA-02289 발생 
//------------------------------------------------------------- 
// insert into myemp1 (empno, ename, sal, deptno) 
// values (test.seq_myemp1_empno, ?, ?, ?) 
//////////////////////////////////////////////////////////////// 
Long cnt = queryFactory.insert(myemp1) 
.columns(myemp1.empno, myemp1.ename, myemp1.sal, myemp1.deptno) 
.values(SQLExpressions.nextval("test.seq_myemp1_empno"),ename,sal,deptno) 
.execute(); 

return cnt; 


------------------------------------------------------------------------ 
[로그] 
10. insert into MYEMP1 (EMPNO, ENAME, SAL, DEPTNO) 
values (test.seq_myemp1_empno.nextval, '오제이씨', 9999, '1') 
  
20160304 21:14:54.194 [http-nio-8080-exec-7] INFO j.sqltiming - insert into MYEMP1 (EMPNO, ENAME, SAL, DEPTNO) 
values (test.seq_myemp1_empno.nextval, '오제이씨', 9999, '1') 
 {executed in 255 msec}

[자바교육,JPA교육,스프링교육_탑크리에듀][스프링JPA,Querydsl강좌]오라클SQL쿼리,NVL,SelfJoin,LeftJoin

[스프링JPA,Querydsl강좌]오라클SQL쿼리,NVL,SelfJoin,LeftJoin

첨부 파일 참조하세요. 
감사합니다.

첨부파일 URL참조 - http://ojc.asia/bbs/board.php?bo_table=LecJpa&wr_id=143

[자바교육,JPA교육,스프링교육_탑크리에듀]#4.Spring부트,JPA,오라클연동게시판,리스트보기(리스트보기,레포지토리,서비스,컨트롤러,스프링부트메인, JSP, 페이징처리적용)

#4.Spring부트,JPA,오라클연동게시판,리스트보기(리스트보기,레포지토리,서비스,컨트롤러,스프링부트메인, JSP, 페이징처리적용),기존 MyBatis, Spring JDBC와 비교해보세요~

첨부 파일 참조하세요.


1. 게시판 리스트보기 설명 PDF
2. 게시판 리스트보기까지 전체 프로젝트 소스

다음 강좌 #5에서는 RestController, 부트스트랩을 통한 UI개선, AngulerJS를 적용하여클라이언트를 MVC형태로 개선해 보자!
 
boardlist.png


 

열공하세요~ 감사합니다.

[자바교육,JPA교육,스프링교육_탑크리에듀]#3.스프링부트,Spring Data JPA게시판(모델클래스작성및테이블생성)

#3.스프링부트,Spring Data JPA게시판(모델클래스작성및테이블생성)

도메인 모델 객체 생성하기<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

n  Jpa.board.model 패키지를 생성 후 엔티티 클래스를 만들자.

[Board.java]

package jpa.board.model;

import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.PrePersist;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import lombok.Getter;
import lombok.Setter;


@Entity
@Getter
@Setter
// 시퀀스의 시작값은 1
// 시퀀스의 기본 allocationSize50, 번호가 50부터 생기므로 1
@SequenceGenerator(name="BOARD_SEQ_GENERATOR",
                   sequenceName="BOARD_SEQ",
                   initialValue=1,
                   allocationSize=1) 
public class Board {
          
//  MySQL이라면 아래와같이 기술한다.
//        @Id
//        @GeneratedValue
//        @Column(length=10)
//        protected Integer id;     
          
           @Id     
           @GeneratedValue(strategy=GenerationType.SEQUENCE,
                           generator="BOARD_SEQ_GENERATOR")       
           @Column(length=10)
           protected Integer id;                
                     
           @Column(length=20, nullable=false)
           protected String name;
          
           @Column(length=20, nullable=false)
           protected String passwd;
          
           @Column(length=500, nullable=false)
           protected String title;
          
           @Column(length=4000, nullable=false)
           protected String content;
          
           //날짜기본형식 time, day, month, year 형태저장
           @Column(nullable=false, columnDefinition = "date default sysdate")
           @Temporal(TemporalType.TIMESTAMP)
           protected Date regdate = new Date();      
          
           @Column(nullable=false, columnDefinition = "number(5) default 0")
           protected Integer readcount = 0;
          
           // 답변인경우 어느글의 답변인지 상위글번호
           // 최상위글인 경우 자신의 글번호 동일하다.
           // 리스트보기에서 정렬시 우선적으로 reply로 정렬
           @Column(nullable=false, columnDefinition = "number(5)")
           protected Integer reply = 0 ;
          
           // 글아래 모든 답변들에 대해 reply_level과 관계없이 1씩 증가   
           @Column(nullable=false, columnDefinition = "number(5) default 0")
           protected Integer replystep = 0;
          
           // 1,2차 답글인지 여부
           // 하나의 글에 답변이 두개면 그 두답변은 reply_level이 같다.
           // 리스트보기에서 reply_level에 따라 들여쓰기를 한다.
           @Column(nullable=false,columnDefinition = "number(5) default 0", length=10)
           protected Integer replylevel = 0;
}
n  프로젝트에서 마우스 우측버튼 -> Run As -> Spring Boot App로 실행 후 오라클쪽에 테이블이 생성되는 것을 확인하자.

[자바교육,JPA교육,스프링교육_탑크리에듀] #2.스프링부트,Spring Data JPA게시판(프로젝트생성 및 메이븐,로깅,오라클DB를 위한설정)

 #2.스프링부트,Spring Data JPA게시판(프로젝트생성 및 메이븐,로깅,오라클DB를 위한설정) 

첨부 파일 참조하세요.

감사합니다.

첨부파일 URL참조- http://ojc.asia/bbs/board.php?bo_table=LecJpa&wr_id=139

[자바교육,JPA교육,스프링교육_탑크리에듀]#1.스프링부트,Spring Data JPA게시판(구현기술및기능)-오라클연동게시판소스

#1.스프링부트,Spring Data JPA게시판(구현기술및기능)-오라클연동게시판소스


질문하실 내용이 있으시면 Q/A에 올려주시면 성의껏 답변 드리겠습니다.
감사합니다.

구현 기술  기능

n  Spring Boot, MVC, Spring Data JPA, AngularJS 기반으로 게시판을 만들어 보자.
n  JPA로 게시판을 만든다는 것은 맞지 않을 수도 있지만 기능과 사용방법을 익힌다는 관점에서 간단히 만들어 보자본예제는 오라클 DB를 기준으로 작성되었으며  MySQL(MariaDB) 예제는 다음 URL에서 참조하면 된다.


n  구현기술
Spring Boot, Spring WEB MVC, RestController
Spring Data JPA(Hibernate)
기본 JpaRepository
Query Method
Oracle DataBase(DB는 편한걸로 사용가능)
UI : JSP, BootStrap, AngularJS, JSON
Logging: DriverSpy

n  기본기능
글리스트 보기글입력글읽기글수정글삭제답변글작성

n  테이블 및 시퀀스 DDL

ü  테이블 및 시퀀스는 엔티티 정의해서 자동 생성시킬 예정이니 DB쪽에 생성할 필요없다구조만 확인하자.
ü  Board 테이블의 PK(ID칼럼, Primary Key)는 오라클 시퀀스를 이용할 것이다. MySQL이라면 자동증분 칼럼을 사용하니 특별히 생성할 필요 없다.(본 예제는 오라클을 기준으로 한다.)
ü  엔티티를 만들 때 키 부분(ID칼럼)에 어노테이션 사용하는 것만 DB가 무엇이냐에 따라 좀 다르니 확인하면 된다.

JPA에서 자동 생성된 DDL 스크립트는 다음과 같다.

create table board (
   id number(10,0) not null,
   content varchar2(4000 char) not null,
   name varchar2(20 char) not null,
   passwd varchar2(20 char) not null,
   readcount number(5) default 0 not null,
   regdate date default sysdate not null,
-- 답변인경우 어느글의 답변인지 상위글 번호,최상위글인 경우 자신의 글번호 동일,
-- 리스트보기에서 정렬시 우선  reply로 우선하게 된다.
   reply number(5) not null,
-- 하나의 글 아래에 생기는 모든 답변들에 대해 순차적으로 1씩 증가(reply_level과 관계없이)
   replylevel number(5) default 0 not null,
-- 1,2차 답글인지 여부글에  답변이 두개면 그 두답변은 reply_level이 같다.
-- 리스트보기에서 reply_level에 따라 들여쓰기를 한다.   
   replystep number(5) default 0 not null,
   title varchar2(500 char) not null,
   primary key (id)
)

create sequence BOARD_SEQ;