Spring에서 데이터베이스 연동하기: KBO 구단 조회/추가/수정/삭제 (완성)



1. 실행 클래스

package spring.jdbc.view;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


import org.springframework.context.support.AbstractApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;


public class MenuUi {

private TeamService selectTeam;

public void setSelectTeam(TeamService selectTeam){

this.selectTeam = selectTeam;

}


private void execute(int num){ // 아래 show menu 메서드에서 실행할 메서드 

switch(num){

case 1:

System.out.println("프로그램을 종료합니다.");

System.exit(0); // 프로그램을 빠져나가며 완전히 종료하는 명령

break;

case 2:

selectTeam.teamList();

break;

case 3:

selectTeam.teamInsert();

break;

case 4:

selectTeam.teamSearch();

break;

case 5:

selectTeam.teamUpdate();

break;

case 6:

selectTeam.teamDelete();

break;

default:

System.out.println("지원하지 않는 기능입니다.");

break;

}

}

public void showMenu() throws NumberFormatException, IOException{ // 메인 메서드 내부에서 사용할 메서드

while(true){

System.out.println("=================");

System.out.println("1. 프로그램 종료");

System.out.println("2. KBO 구단보기");

System.out.println("3. KBO 구단추가");

System.out.println("4. KBO 구단검색");

System.out.println("5. KBO 구단수정");

System.out.println("5. KBO 구단삭제");

System.out.println("=================");

System.out.print("번호 입력 후 Enter : ");

BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));

int number = Integer.parseInt(keyboard.readLine());

execute(number);

}

}

public static void main(String[] args) throws NumberFormatException, IOException {

AbstractApplicationContext context =

new ClassPathXmlApplicationContext("applicationContext.xml");

context.registerShutdownHook();

MenuUi menu = context.getBean("menu", MenuUi.class);

menu.showMenu();

context.close();

}

}





2. 서비스 클래스
package spring.jdbc.view;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import spring.jdbc.dao.TeamDAO;
import spring.jdbc.dto.Team;

//DAO 안의 getTeamList 메서드를 서비스 영역에서 호출 위한 부분
//DAO 객체 주입받는 방식을 잘 볼 것

public class TeamService {
// DAO의 메서드 호출 위한 참조변수와 setter 메서드
private TeamDAO teamDAO;
private BufferedReader keyboard;
private int id;
private String name;
public TeamService() { // 생성자를 만들어 이 클래스에선 입력을 받을 수 있게 처리해둠
keyboard = new BufferedReader(new InputStreamReader(System.in));
}
public void setTeamDAO(TeamDAO teamDAO){
this.teamDAO = teamDAO;
}
public void teamList(){  // 10개 구단의 list를 리스트로 받아옴
List<Team> list = teamDAO.getTeamList();
// 전체 레코드 목록 보기
System.out.println("************");
System.out.println("구단ID 구단명");
for(Team team : list){
System.out.printf("%d %s\n", team.getId(), team.getName());
}
System.out.println("************");
}
public void teamInsert() { // 데이터를 입력받아 DB에 저장하는 메서드
try {
System.out.print("추가할 팀 id 입력: ");
id = Integer.parseInt(keyboard.readLine());
System.out.print("추가할 팀 name 입력: ");
name = keyboard.readLine();
} catch (IOException e) {
e.printStackTrace();
}
// id 또는 name 중복체크 로직
List<Team> list = teamDAO.getTeamList();
Team team = new Team();
boolean check = false; // 로컬변수이므로 초기화 반드시 필요
for(int i =0; i<list.size(); i++) {
team = list.get(i);
if(team.getId() == id || team.getName().equals(name)) {
check = true; // 같은 id/이름이 있으면 체크변수 true로
}
}
if(check == true) {
System.out.println("team의 id 또는 name이 중복됩니다.");
return;
}
team.setId(id);
team.setName(name);
int retValue = teamDAO.teamInsert(team);
if(retValue == 1) {
teamList();
}else{
System.out.println("구단 입력에 실패하였습니다.");
}
}
public void teamSearch() {  // 데이터를 입력받아 DB에서 검색하는 메서드
try{
System.out.println("검색할 팀 id를 입력해주세요: ");
id = Integer.parseInt(keyboard.readLine());
} catch (IOException e) {
e.printStackTrace();
}
Team team = new Team();
team = teamDAO.teamSearch(id);
System.out.println("********************");
System.out.println("ID      구단명");
System.out.printf("%d %s\n", team.getId(), team.getName());
System.out.println("********************");
}
public void teamUpdate() { // 데이터를 입력받아 DB에서 수정하는 메서드
try {
System.out.print("수정할 팀 id 입력: ");
id = Integer.parseInt(keyboard.readLine());
System.out.print("변경할 팀 name 입력: ");
name = keyboard.readLine();
} catch (IOException e) {
e.printStackTrace();
}
// id 유무 체크 검사 
List<Team> list = teamDAO.getTeamList();
Team team = new Team();
boolean check = false; // 로컬변수이므로 초기화 반드시 필요
for(int i =0; i<list.size(); i++) {
team = list.get(i);
if(team.getId() == id) {
check = true; // 같은 id가 있으면 체크변수 true로
}
}
if(check == false) { // 검색한 id가 없으면
System.out.println("검색한 id가 존재하지 않습니다.");
return;
}
// 레코드 수정
team.setId(id);
team.setName(name);
int retValue = teamDAO.teamUpdate(team);
if(retValue == 1) {
teamList();
}else{
System.out.println("구단 수정에 실패하였습니다.");
}
}

public void teamDelete() { // 데이터를 입력받아 DB에서 삭제하는 메서드
try {
System.out.print("삭제할 팀 id 입력: ");
id = Integer.parseInt(keyboard.readLine());
} catch (IOException e) {
e.printStackTrace();
}
// id 유무 체크 검사
List<Team> list = teamDAO.getTeamList();
Team team = new Team();
boolean check = false; // 로컬변수이므로 초기화 반드시 필요
for(int i =0; i<list.size(); i++) {
team = list.get(i);
if(team.getId() == id) {
check = true; // 같은 id가 있으면 체크변수 true로
}
}
if(check == false) { // 검색한 id가 없으면
System.out.println("검색한 id가 존재하지 않습니다.");
return;
}
// 레코드 삭제
team.setId(id);
team.setName(name);
int retValue = teamDAO.teamDelete(id);
if(retValue == 1) {
teamList();
}else{
System.out.println("구단 삭제에 실패하였습니다.");
}
}
}







3. DAO 인터페이스

package spring.jdbc.dao;

import java.util.List;

import spring.jdbc.dto.Team;

public interface TeamDAO {
// Team이란 이름의 자바빈 타입으로 메서드를 정의
List<Team> getTeamList();
int teamInsert(Team team); // int인 것은 정상적으로 입력시 수정된 개수를 반환하므로
Team teamSearch(int id);
int teamUpdate(Team team);
int teamDelete(int id);
}




4. DAO 클래스

package spring.jdbc.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import spring.jdbc.dto.Team;

public class TeamDAOImpl implements TeamDAO{
private JdbcTemplate jdbcTemplat;
private List<Team> list = null;
public void setJdbcTemplate(JdbcTemplate jdbcTemplat){
this.jdbcTemplat = jdbcTemplat;
}
@Override
public List<Team> getTeamList() {
String sql = "select * from baseballTeam order by team_id asc";
return list = jdbcTemplat.query(sql, new RowMapper<Team>(){
// DB의 자료를 통째로 꺼내올 때에는 query 메서드를 사용 
// 인터페이스인 RowMapper 객체를 생성하려면 인터페이스 안의 추상메서드를 {} 안에 넣어준다.
@Override // mapRow는 읽어온 데이터를 입력으로 전달하기 위한 메서드
public Team mapRow(ResultSet arg0, int arg1) throws SQLException {
Team team = new Team(); // 읽어온 데이터를 자바빈에 저장
team.setId(arg0.getInt("team_id"));
team.setName(arg0.getString("team_name"));
return team;
}
});
}

@Override
public int teamInsert(Team team) {
String sql = "insert into baseballTeam values (?, ?)";
return jdbcTemplat.update(sql, team.getId(), team.getName());
}

@Override
public Team teamSearch(int id) {
String sql = "select * from baseballTeam where team_id = ?";
return jdbcTemplat.queryForObject(sql, new RowMapper<Team>(){
// 하나의 레코드를 꺼내올 때엔 queryForObject 메서드를 사용
@Override // mapRow는 읽어온 데이터를 입력으로 전달하기 위한 메서드
public Team mapRow(ResultSet arg0, int arg1) throws SQLException {
Team team = new Team(); // 읽어온 데이터를 자바빈에 저장
team.setId(arg0.getInt("team_id"));
team.setName(arg0.getString("team_name"));
return team;
}
}, id); // queryForObject의 1번째 매개변수 sql, 2번째 매개변수 RowMapper가 끝나고 3번째는 ?에 해당하는 매개변수인 id
}

@Override
public int teamUpdate(Team team) {
String sql = "update baseballTeam set team_name=? where team_id=?";
return jdbcTemplat.update(sql, team.getName(), team.getId());
}

@Override
public int teamDelete(int id) {
String sql = "delete from baseballTeam where team_id = ?";
return jdbcTemplat.update(sql, id);
}

}






' Spring Framework' 카테고리의 다른 글

Spring MVC 실습  (0) 2016.04.06
Spring MVC 세팅  (0) 2016.04.05
Spring에서 데이터베이스 연동하기: KBO 구단 조회  (0) 2016.04.04
Spring 과 DB  (0) 2016.04.04
@Aspect 어노테이션을 이용한 AOP  (0) 2016.04.01
Posted by netyhobby
,