Jun's Blog

[Java] IBatis를 이용한 CRUD 예제 본문

High Java/IBatis

[Java] IBatis를 이용한 CRUD 예제

Fizzyelf 2020. 10. 26. 20:22

Oracle. <Mymember> 테이블

create table mymember(
    mem_id varchar2(8) not null,  -- 회원ID
    mem_name varchar2(100) not null, -- 이름
    mem_tel varchar2(50) not null, -- 전화번호
    mem_addr varchar2(128)    -- 주소
);

 


 

1) MemberInfoTest

package kr.or.ddit.member;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Scanner;

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;
import kr.or.ddit.util.JDBCUtil;

/*
	회원정보를 관리하는 프로그램을 작성하는데 
	아래의 메뉴를 모두 구현하시오. (CRUD기능 구현하기)
	(DB의 MYMEMBER테이블을 이용하여 작업한다.)
	
	* 자료 삭제는 회원ID를 입력 받아서 삭제한다.
	
	예시메뉴)
	----------------------
		== 작업 선택 ==
		1. 자료 입력			---> insert
		2. 자료 삭제			---> delete
		3. 자료 수정			---> update
		4. 전체 자료 출력	    ---> select
		5. 작업 끝.
	----------------------
	 
	   
// 회원관리 프로그램 테이블 생성 스크립트 
create table mymember(
    mem_id varchar2(8) not null,  -- 회원ID
    mem_name varchar2(100) not null, -- 이름
    mem_tel varchar2(50) not null, -- 전화번호
    mem_addr varchar2(128)    -- 주소
);

*/
public class MemberInfoTest {

	private IMemberService memService;
	
	private Scanner scan;

	public MemberInfoTest() {
		scan = new Scanner(System.in);
		memService = new MemberServiceImpl();
	}
	
	
	/**
	 * 메뉴를 출력하는 메서드
	 */
	public void displayMenu(){
		System.out.println();
		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. 자료 검색");
		System.out.println("  6. 작업 끝.");
		System.out.println("----------------------");
		System.out.print("원하는 작업 선택 >> ");
	}
	
	/**
	 * 프로그램 시작메서드
	 */
	public void start(){
		int choice;
		do{
			displayMenu(); //메뉴 출력
			choice = scan.nextInt(); // 메뉴번호 입력받기
			switch(choice){
				case 1 :  // 자료 입력
					insertMember();
					break;
				case 2 :  // 자료 삭제
					deleteMember();
					break;
				case 3 :  // 자료 수정
					updateMember();
					break;
				case 4 :  // 전체 자료 출력
					displayMemberAll();
					break;
				case 5 :  // 자료 검색
					getsearchMember();
					break;
				case 6 :  // 작업 끝
					System.out.println("작업을 마칩니다.");
					break;
				default :
					System.out.println("번호를 잘못 입력했습니다. 다시입력하세요");
			}
		}while(choice!=6);
	}
	
	/**
	 * 회원정보를 삭제하는 메서드
	 * (입력받은 회원 ID를 이용하여 삭제한다.)
	 */
	private void deleteMember() {
		System.out.println();
		System.out.println("삭제할 회원 정보를 입력하세요.");
		System.out.print("회원 ID >> ");
		String memId = scan.next();
		
		int cnt = memService.deleteMember(memId);
		
		if(cnt > 0) {
			System.out.println(memId + "회원 삭제  성공");
		} else {
			System.out.println(memId + "회원 삭제  실패");
		}
	}

	/**
	 * 회원 정보를 수정하는 메서드
	 */
	private void updateMember() {
		boolean chk = false;	// 기존 회원 존재여부 체크 
		String memId = "";
		
		do {
			System.out.println();
			System.out.println("수정할 회원 정보를 입력하세요.");
			System.out.print("회원 ID >> ");
			memId = scan.next();
			
			chk = getMember(memId);
			
			if(!chk) {
				System.out.println(memId + "인 회원은 없습니다.");
				System.out.println("다시 입력해주세요");
			}
		} while(chk== false);
		
		System.out.print("회원 이름 >> ");
		String memName = scan.next();
		
		System.out.print("회원 전화번호 >> ");
		String memTel = scan.next();
		
		scan.nextLine();	// 입력 버퍼 비우기
		System.out.print("회원 주소 >> ");
		String memAddr = scan.nextLine();
		
		MemberVO mv = new MemberVO();
		
		mv.setMemId(memId);
		mv.setMemName(memName);
		mv.setMemTel(memTel);
		mv.setMemAddr(memAddr);
		
		int cnt = memService.updateMember(mv);
		
		if(cnt > 0) {
			System.out.println(memId + "회원의 정보를 수정 완료.");
		} else {
			System.out.println(memId + "회원의 정보를 수정 실패.");
		}
	}

	/**
	 * 전체 회원을 출력하는 메서드
	 */
	private void displayMemberAll() {
		System.out.println();
		System.out.println("--------------------------------------");
		System.out.println("ID\t이름\t전화번호\t\t주  소");
		System.out.println("--------------------------------------");
	
		List<MemberVO> memList = memService.displayMemberAll();
		
		for(MemberVO memVO : memList) {
			
			System.out.println(memVO.getMemId()+ "\t" + memVO.getMemName() + "\t"
					+ memVO.getMemTel()+ "\t\t" + memVO.getMemAddr());
		}
		
		System.out.println("--------------------------------------");
		System.out.println("출력작업 끝...");
	}
	
	/**
	 * 회원을 추가하는 메서드
	 */
	private void insertMember() {
		boolean chk = false;	// 기존 회원 존재여부 체크 
		String memId = "";
		
		do {
			System.out.println();
			System.out.println("추가할 회원 정보를 입력하세요.");
			System.out.print("회원 ID >> ");
			memId = scan.next();
			
			chk = getMember(memId);
			
			if(chk) {
				System.out.println("회원 ID가 " + memId + "인 회원은 이미 존재합니다");
				System.out.println("다시 입력해주세요");
			}
		} while(chk==true);
		
		System.out.print("회원 이름 >> ");
		String memName = scan.next();
		
		System.out.print("회원 전화번호 >> ");
		String memTel = scan.next();
		
		scan.nextLine();	// 입력 버퍼 비우기
		System.out.print("회원 주소 >> ");
		String memAddr = scan.nextLine();
		
		MemberVO mv = new MemberVO();
		
		mv.setMemId(memId);
		mv.setMemName(memName);
		mv.setMemTel(memTel);
		mv.setMemAddr(memAddr);
		
		int cnt = memService.insertMember(mv);
		
		if(cnt > 0) {
			System.out.println(memId + "회원 추가 성공");
		} else { 
			System.out.println(memId + "회원 추가 실패");
		}
	}

	/**
	 * 회원 ID를 이용하여 회원이 있는지 알려주는 메서드
	 * @param memId
	 * @return
	 */
	private boolean getMember(String memId) {
		return memService.getMember(memId);
	}

	/**
	 * 회원 정보를 검색하는 메서드
	 */
	public void getsearchMember() {
		/**
		 * 검색할 회원ID, 회원이름, 전화번호, 주소를 입력하면 검색한 정보만 사용하여 검색하는 기능을 구현
		 * 주소는 입력한 값이 포함만 되어도 검색되도록 한다.
		 * 입력을 하지 않을 자료는 엔터키로 다음 입력으로 넘긴다.
		 */
		
		scan.nextLine();	// 입력 버퍼 지우기
		System.out.println();
		System.out.println("검색할 정보를 입력하세요.");
		
		System.out.print("회원ID >> ");
		String memId = scan.nextLine().trim();
		
		System.out.print("회원이름 >> ");
		String memName = scan.nextLine().trim();
		
		System.out.print("회원 전화번호 >> ");
		String memTel = scan.nextLine().trim();
		
		System.out.print("회원 주소 >> ");
		String memAddr = scan.nextLine().trim();
		
		MemberVO mv = new MemberVO();
		mv.setMemId(memId);
		mv.setMemName(memName);
		mv.setMemTel(memTel);
		mv.setMemAddr(memAddr);
		
		List<MemberVO> memList = memService.getSearchMember(mv);
		
		// 입력한 정보로 검색한 내용을 출력하기
		System.out.println();
		System.out.println("--------------------------------------");
		System.out.println("ID\t이름\t전화번호\t\t주  소");
		System.out.println("--------------------------------------");
	
		
		for(MemberVO memVO : memList) {
			
			System.out.println(memVO.getMemId()+ "\t" + memVO.getMemName() + "\t"
					+ memVO.getMemTel()+ "\t\t" + memVO.getMemAddr());
		}
		
		System.out.println("--------------------------------------");
		System.out.println("검색작업 끝...");
	}
	
	
	public static void main(String[] args) {
		MemberInfoTest memObj = new MemberInfoTest();
		memObj.start();
	}
}

 

2) IMemberService

package kr.or.ddit.member.service;

import java.util.List;

import kr.or.ddit.member.vo.MemberVO;

/**
 * 실제 DB와 연결해서 SQL문을 수행하여 결과를 받아 Controller에 전달하는 Service의 interface
 */
public interface IMemberService {
	
	/**
	 * MemberVO에 담긴 자료를 DB에 INSERT하는 메서드
	 * @param mv DB에 INSERT할 자료가 저장된 MemberVO 객체
	 * @return DB작업이 성공하면 1이상의 값이 반환되고 실패하면 0이 반환된다.
	 */
	public int insertMember(MemberVO mv);
	
	/**
	 * 회원 ID를 매개변수로 받아서 그 회원 정보를 삭제하는 메서드 
	 * @param memId
	 * @return 작업성공 : 1, 작업실패 : 0
	 */
	public int deleteMember(String memId);
	
	/**
	 * 하나의 MemverVO 자료를 이용하여 DB를 UPDATE하는 메서드
	 * @param mv UPDATE할 회원정보가 들어있는 MemberVO 객체
	 * @return 작업성공 : 1, 작업실패 : 0
	 */
	public int updateMember(MemberVO mv);
	
	/**
	 * DB의 mymember 테이블의 전체 레코드를 가져와서  List에 담아서 반환하는 메서드
	 * @return MemberVO 객체를 담고 있는 List 객체
	 */
	public List<MemberVO> displayMemberAll();
	
	/**
	 * 주어진 회원ID가 존재하는지 여부를 알아내는 메서드
	 * @param memId
	 * @return 해당 회원이 존재하면 true, 없으면 false
	 */
	public boolean getMember(String memId);
	
	/**
	 * MemberVO에 담긴 자료를 이용하여 회원을 검색하는 메서드
	 * @param mv 검색할 자료가 담긴 MemberVO 객체
	 * @return 검색된 결과를 담은 List 객체
	 */
	public List<MemberVO> getSearchMember(MemberVO mv); 
}

 

3) MemberServiceImpl

package kr.or.ddit.member.service;

import java.util.List;

import kr.or.ddit.member.dao.IMemberDao;
import kr.or.ddit.member.dao.MemberDaoImpl;
import kr.or.ddit.member.vo.MemberVO;

public class MemberServiceImpl implements IMemberService{
	
	private IMemberDao memDao;
	
	public MemberServiceImpl() {
		memDao = MemberDaoImpl.getInstance();
	}
	
	@Override
	public int insertMember(MemberVO mv) {
		return memDao.insertMember(mv);
	}
	
	@Override
	public int deleteMember(String memId) {
		return memDao.deleteMember(memId);
	}

	@Override
	public int updateMember(MemberVO mv) {
		return memDao.updateMember(mv);
	}

	@Override
	public List<MemberVO> displayMemberAll() {
		return memDao.displayMemberAll();
	}

	@Override
	public boolean getMember(String memId) {
		return memDao.getMember(memId);
	}

	@Override
	public List<MemberVO> getSearchMember(MemberVO mv) {
		return memDao.getSearchMember(mv);
	}
}

 

4) IMemberDao

package kr.or.ddit.member.dao;

import java.util.List;

import kr.or.ddit.member.vo.MemberVO;

/**
 * 실제 DB와 연결해서 SQL문을 수행하여 결과를 받아 Service에 전달하는 DAO의 interface
 */
public interface IMemberDao {
	
	/**
	 * MemberVO에 담긴 자료를 DB에 INSERT하는 메서드
	 * @param mv DB에 INSERT할 자료가 저장된 MemberVO 객체
	 * @return DB작업이 성공하면 1이상의 값이 반환되고 실패하면 0이 반환된다.
	 */
	public int insertMember(MemberVO mv);
	
	/**
	 * 회원 ID를 매개변수로 받아서 그 회원 정보를 삭제하는 메서드 
	 * @param memId
	 * @return 작업성공 : 1, 작업실패 : 0
	 */
	public int deleteMember(String memId);
	
	/**
	 * 하나의 MemverVO 자료를 이용하여 DB를 UPDATE하는 메서드
	 * @param mv UPDATE할 회원정보가 들어있는 MemberVO 객체
	 * @return 작업성공 : 1, 작업실패 : 0
	 */
	public int updateMember(MemberVO mv);
	
	/**
	 * DB의 mymember 테이블의 전체 레코드를 가져와서  List에 담아서 반환하는 메서드
	 * @return MemberVO 객체를 담고 있는 List 객체
	 */
	public List<MemberVO> displayMemberAll();
	
	/**
	 * 주어진 회원ID가 존재하는지 여부를 알아내는 메서드
	 * @param memId
	 * @return 해당 회원이 존재하면 true, 없으면 false
	 */
	public boolean getMember(String memId);
	
	/**
	 * MemberVO에 담긴 자료를 이용하여 회원을 검색하는 메서드
	 * @param mv 검색할 자료가 담긴 MemberVO 객체
	 * @return 검색된 결과를 담은 List 객체
	 */
	public List<MemberVO> getSearchMember(MemberVO mv); 
	
}

 

5) MemberDaoImpl

package kr.or.ddit.member.dao;

import java.io.IOException;
import java.io.Reader;
import java.nio.charset.Charset;
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 com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

import kr.or.ddit.member.vo.MemberVO;
import kr.or.ddit.util.JDBCUtil2;

public class MemberDaoImpl implements IMemberDao{
	
	private static IMemberDao memDao;
	
	private SqlMapClient smc;
	
	private MemberDaoImpl() {
		try {
			
			// 1-1. xml 문서 읽어오기
			Charset charset = Charset.forName("UTF-8"); // 설정파일의 인코딩 설정
			Resources.setCharset(charset);
			Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
			
			// 1-2. 위에서 읽어온 Reader 객체를 이용하여
			// 실제 작업을 진행할 객체 생성
			smc = SqlMapClientBuilder.buildSqlMapClient(rd);
			
			rd.close();
			
		} catch(IOException e) {
			e.printStackTrace();
		}
	}
	
	public static IMemberDao getInstance() {
		if(memDao == null) {
			memDao = new MemberDaoImpl();
		}
		return memDao;
	}
	
	@Override
	public int insertMember(MemberVO mv) {
		
		int cnt = 0;
		
		try {
			Object obj = smc.insert("member.insertMember",mv);
			
			if(obj == null) {
				cnt = 1;
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return cnt;
	}

	@Override
	public int deleteMember(String memId) {
		
		int cnt = 0;
		
		try {
			cnt = smc.delete("member.deleteMember", memId);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return cnt;
	}

	@Override
	public int updateMember(MemberVO mv) {
		
		int cnt  = 0;
		
		try {
			cnt = smc.update("member.updateMember",mv);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return cnt;
	}

	@Override
	public List<MemberVO> displayMemberAll() {
		
		List<MemberVO> memList = new ArrayList<MemberVO>();
		
		try {
			memList = smc.queryForList("member.getMemberAll");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return memList;
	}

	@Override
	public boolean getMember(String memId) {
		
		boolean chk = false;
		
		try {
			MemberVO mv = (MemberVO) smc.queryForObject("member.getMember", memId);
			
			if(mv != null) {
				chk = true;
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return chk;
	}

	@Override
	public List<MemberVO> getSearchMember(MemberVO mv) {
		
		List<MemberVO> memList = new ArrayList<>();
		
		try {
			memList = smc.queryForList("member.getSearchMember", mv);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return memList;
	}
}

 

6) SqlMapClientFactory

package kr.or.ddit.util;

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;

/**
 * SqlMapClient 객체를 제공하는 팩토리 클래스  
 */
public class SqlMapClientFactory {
	private static SqlMapClient smc;	// SqlMapClient 객체 변수 선언
	
	private SqlMapClientFactory() {
		
	}
	
	public static SqlMapClient getInstance() {
		if(smc == null) {
			try {
				
				// 1-1. xml 문서 읽어오기
				Charset charset = Charset.forName("UTF-8"); // 설정파일의 인코딩 설정
				Resources.setCharset(charset);
				Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
				
				// 1-2. 위에서 읽어온 Reader 객체를 이용하여
				//      실제 작업을 진행할 객체 생성
				smc = SqlMapClientBuilder.buildSqlMapClient(rd);
				
				rd.close();
				
			} catch(IOException e) {
				System.err.println("SqlMapClient 객체 생성 실패!");
				e.printStackTrace();
			}
		}
		
		return smc;
		
	}
}

 

7) member.xml

<?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">
<!-- namespace속성 : 아래에서 작성한 SQL을 호출할 때 같이 사용된다. -->			
<sqlMap namespace="member">
	<!-- 
		이 영역에 sql문에 맞는 태그를 사용하여 SQL문을 기술한다.
		
		사용할 수 있는 기본적인 태그들
		<select> ~~~ </select>
		<insert> ~~~ </insert>
		<update> ~~~ </update>
		<delete> ~~~ </delete>
	 
	 위 태그에서 사용되는 속성들
	 1) id 속성 : 해당 태그를 호출할 때 <SqlMap> 태그의 namespace와 연결하여 사용하는 이름
	 
	 2) parameterClass 속성 : sql문에 사용될 데이터가 들어있는 객체를 지정한다.
	 				 	     (보통은 VO클래스, 자바의 자료형 이름 등이 사용된다)
	 				 	     (typeAlias로 지정한 alias명을 사용할 수 있다.)
	 				 	     
	 3) resultClass 속성 : select 문을 실행한 결과를 닫을 객체를 지정한다.
	                     (보통 VO클래스나 자바의 자료형 이름을 사용한다.) 				 	     
	 
	 -->
	 
	 <resultMap class="memVO" id="memberMap">
	 	<result property="memId" column="mem_id"/>
	 	<result property="memName" column="mem_name"/>
	 	<result property="memTel" column="mem_tel"/>
	 	<result property="memAddr" column="mem_addr"/>
	 </resultMap>
	 
	 
	 

	<insert id="insertMember" parameterClass="kr.or.ddit.member.vo.MemberVO">
	INSERT INTO  MYMEMBER 
	(MEM_ID,MEM_NAME,MEM_TEL,MEM_ADDR)
	VALUES (#memId#, #memName#, #memTel#, #memAddr#) 
	</insert>

	<update id="updateMember">
	UPDATE MYMEMBER 
	   SET MEM_NAME = #memName# ,  MEM_TEL = #memTel# , MEM_ADDR = #memAddr#
	 WHERE MEM_ID = #memId#
	</update>

	<delete id="deleteMember" parameterClass="String">
	DELETE FROM MYMEMBER
	 WHERE MEM_ID = #memId#
	</delete>
	
	<select id="getMemberAll" resultMap="memberMap">
		select * from mymember
	</select>
	
	<select id="getMember" resultMap="memberMap">
		select * from mymember where MEM_ID = #memId#
	</select>
	
	<select id="getSearchMember"  resultMap="memberMap">

		SELECT * FROM MYMEMBER WHERE 1=1
		
	 	<isNotEmpty property="memId">
	 		AND MEM_ID = #memId#
	 	</isNotEmpty>
	 	
	 	<isNotEmpty property="memName">
			 AND MEM_NAME = #memName#
	 	</isNotEmpty>
	 	
	 	<isNotEmpty property="memTel">
     		AND MEM_TEL = #memTel#
	 	</isNotEmpty>
	 	
	 	<isNotEmpty property="memAddr">
	 		AND MEM_ADDR LIKE '%' || #memAddr# || '%'
	 	</isNotEmpty>
	 	
	</select>

</sqlMap>			

 

 

8) SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
	<!-- 
	DB와 연결하는 정보를 properties파일에 설정해 놓고 이 properties파일의
	내용을 읽어와 설정한다.
	 -->
	<properties resource="SqlMapConfig.properties" />
	
	<!-- ibatis를 처리하기 위한 환경설정 부분 -->
	<settings cacheModelsEnabled="true" enhancementEnabled="true"
		lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"
		maxTransactions="5" useStatementNamespaces="true" />

	<!-- 
	VO클래스등의 이름이 패키지명까지 기술하면 길어지는데 이것을 간단히
	표시하기 위해서 alias를 지정할 수 있다.
	형식) <typeAlias alias="alias명" type="클래스의 풀네임"/>
	 -->
	<typeAlias alias="memVO" type="kr.or.ddit.member.vo.MemberVO"/>

	<!-- 
	DB와의 연결을 처리하는 부분
	SqlMapConfig.properties에 설정해 놓은 정보를 이용하여 구성한다.
	1. SIMPLE => SimpleDataSourceFactory
		SimpleDataSource는 데이터소스를 제공하는 컨테이너가 없는 경우 connection을 제공하기 위해 기본적으로 pooling 데이터소스 구현을 제공한다. 
		이것은 iBATIS SimpleDataSource connection pooling을 기반으로 한다.
		
	2. DBCP => DbcpDataSourceFactory
	DbcpDataSourceFactory는 DataSource API를 통해 connection pooling 서비스를 제공하기 위해 DBCP를 사용한다.
	이 DataSource는 어플리케이션/웹 컨테이너가 DataSource 구현물을 제공하지 못하거나 standalone 어플리케이션을 구동할 때 이상적이다.
    
    3. JNDI => JndiDataSourceFactory
 	JndiDataSourceFactory 는 어플리케이션 컨테이너내 JNDI 컨텍스트로부터 DataSource 구현물을 가져와야 한다. 
 	이것은 어플리케이션 서버를 사용중이고 컨테이너 관리 connection pool 과 DataSource 가 제공될 때 사용한다.
 	JDBC DataSource 구현물에 접근하기 위한 표준적인 방법은 JNDI 컨텍스트를 통하여 접근하는 것이다.



	 -->
	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
		<!--
			각종 설정을 직접 기술해서 처리할 수도 있다. 
			<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" />
		 -->
			<property name="JDBC.Driver" value="${driver}" />
			<property name="JDBC.ConnectionURL" value="${url}" />
			<property name="JDBC.Username" value="${username}" />
			<property name="JDBC.Password" value="${password}" />
		</dataSource>
	</transactionManager>
	
	<!-- 
	실제 처리할 SQL문은 xml문서로 따로 만든 후
	그 xml문서와 아래와 같이 연결하여 사용한다.
	형식) <sqlMap resource="경로명/파일명.xml"/> 
	-->
	<sqlMap resource="kr/or/ddit/sqlmap/member.xml"/>
</sqlMapConfig>

 

 

9) SqlMapConfig.properties (오라클 Username과 초기에 설정한 password 입력)

# SqlMapConfig.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
username=
password=

 


 

 

'High Java > IBatis' 카테고리의 다른 글

[Java] IBatis를 이용한 게시판 CRUD 예제  (0) 2020.10.26
Comments