Adventure Time - Finn 3
본문 바로가기
Spring

Spring 어노테이션을 이용한 연습

by hyun9_9 2024. 3. 9.

DTO, DAO -> MODEL 파트
cotroller 파트
|

Spring은 AOP를 지원함
CRUD(핵심기능)/공통로직(횡단기능)
DAO의 기능을 별도로 사용하는 Service를 제작
Service가 DAO도 사용할수있고,Common도 사용할수있다

Controller(Action) -> 직접DAO사용
Controller(Action) -> Service라는 객체를 통해서 DAO를 사용
Service가 DAO,공통로직 골라서 선택적으로 사용

Watch <-> Phone 처럼, Service의 메서드 시그니쳐와 DAO의 메서드 시그니쳐가 같으면 사용에 용이함이 있다

 


서비스 개발중인데 레포지가 없나봐요 Null떠요
DAO가 new가 되어있지 않다


2. 1를 누르면 로그인
3. 2을 누르면 글 작성
4. 3를 누르면 전체글 출력

package test;

import java.util.ArrayList;
import java.util.Scanner;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

import com.spring.biz.board.BoardDTO;
import com.spring.biz.board.BoardService;
import com.spring.biz.member.MemberDTO;
import com.spring.biz.member.MemberService;

public class User03 {

	public static void main(String[] args) {

		AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");

		BoardService boardService = (BoardService) factory.getBean("boardService");
		MemberService memberService = (MemberService) factory.getBean("memberService");
		Scanner sc = new Scanner(System.in);
		MemberDTO mDTO = new MemberDTO();
		BoardDTO bDTO = new BoardDTO();
		String id=null;

		while (true) {
			System.out.println("1를 누르면 로그인");
			System.out.println("2을 누르면 글 작성");
			System.out.println("3를 누르면 전체글 출력");
			System.out.println(">>");
			int action = sc.nextInt();
			if (action == 0) {
				break;
			} 
			else if (action == 1) {
				

				System.out.println("아이디 입력 : ");
				mDTO.setMid(sc.next());

				System.out.println("비밀번호 입력 : ");
				mDTO.setPassword(sc.next());
				mDTO = memberService.selectOne(mDTO);
				if (mDTO != null) {
					System.out.println("로그인 성공");
					id = mDTO.getMid();
				} 
				else {
					System.out.println("로그인 실패");
				}

			} 
			else if(action==2) {
				if(id==null) {
					System.out.println("로그인해주세요");
					continue;
				}
				System.out.println("제목작성");
				bDTO.setTitle(sc.next());
				System.out.println("글작성");
				bDTO.setContent(sc.next());
				bDTO.setWriter(id);
				if(boardService.insert(bDTO)) {
					System.out.println("성공");
				}else {
					System.out.println("실패");
				}
			}
			else if (action == 3) {
				ArrayList<BoardDTO> datas = boardService.selectAll(null);
				for (BoardDTO data : datas) {
					System.out.println(data);
				}
			}
		}
		factory.close();

	}

}
package com.spring.biz.member;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.springframework.stereotype.Repository;

import com.spring.biz.common.JDBCUtil;


//컴포넌트 사용 안하는 이유 가독성이 낮고 메모리 관리에 불리함
@Repository("membrDAO")
public class MemberDAO {
	private Connection conn;
	private PreparedStatement pstmt;

	private static final String SELECTALL="SELECT * FROM MEMBER";
	private static final String SELECTONE="SELECT * FROM MEMBER WHERE MID=? AND PASSWORD=?";

	private static final String INSERT="INSERT INTO MEMBER VALUES(?,?,?,?)";
	private static final String UPDATE="";
	private static final String DELETE="";

	public ArrayList<MemberDTO> selectAll(MemberDTO mDTO) {
		ArrayList<MemberDTO> datas=new ArrayList<MemberDTO>();

		conn=JDBCUtil.connect();
		try {
			pstmt=conn.prepareStatement(SELECTALL);

			ResultSet rs=pstmt.executeQuery();

			while(rs.next()) {
				MemberDTO data=new MemberDTO();
				data.setMid(rs.getString("MID"));
				data.setPassword(rs.getString("PASSWORD"));
				data.setName(rs.getString("NAME"));
				data.setRole(rs.getString("ROLE"));
				datas.add(data);
			}

			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.disconnect(pstmt, conn);
		}

		return datas;
	}
	public MemberDTO selectOne(MemberDTO mDTO) {
		MemberDTO data=null;

		conn=JDBCUtil.connect();
		try {
			pstmt=conn.prepareStatement(SELECTONE);
			pstmt.setString(1, mDTO.getMid());
			pstmt.setString(2, mDTO.getPassword());

			ResultSet rs=pstmt.executeQuery();

			if(rs.next()) {
				data=new MemberDTO();
				data.setMid(rs.getString("MID"));
				data.setPassword(rs.getString("PASSWORD"));
				data.setName(rs.getString("NAME"));
				data.setRole(rs.getString("ROLE"));
			}

			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.disconnect(pstmt, conn);
		}

		return data;
	}

	public boolean insert(MemberDTO mDTO) {
		conn=JDBCUtil.connect();
		try {
			pstmt=conn.prepareStatement(INSERT);
			pstmt.setString(1, mDTO.getMid());
			pstmt.setString(2, mDTO.getPassword());
			pstmt.setString(3, mDTO.getName());
			pstmt.setString(4, mDTO.getRole());
			int rs=pstmt.executeUpdate();
			if(rs<=0) {
				return false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		return true;
	}
	public boolean update(MemberDTO mDTO) {
		conn=JDBCUtil.connect();
		try {
			pstmt=conn.prepareStatement(UPDATE);
			int rs=pstmt.executeUpdate();
			if(rs<=0) {
				return false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		return true;
	}
	public boolean delete(MemberDTO mDTO) {
		conn=JDBCUtil.connect();
		try {
			pstmt=conn.prepareStatement(DELETE);
			int rs=pstmt.executeUpdate();
			if(rs<=0) {
				return false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		return true;
	}
}
package com.spring.biz.member;

public class MemberDTO {
	private String mid;
	private String password;
	private String name;
	private String role;
	
	public String getMid() {
		return mid;
	}
	public void setMid(String mid) {
		this.mid = mid;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getRole() {
		return role;
	}
	public void setRole(String role) {
		this.role = role;
	}
	
	@Override
	public String toString() {
		return "MemberDTO [mid=" + mid + ", password=" + password + ", name=" + name + ", role=" + role + "]";
	}
}
package com.spring.biz.member;

import java.util.ArrayList;



//1.DAO를 사용할 Service의
//2. 메서드 시그니쳐가 DAO와 같으면 용이하겠다!
//3. 메서드 시그니쳐를 강제해보자!!

public interface MemberService {

	ArrayList<MemberDTO> selectAll(MemberDTO mDTO);
	MemberDTO selectOne(MemberDTO mDTO);
	
	boolean insert(MemberDTO mDTO);
	boolean update(MemberDTO mDTO);
	boolean delete(MemberDTO mDTO);
}
package com.spring.biz.member;

import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

//1. xxxImpl 네? 아, 인터 페이스를 구현한 클래스겠구나
//2. 인터페이스를 사용했네 ? 아 메서드 시그니처를 강제해야겠구나
//3. 왜 강제해? 아, 의존 관계에 있는 객체가 해당 메서드 시그니쳐겠구나


@Service("memberService")
//1. 가독성이 좋아짐 : 개발자가 이 객체가 Service 레이어의 객체임을 빠르게 파악가능!
//2. 스프링 컨테이너가 메모리 관리를 하잖아요? 같은 @끼리 메모리위치를 잘 정리하여 관리가능!

public class MemberServiceImpl implements MemberService {

	@Autowired
	private MemberDAO mDAO;
	
	
	
	@Override
	public ArrayList<MemberDTO> selectAll(MemberDTO mDTO) {
		// TODO Auto-generated method stub
		return mDAO.selectAll(mDTO);
	}

	@Override
	public MemberDTO selectOne(MemberDTO mDTO) {
		// TODO Auto-generated method stub
		return mDAO.selectOne(mDTO);
	}

	@Override
	public boolean insert(MemberDTO mDTO) {
		// TODO Auto-generated method stub
		return mDAO.insert(mDTO);
	}

	@Override
	public boolean update(MemberDTO mDTO) {
		// TODO Auto-generated method stub
		return mDAO.update(mDTO);
	}

	@Override
	public boolean delete(MemberDTO mDTO) {
		// TODO Auto-generated method stub
		return mDAO.delete(mDTO);
	}

}

 

'Spring' 카테고리의 다른 글

Advice 동작시점  (0) 2024.03.11
AOP 정리  (0) 2024.03.10
어노테이션으로 의존성 주입  (0) 2024.03.07
.xml에 설정들이 많아진다면?  (0) 2024.03.06
factory 연습 -의존성 설정 파일로 주입  (0) 2024.03.05