ibatis란?
iBATIS(아이바티스)는 SQL에 기반한 데이터베이스와 자바, 닷넷(.NET), 루비(Ruby) 등을 연결시켜 주는 역할을 하는
영속성 프레임워크(Java에서 DB를 편하게 핸들링 할 수있게 해주는 프레임워크).
이러한 연결은 프로그램의 소스코드에서 SQL 문장을 분리하여 별도의 XML 파일로 저장하고 이 둘을 서로 연결시켜주는 방식으로 작동.
간단히 정리하자면
쿼리문을 자바소스에서 빼내어 XML문서에 넣어서 실행할 수 있게하는 것
DB연결까지 가능한 프레임워크(MVC패턴의 DAO부분같은..)
- SQL문과 Java의 소스코드를 분리하고, 파라미터 값이 변경되지 않으면
Java의 소스 변경없이 SQL문만 변경해서 사용가능
- iBatis 데이터매퍼(iBatis에 자동으로 값을 매핑) API를 이용해서 자바빈즈(보통VO객체) 혹은 Map객체를
PreparedStatement의 파라미터에 매핑해 주고, SQL문의 실행 결과를
자바빈즈 혹은 Map객체에 자동으로 매핑해 준다.
예제)
1. 자바프로젝트 생성 후 소스폴더 추가하기
2. 소스폴더에 config, mapper/mapping 프로젝트 생성
2-1. config에 JDBC에 필요한 정보가 들어 있는 text파일생성
#dbinfo.properties
# 이 줄은 주석 처리 줄입니다...
# Properties문서를 작성하는 방법
# 'key값 = value값' 같은 형식으로 작성
# 공백주의하기
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=ddit
pass=java
2-2. DB연결과 실행할 쿼리문등록을 위한 Ibatis설정문서(sqlMapConfig.xml)만들기
<?xml version="1.0" encoding="UTF-8"?>
<!-- iBatis 설정 문서 굉장히 중요******!-->
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd" >
<sqlMapConfig>
<!--
DB와 연결하는 정보를 properties파일에 설정해 놓고
이 properties파일의 내용을 읽어올 수 있도록 파일 경로를 설정.
자바파일이 아닌 것은 '.'이 아니라 '/'로 구분해줌
-->
<properties resource="kr/or/ddit/ibatis/config/dbinfo.properties"/>
<!--
각각 sqlMap파일(SQL문이 작성된 파일)의 Namespace값과 id속성값을
이용해서 실행할 쿼리문을 찾도록 설정.
-->
<settings useStatementNamespaces="true"/>
<!--
쿼리문에 사용할 VO객체를 지정할 때 패키지 이름을 포함한 전체 이름을
사용해야 하는데 그렇게 되면 문장이 너무 길어질 수 있음.
이 때 전체 이름을 대신해서 사용할 alias 설정가능.
형식) <typeAlias alias ="alias명" type="클래스의 전체이름"/>
-->
<typeAlias alias="lprodVo" type ="kr.or.ddit.vo.LprodVO"/>
<!--
DB와 연결하는 부분 설정
-->
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name = "JDBC.Driver" value ="${driver}"/>
<!-- property name = "JDBC.Driver" value ="oracle.jdbc.driver.OracleDriver"/ -->
<property name = "JDBC.ConnectionURL" value ="${url}"/>
<property name = "JDBC.Username" value ="${user}"/>
<property name = "JDBC.Password" value ="${pass}"/>
</dataSource>
</transactionManager>
<!--
실행할 SQL문 등록
=> 실행할 SQL문을 xml문서로 따로 만든 후 그 xml문서를 등록해서 사용.
형식) <sqlMap resource = "경로명/파일명.xml"/>
-->
<sqlMap resource="kr/or/ddit/mapping/LprodTest.xml"/>
</sqlMapConfig>
2-3. 위의 정보를 Dao에 전달해주기 위한 class생성
package kr.or.ddit.ibatis.config;
import java.io.IOException;
import java.io.Reader;
import java.nio.charset.Charset;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class SqlMapClientFactory {
//DAO에서 공유해서 사용하기 위해 static으로 선언
private static SqlMapClientFactory smc;
static {
Charset charset = Charset.forName("utf-8");
Resources.setCharset(charset);
Reader rd = null;
try {
rd = Resources.getResourceAsReader("kr/or/ddit/ibatis/config/sqlMapConfig.xml");
smc = SqlMapClientBuilder.buildSqlMapClient(rd);
} catch (IOException e) {
e.printStackTrace();
}finally {
if(rd!=null) try{rd.close();}catch(IOException e){}
}
}
//DAO에서 호출되는 메서드.
public static SqlMapClient getSqlMapClient() {
return smc;
}
}
3. SQL문을 갖고있는 XML등록(mapper)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="lprod">
<!--
이 영역에는 처리할 SQL문에 맞는 태그를 사용하여 SQL문을 작성
사용할 수 있는 기본적인 태그들..
<select> select문장~~</select>
<insert> insert문장~~</insert>
<update> update문장~~</update>
<delete> delete문장~~</delete>
-->
<!--
id속성 => 실행할 태그를 Java소스에서 호출할 때 사용하는 이름으로
<sqlMap>태그의 namespace속성값과 연결해서 사용.
형식)namespace속성값.실행할태그의 id속성값
예) "lprod.insertlprod"
parameterClass속성 ==> SQL문에 사용할 데이터가 들어있는 객체를 기술.
(보통 VO클래스, Map객체, 자바의 기본자료형이름 등이 사용됨.)
(VO클래스등을 기술할 때는 해당 클래스의 패키지명을 포함한 전체 이름을 기술.)
-->
<!--<insert id="insertlprod" parameterClass="kr.or.ddit.vo.LprodVO"> -->
<insert id="insertLprod" parameterClass="lprodVo">
insert into lprod (lprod_id, lprod_gu, lprod_nm)
values(#lprod_id#, #lprod_gu#, #lprod_nm#)
</insert>
<update id ="updateLprod" parameterClass="kr.or.ddit.vo.LprodVO">
update lprod set lprod_id=#lprod_id#, lprod_nm=#lprod_nm#
where lprod_gu=#lprod_gu#
</update>
<!-- 값이 하나만 있을 때는 파라미터클래스의 그것의 자료형으로 써도됨, String 소문자로도 기입가능 -->
<delete id ="deleteLprod" parameterClass ="string">
delete from lprod where lprod_gu =#lprod_gu#
</delete>
<!--
resultClass속성 ==> select문을 처리한 결과를 저장할 VO클래스나 Map객체 또는
자바의 기본자료형이름을 지정.
select한 결과가 여러개이면 List에 자동으로 담아 줌.
그래서 결과가 여러개 일 경우에도 이 속성에는 1개의 레코드가 저장될
클래스나 자료형 이름을 지정.
-->
<select id="getAllprod" resultClass="lprodVo">
select * from lprod
</select>
<select id="getLprod" parameterClass="String" resultClass="lprodVo">
select * from lprod where lprod_gu = #lprod_gu#
</select>
</sqlMap>
※ibatis - 설정파일(에러시 type alias나 sqlMap부분의 파일 다 열어서 확인하기 )
sqlMapConfig.xml(굉장히 중요!!!!!!*******) => factory에서 smc객체생성
: 1. DB연결 : dbinfo.properties
2. VO파일의 alias설정(필수아님) :
예)
<typeAlias alias="lprodVo" type ="kr.or.ddit.vo.LprodVO"/>
4. VO프로젝트 및 class만들기
package kr.or.ddit.vo;
public class LprodVO {
private int lprod_id;
private String lprod_gu;
private String lprod_nm;
//다른 생성자 만들 때 기본 생성자 필히 생성!
/*
* public LprodVO() { }
*
*
* public LprodVO(String lprod_id, String lprod_gu, String lprod_nm) { super();
* this.lprod_id = lprod_id; this.lprod_gu = lprod_gu; this.lprod_nm = lprod_nm;
* }
*/
public int getLprod_id() {
return lprod_id;
}
public void setLprod_id(int lprod_id) {
this.lprod_id = lprod_id;
}
public String getLprod_gu() {
return lprod_gu;
}
public void setLprod_gu(String lprod_gu) {
this.lprod_gu = lprod_gu;
}
public String getLprod_nm() {
return lprod_nm;
}
public void setLprod_nm(String lprod_nm) {
this.lprod_nm = lprod_nm;
}
}
5.DAO프로젝트 및 interface, class만들기
package kr.or.mvc.dao;
import java.util.List;
import java.util.Map;
import kr.or.mvc.vo.MemberVO;
/**
* 실제 DB와 연결해서 SQL문을 수행하여 결과를 작성해서 Service에게 전달하는 DAO의 interface
*
* 각 메서드 하나가 DB와 관련된 직업 1개를 수행하도록 작성
*
*
*
* @author PC-06
*
*/
public interface IMemberDao {
/**
* MemberVO에 담겨진 자료를 DB에 insert하는 메서드
*
* @param memVo DB에 insert할 자료가 저장된 MemeberVO객체
* @return insert성공 : 1, insert 실패 : 0
*/
public int insertMember(MemberVO memVo);
/**
* 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
*
* @param id 삭제할 회원ID
* @return 삭제성공 : 1, 삭제실패 : 0
*/
public int deleteMember(String id);
/**
* MemberVO 자료를 이용하여 회원정보를 수정하는 메서드
*
* @param memVo update할 회원 정보가 저장된 MemberVO객체
* @return 수정성공 : 1, 수정실패 : 0
*/
public int updateMember(MemberVO memVo);
/**
* 전체 회원의 정보를 가져와서 List에 담아서 반환하는 메서드
*
*
* @return MemberVO객체가 저장된 List객체
*
*
*/
public List<MemberVO> getAllMember();
/**
* 회원ID를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
*
* @param id 검색할 회원ID
* @return 검색된 회원ID의 개수
*/
public int getMemberIdCount(String id);
//public int updateMember2(String field, String data, String id);
//나쁘지않은 방법이지만 나중에 쓸 프로그램에서는 변수를 한개로 만들어주는것이 좋음.(Map이용)
/**
* Map에 저장된 정보를 이용하여 원하는 항목을 수정하는 메서드
* ==> key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
*
* @param paraMap 회원ID,수정할 컬렴명, 수정할 데이터가 저장될 Map객체
* @return 수정성공 : 1, 수정실패 : 0
*/
public int updateMember2(Map<String, String> paraMap);
}
package kr.or.mvc.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import kr.or.ddit.util.DBUtil3;
import kr.or.mvc.vo.MemberVO;
public class MemberDaoImpl implements IMemberDao{
//1번
private static MemberDaoImpl dao;
//2번
private MemberDaoImpl() {}
//3번
public static MemberDaoImpl getInstance() {
if(dao==null) dao = new MemberDaoImpl();
return dao;
}
@Override
public int insertMember(MemberVO memVo) {
Connection conn=null;
PreparedStatement pstmt=null;
int cnt=0; //반환값이 저장될 변수 선언
try {
//DB에 insert
conn = DBUtil3.getConnection();
String sql = "insert into mymember"
+"(mem_id, mem_pass, mem_name, mem_tel, mem_addr)"
+" values(?,?,?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memVo.getMem_id());
pstmt.setString(2, memVo.getMem_pass());
pstmt.setString(3, memVo.getMem_name());
pstmt.setString(4, memVo.getMem_tel());
pstmt.setString(5, memVo.getMem_addr());
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
cnt=0;
e.printStackTrace();
}finally {
if(pstmt!=null)try {pstmt.close();}catch(SQLException e) {};
if(conn!=null)try {conn.close();}catch(SQLException e) {};
}
return cnt;
}
@Override
public int deleteMember(String id) {
Connection conn=null;
PreparedStatement pstmt=null;
int cnt=0; //반환값이 저장될 변수 선언
try {
conn = DBUtil3.getConnection();
String sql = "delete from mymember where mem_id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
cnt=0;
e.printStackTrace();
}finally {
if(pstmt!=null)try {pstmt.close();}catch(SQLException e) {};
if(conn!=null)try {conn.close();}catch(SQLException e) {};
}
return cnt;
}
@Override
public int updateMember(MemberVO memVo) {
Connection conn=null;
PreparedStatement pstmt=null;
int cnt=0;
try {
conn = DBUtil3.getConnection();
String sql = "update mymember set "
+" mem_pass = ? , mem_name = ? , mem_tel = ?, mem_addr = ? where mem_id = ?" ;
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memVo.getMem_pass());
pstmt.setString(2, memVo.getMem_name());
pstmt.setString(3, memVo.getMem_tel());
pstmt.setString(4, memVo.getMem_addr());
pstmt.setString(5, memVo.getMem_id());
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
cnt=0;
e.printStackTrace();
}finally {
if(pstmt!=null)try {pstmt.close();}catch(SQLException e) {};
if(conn!=null)try {conn.close();}catch(SQLException e) {};
}
return cnt;
}
@Override
public List<MemberVO> getAllMember() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
List<MemberVO> memList = null; //반환값이 저장될 변수선언
try {
conn = DBUtil3.getConnection();
String sql = "select * from mymember";
stmt = conn.createStatement();
rs=stmt.executeQuery(sql);
memList = new ArrayList<MemberVO>(); //List객체 생성
while(rs.next()) {//레코드 개수만큼 반복
MemberVO memVo = new MemberVO(); //1개의 레코드가 저장될 변수 선언
//VO객체에 DB에서 가져온 컬럼값들을 저장한다.
memVo.setMem_id(rs.getString("mem_id"));
memVo.setMem_pass(rs.getString("mem_pass"));
memVo.setMem_name(rs.getString("mem_name"));
memVo.setMem_tel(rs.getString("mem_tel"));
memVo.setMem_addr(rs.getString("mem_addr"));
memList.add(memVo); //1개의 레코드가 저장된 MemberVO객체를 List에 추가
}
} catch (SQLException e) {
memList = null;
e.printStackTrace();
}finally {
if(rs!=null)try {rs.close();}catch(SQLException e) {};
if(stmt!=null)try {stmt.close();}catch(SQLException e) {};
if(conn!=null)try {conn.close();}catch(SQLException e) {};
}
return memList;
}
@Override
public int getMemberIdCount(String id) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int cnt=0;
try {
conn = DBUtil3.getConnection();
String sql ="select count(*) cnt from mymember "
+"where mem_id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if(rs.next()) {
cnt = rs.getInt("cnt");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(rs!=null)try {rs.close();}catch(SQLException e) {};
if(pstmt!=null)try {pstmt.close();}catch(SQLException e) {};
if(conn!=null)try {conn.close();}catch(SQLException e) {};
}
return cnt;
}
@Override
public int updateMember2(Map<String, String> paraMap) {
Connection conn = null;
PreparedStatement pstmt = null;
int cnt =0;
//key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
try {
conn=DBUtil3.getConnection();
//paraMap에 저장된 key값을 이용하여 쿼리문을 작성하고
//쿼리문에 들어갈 데이터를 셋팅하는 작업진행
String sql = "update mymember set "+paraMap.get("field")+ " =? where mem_id=? ";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, paraMap.get("data"));
pstmt.setString(2, paraMap.get("memid"));
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
cnt = 0;
e.printStackTrace();
}
return cnt;
}
}
5.Service프로젝트 및 interface, class만들기
-interface는 Dao에서 복사하기!
package kr.or.mvc.service;
import java.util.List;
import java.util.Map;
import kr.or.mvc.vo.MemberVO;
/**
* Service객체는 DAO에 만들어진 메서들르 원하는 작업에 맞게 호출하여 실행하고 그 결과를 받아오고,
* 받아온 결과를 Controller에게 보내주는 역할
* 그래서 보통 DAO의 메서드 구조와 같게 만듦.(자바고급단계에서는...스프링, JSP등에서는 달라짐.)
*
*
*
*
* @author PC-06
*
*/
public interface IMemberService {
/**
* MemberVO에 담겨진 자료를 DB에 insert하는 메서드
*
* @param memVo DB에 insert할 자료가 저장된 MemeberVO객체
* @return insert성공 : 1, insert 실패 : 0
*/
public int insertMember(MemberVO memVo);
/**
* 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
*
* @param id 삭제할 회원ID
* @return 삭제성공 : 1, 삭제실패 : 0
*/
public int deleteMember(String id);
/**
* MemberVO 자료를 이용하여 회원정보를 수정하는 메서드
*
* @param memVo update할 회원 정보가 저장된 MemberVO객체
* @return 수정성공 : 1, 수정실패 : 0
*/
public int updateMember(MemberVO memVo);
/**
* 전체 회원의 정보를 가져와서 List에 담아서 반환하는 메서드
*
*
* @return MemberVO객체가 저장된 List객체
*
*
*/
public List<MemberVO> getAllMember();
/**
* 회원ID를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
*
* @param id 검색할 회원ID
* @return 검색된 회원ID의 개수
*/
public int getMemberIdCount(String id);
//public int updateMember2(String field, String data, String id);
//나쁘지않은 방법이지만 나중에 쓸 프로그램에서는 변수를 한개로 만들어주는것이 좋음.(Map이용)
/**
* Map에 저장된 정보를 이용하여 원하는 항목을 수정하는 메서드
* ==> key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
*
* @param paraMap 회원ID,수정할 컬렴명, 수정할 데이터가 저장될 Map객체
* @return 수정성공 : 1, 수정실패 : 0
*/
public int updateMember2(Map<String, String> paraMap);
}
package kr.or.mvc.service;
import java.util.List;
import java.util.Map;
import kr.or.mvc.dao.IMemberDao;
import kr.or.mvc.dao.MemberDaoImpl;
import kr.or.mvc.vo.MemberVO;
public class MemberServiceImpl implements IMemberService {
private IMemberDao dao; // DAO객체가 저장될 변수 선언
private static MemberServiceImpl service; //1번
//생성자
//public MemberServiceImpl () {
private MemberServiceImpl () { //2번
//dao = new MemberDaoImpl(); //DAO객체 생성
dao = MemberDaoImpl.getInstance();
}
public static MemberServiceImpl getInstance() {
if(service == null) service = new MemberServiceImpl();
return service;
}
@Override
public int insertMember(MemberVO memVo) {
return dao.insertMember(memVo);
}
@Override
public int deleteMember(String id) {
return dao.deleteMember(id);
}
@Override
public int updateMember(MemberVO memVo) {
return dao.updateMember(memVo);
}
@Override
public List<MemberVO> getAllMember() {
return dao.getAllMember();
}
@Override
public int getMemberIdCount(String id) {
return dao.getMemberIdCount(id);
}
@Override
public int updateMember2(Map<String, String> paraMap) {
// TODO Auto-generated method stub
return dao.updateMember2(paraMap);
}
}
6.controller class만들기
package kr.or.mvc.controller;
import java.security.Provider.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import kr.or.ddit.util.DBUtil;
import kr.or.mvc.service.IMemberService;
import kr.or.mvc.service.MemberServiceImpl;
import kr.or.mvc.vo.MemberVO;
public class MemberController {
private IMemberService service; // Service객체가 저장될 변수 선언
private Scanner sc = new Scanner(System.in);
public MemberController() {
//service = new MemberServiceImpl();
service = MemberServiceImpl.getInstance();
}
public static void main(String[] args) {
new MemberController().memberStart();
}
private void memberStart() {
while(true) {
int choice = displayMenu();
switch(choice) {
case 1 : // 추가
insertMember();
break;
case 2 : // 삭제
deleteMember();
break;
case 3 : // 수정
updateMember();
break;
case 4 : // 전체출력
displayMember();
break;
case 5 : // 수정2
updateMember2();
break;
case 0 :
System.out.println("프로그램을 종료합니다...");
return;
default :
System.out.println("작업 번호를 잘못 입력했습니다.");
System.out.println("다시 입력하세요.");
}
}
}
private void updateMember2() {
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요.");
System.out.println("회원ID>> ");
String id = sc.next();
int count = service.getMemberIdCount(id);
if(count==0) {//없는 회원...
System.out.println(id+"은(는) 없는 회원ID입니다.");
System.out.println("수정 작업을 종료합니다.");
return;
}
int num;
String field = null; //수정항목의 컬럼명이 저장
String title = null;//수정항목을 입력 받을 때 사용할 메세지(항목명)
do {
System.out.println();
System.out.println("수정할 항목을 선택하세요.");
System.out.println("---------------------------------------");
System.out.println("1. 비밀번호 2. 회원이름 3. 전화번호 4. 회원주소");
System.out.println("---------------------------------------");
System.out.println("수정할 항목 선택>> ");
num=sc.nextInt();
switch(num) {
case 1:
field = "mem_pass"; title ="비밀번호";
break;
case 2:
field = "mem_name"; title ="회원이름";
break;
case 3:
field = "mem_tel"; title ="전화번호";
break;
case 4:
field = "mem_addr"; title ="회원주소";
break;
default :
System.out.println("수정할 항목 번호를 잘못입력했습니다.");
System.out.println("다시 선택해주세요.");
break;
}
}while(num<1||num>4);
System.out.println();
sc.nextLine();//입력버퍼 비우기
System.out.println("새로운"+title+">>");
String data = sc.nextLine();
//선택한 컬럼명과 수정할 데이터 그리고 회원ID를 Map에 추가한다.
//key값 정보 : 회원ID(memid), 수정할 컬럼명(field), 수정할 데이터(data)
Map<String, String> paraMap = new HashMap<String,String>();
paraMap.put("memid", id);
paraMap.put("field", field);
paraMap.put("data", data);
int cnt = service.updateMember2(paraMap);
if(cnt>0) {
System.out.println(" 수정 완료!!!");
}else {
System.out.println(" 수정 실패ㅜㅜ");
}
}
private void updateMember() {
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요.");
System.out.println("회원ID>> ");
String id = sc.next();
int count = service.getMemberIdCount(id);
if(count==0) {//없는 회원...
System.out.println(id+"은(는) 없는 회원ID입니다.");
System.out.println("수정 작업을 종료합니다.");
return;
}
System.out.println();
System.out.print("새로운 비밀번호>> ");
String newPass = sc.next();
System.out.print("새로운 회원이름>> ");
String newName = sc.next();
System.out.print("새로운 전화번호>> ");
String newTel = sc.next();
sc.nextLine();
System.out.print("새로운 주소>> ");
String newAddr = sc.nextLine();
//입력한 자료를 VO객체에 담는다.
MemberVO memVo = new MemberVO();
memVo.setMem_id(id);
memVo.setMem_pass(newPass);
memVo.setMem_name(newName);
memVo.setMem_tel(newTel);
memVo.setMem_addr(newAddr);
int cnt = service.updateMember(memVo);
if(cnt>0) {
System.out.println(id+"회원 정보 수정 완료!!!");
}else {
System.out.println(id+"회원 정보 수정 실패ㅜㅜ");
}
}
private void deleteMember() {
System.out.println();
System.out.println("삭제할 회원 정보를 입력하세요.");
System.out.println("회원ID>> ");
String id = sc.next();
int cnt = service.deleteMember(id);
if(cnt>0) {
System.out.println(id+"회원 정보 삭제 성공!!!");
}else {
System.out.println(id+"회원은 없는 회원이거나 삭제에 실패하였습니다....ㅠㅠ");
}
}
private void displayMember() {
List<MemberVO>memList= service.getAllMember();
System.out.println();
System.out.println("-----------------------------------------------");
System.out.println(" ID PASSWORD 이 름 전화번호 주 소");
System.out.println("-----------------------------------------------");
if(memList==null||memList.size()==0) {
System.out.println("등록된 회원이 하나도 없습니다.");
}else {
for(MemberVO memVo : memList) {
String id = memVo.getMem_id();
String pass = memVo.getMem_pass();
String name = memVo.getMem_name();
String tel = memVo.getMem_tel();
String addr = memVo.getMem_addr();
System.out.println(id+"\t"+pass+"\t"+name+"\t"+tel+"\t"+addr);
}
}
System.out.println("-----------------------------------------------");
System.out.println("출력 끝...");
}
private void insertMember() {
System.out.println();
System.out.println("추가할 회원 정보를 입력하세요.");
int count = 0;
String memId = null;
do {
System.out.print("회원ID >> ");
memId = sc.next();
count = service.getMemberIdCount(memId);
if(count>0) {
System.out.println(memId + "은(는) 이미 등록된 회원ID 입니다.");
System.out.println("다른 회원ID를 입력하세요.");
}
}while(count>0);
System.out.print("비밀번호 >> ");
String pass = sc.next();
System.out.print("회원이름 >> ");
String name = sc.next();
System.out.print("전화번호 >> ");
String tel = sc.next();
sc.nextLine(); // 입력버퍼 비우기
System.out.print("회원주소 >> ");
String addr = sc.nextLine();
// 입력한 데이터를 MemberVO객체에 저장한다.
MemberVO memVo = new MemberVO();
memVo.setMem_id(memId);
memVo.setMem_pass(pass);
memVo.setMem_name(name);
memVo.setMem_tel(tel);
memVo.setMem_addr(addr);
//Service의 insert메서드 호출
int cnt = service.insertMember(memVo);
if(cnt>0 ) {
System.out.println(memId + " 회원 정보 추가 완료!!!");
}else {
System.out.println(memId + " 회원 정보 추가 실패~~~");
}
}
private int displayMenu() {
System.out.println();
System.out.println("------------------");
System.out.println(" 1. 자 료 추 가");
System.out.println(" 2. 자 료 삭 제");
System.out.println(" 3. 자 료 수 정");
System.out.println(" 4. 전체 자료 출력");
System.out.println(" 5. 자 료 수 정2 ");
System.out.println(" 0. 작 업 끝");
System.out.println("------------------");
System.out.print(" 원하는 작업 선택 >> ");
return sc.nextInt();
}
}
'ddit > Java' 카테고리의 다른 글
Swing (0) | 2022.09.05 |
---|---|
싱글톤패턴(Singleton) (0) | 2022.07.27 |
MVC패턴(model-view-controller)< VO,DAO,Service,Controller> (0) | 2022.07.26 |
Stack, Queue, Sort (0) | 2022.06.22 |
Collection Framework(Array List, Vector...), generic / 문제풀기 (0) | 2022.06.22 |