ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [spring] 20AUG21 @Autowired @Service @Repository
    SPRING 2021. 8. 20. 12:50

     

     

    환경만들기

     

    C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

    외부 라이브러리 등록 완료

     

    테이블 생성

     

     

     

    src/main/java/com.springbook.biz/BoardVO.java

    데이터를 주고받을 포맷이다. Serializable로 설정해주면 데이터 전송 시 조각단위가 아니라 하나의 객체로 보낼 수 있으므로 더 효율적이다.

    package com.springbook.biz.board;
    
    import java.sql.Date;
    
    public class BoardVO {
    	private int seq;
    	private String title;
    	private String writer;
    	private String content;
    	private Date regdate;
    	private int cnt;
    	public int getSeq() {
    		return seq;
    	}
    	public void setSeq(int seq) {
    		this.seq = seq;
    	}
    	public String getTitle() {
    		return title;
    	}
    	public void setTitle(String title) {
    		this.title = title;
    	}
    	public String getWriter() {
    		return writer;
    	}
    	public void setWriter(String writer) {
    		this.writer = writer;
    	}
    	public String getContent() {
    		return content;
    	}
    	public void setContent(String content) {
    		this.content = content;
    	}
    	public Date getRegdate() {
    		return regdate;
    	}
    	public void setRegdate(Date regdate) {
    		this.regdate = regdate;
    	}
    	public int getCnt() {
    		return cnt;
    	}
    	public void setCnt(int cnt) {
    		this.cnt = cnt;
    	}
    	@Override
    	public String toString() {
    		return "BoardVO [seq=" + seq + ", title=" + title + ", writer=" + writer + ", content=" + content + ", regdate="
    				+ regdate + ", cnt=" + cnt + "]";
    	}
    	
    	
    }

     

     

    src.main/java/com.springbook.biz.common/JDBCUtil.java

     

    package com.springbook.biz.common;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class JDBCUtil {
    	public static Connection getConnection() {
    		try {
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","scott","TIGER");
    		}catch(Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	
    	public static void close(PreparedStatement pstmt, Connection conn) {
    		
    			try {
    				if(pstmt!=null) pstmt.close();
    				if(conn!=null) conn.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    	}
    	
    	public static void close(ResultSet rs, PreparedStatement pstmt, Connection conn) {
    		try {
    			if(rs!=null) rs.close();
    			if(pstmt!=null) pstmt.close();
    			if(conn!=null) conn.close();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		}
    	}

     

    src/main/java/com.springbook.biz.board.impl/BoardDAO.java

    package com.springbook.biz.board.impl;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import org.springframework.stereotype.Repository;
    
    @Repository("boardDAO") //이제 spring container가 관리
    public class BoardDAO {
    	
    	private Connection conn = null;
    	private PreparedStatement stmt = null;
    	private ResultSet rs = null;
    	
    }

     

    src/main/java/com.springbook.biz.board/BoardService.java

    인터페이스 내부에 메소드 본체를 가질 수 없다. 필요한 메소드 헤더만 정의하고 이를 구현하는 클래스에서 본체를 구현한다. 이러한 인터페이스로 구성 시 확장성과 유연성이 좋아진다. 유지보수가 쉬어지고 이제 이 인터페이스를 구현할 클래스가 필요하다.

    package com.springbook.biz.board;
    
    public interface BoardService {
    	
    	//글등록
    	void insertBoard(BoardVO vo);
    }

     

     

    src/main/java/com.springbook.biz.board.impl/BoardServiceImpl.java

    (보통 구현했다라는 의미로 Impl 를 붙인다.) 만들어 두었던 인터페이스를 구현하고 오버라이드를 통해 메소드 본체를 작성한다. 해당 클래스가 Service라는 것을 알리기 위해 어노테이션으로 Service 라 해준다.

    new 객체 생성 없이 하기 위해 @Autowired를 써준다. 의존성 주입이라고 한다(Injection)

    package com.springbook.biz.board.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.springbook.biz.board.BoardService;
    import com.springbook.biz.board.BoardVO;
    
    @Service("boardservice")
    public class BoardServiceImpl implements BoardService {
    	
    	@Autowired
    	private BoardDAO boardDAO;
    	
    	@Override
    	public void insertBoard(BoardVO vo) {
    		boardDAO.insertBoard(vo);
    	}
    
    }

     

     

    BoardDAO.java

    package com.springbook.biz.board.impl;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import org.springframework.stereotype.Repository;
    
    import com.springbook.biz.board.BoardVO;
    
    @Repository("boardDAO") //이제 spring container가 관리
    public class BoardDAO {
    	
    	private Connection conn = null;
    	private PreparedStatement stmt = null;
    	private ResultSet rs = null;
    	
    	//글등록
    	public void insertBoard(BoardVO vo) {
    		
    	}
    	
    }

     

     

    src/main/resources/applicationContext.xml

    Namespaces에서 context check

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    	<context:component-scan base-package="com.springbook.biz"></context:component-scan>
    
    </beans>

     

     

    BoardDAO.java

    package com.springbook.biz.board.impl;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import org.springframework.stereotype.Repository;
    
    import com.springbook.biz.board.BoardVO;
    import com.springbook.biz.common.JDBCUtil;
    
    @Repository("boardDAO") //이제 spring container가 관리
    public class BoardDAO {
    	
    	private Connection conn = null;
    	private PreparedStatement stmt = null;
    	private ResultSet rs = null;
    	
    	//글등록
    	public void insertBoard(BoardVO vo) {
    		System.out.println("insertBoard()기능처리");
    		String sql = "insert into board1(seq,title,writer,content) values((select nvl(max(seq),0)+1 from board1),?,?,?)";
    		
    		try {
    			conn = JDBCUtil.getConnection();
    			stmt = conn.prepareStatement(sql);
    			stmt.setString(1, vo.getTitle());
    			stmt.setString(2, vo.getWriter());
    			stmt.setString(3, vo.getContent());
    			stmt.executeUpdate();
    			
    		}catch(Exception e) {
    			e.printStackTrace();
    		}finally {
    			JDBCUtil.close(stmt,conn);
    		}
    	}
    	
    }

     

     

     

     

     

     

     

     

    src/test/java/com.springbook.biz.board/BoardServiceClient.java

     

    src/test/java/com.springbook.biz.board/BoardServiceClient.java

    서비스 호출을 위해 서비스 정보를 가지고 있는 클래스를 선언한다.

     

    package com.springbook.biz.board;
    
    import java.util.Scanner;
    
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.GenericXmlApplicationContext;
    
    public class BoardServiceClient {
    
    	public static void main(String[] args) {
    		AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
    
    		BoardService boardService = (BoardService)factory.getBean("boardservice");
    		
    		BoardVO vo = new BoardVO();
    		Scanner sc = new Scanner(System.in);
    		
    		System.out.println("title입력");
    		String title = sc.nextLine();
    		System.out.println("writer입력");
    		String writer = sc.nextLine();
    		System.out.println("content입력");
    		String content = sc.nextLine();
    		
    		vo.setTitle(title);
    		vo.setWriter(writer);
    		vo.setContent(content);
    		
    		if(vo.getTitle().isBlank()) vo.setTitle("제목");
    		if(vo.getWriter().isBlank()) vo.setWriter("뽀로로");
    		if(vo.getContent().isBlank()) vo.setContent("노는게 제일 좋아");
    		
    		boardService.insertBoard(vo);
    
    
    		factory.close();
    	}
    
    }

     

     

    728x90

    'SPRING' 카테고리의 다른 글

    [SPRING] 데이터 추가, 변경, 삭제  (0) 2021.08.24
    [SPRING] Spring 의존성  (0) 2021.08.21
    [SPRING] Spring Container  (0) 2021.08.21
    [spring]의존 자동 주입 어노테이션  (0) 2021.08.20
    [Spring] Collection  (0) 2021.08.19
Designed by Tistory.