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 |