highJAVA

Ibatis

unemo 2020. 12. 2. 20:02
반응형

ibatis는 프레임웍 이름임

어떤부분을 대체하기위해 스느냐? 지금까지 해왔던 JDBC코딩.. 이 반복됨.. 불편한거임

그 부분을 효율적으로 사용하기위에 프래임웍만든거. 그 이름이 아이바티스

XML문서를 작성해서 자바bins (게터세터있는오브젝트) 보통 VO 로 만든거...

ibatis는 xml로 모든걸 다한다. 설정관련된거 다 xml에서... 

jdbc코딩을 편리하게해주는 프레임웍

매핑?? xml로 뭔가 필요한 설정정보를 넣어놓으면 정보가필요한 객체와 매핑을 어떻게 이어줄지 그 매핑관련된 정보를

xml에 세팅해줄거임

프레임을 지원ㅇ해주는 클래스파일( jar파일)이 필요함 ibatis 파일 가지고와야함

해당프로젝트 우클릭 빌드패스 컨피겨빌드패스

 

 

ibatis가 제공하는 기능을 써먹으려면

사용할지말지 설정하는게 필요함 (나는 기능중에 이런기능ㅇ르 쓸거야..그런거)

그래서 프레임웍쓸때는 설정파일이 필요함

 

 

 

 

 

 

아이바티스로 다오단 짜는거니까 제대로알아야함

 

 

 

sqlmapcongig가 루트

properties 파일에 설정정보가잇따고 알려준는거 (누구한테? 아이바티스라는 프레임웍에)

아이바티스 기능에대한 세팅부분 (몰라두되고 디폴트설정이라는것만.. 우리가봐야할부분은 맨마지막

usestatementNamespace : 뭔가사용한다 statme를 사용한다 (구문을) 어떤구문?/ namepace라는구문을

즉 네임스페이스기능을 사용하겠다는 속성 : true니까 사용하겠다. 요새는 쓰는게 추세임

중프때는 아이바티스 최프떄는 마이바티스 쓸거임..

 

 

타입알리어스 : 타입에대한 별칭.. 타입은 클래스를 지칭.. 타입에 별명을 줄수있음

타입= 어쩌구저꺼구 이름이 기니까 memVO로 별명을 지어주겠다.

 

 

실제 디비커넥션관련된부분

우리가봐야할건 JDBC driver정보

url, username, password 넣어야함

직접넣으면 하드코딩되니까 프로퍼티스 (맨위에 위치알려준)파일 이용하자

${ } < 프로퍼티스 안의 속성을 이용해서 리플레이스시키는 개념(place holder문법)

 

 

 

 

 

 

xml 저 파일안에 쿼리를 모을거임

저거 수정한거임!!!

찾을 쿼리의 위치를 알려주는거임

 

이제 필요한 아이바티스 객체를 만들어서 쿼리실행할거임

 

 

 

일단 주석처리

 

이제 예제를 간단하게 crud 해보자

클래스만들어서 시작..

package kr.or.ddit.basic;

import java.io.IOException;
import java.io.Reader;
import java.nio.charset.Charset;
import java.sql.SQLException;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

import kr.or.ddit.vo.MemberVO;

public class IbatisTest {
	public static void main(String[] args) {
		// ibatis를 이용하여 DB자료를 처리하는 작업순서
		//config파일을 ibatis에게 알려주고 그 정보를 바탕으로 아이바티스객체를 만들거임
		//아이바티스 기능을 가진 객체를 만들어서 우리가 걔한테 쿼리를 시킬거임
		//1. ibatis의 환경설정 파일을 읽어와 실행시킨다.
		try {
			// 1-1 설정파일을 읽을거임. xml 문서 읽어오기
			Charset charset = Charset.forName("UTF-8");//우리가한국인이라해야함
			Resources.setCharset(charset);//ibatis의 resources를
			Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");//파일을읽어라
			
			//이제 아이바티스 객체를 만들어낼거임
			//1-2 위에서 읽어온 Reader객체를 이용하여 실제 작업을 진행할 객체 (ibatis객체)생성
			SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);//sqlclient객체를 리턴받자
			//인터페이스타입객체에 받아서 사용을 할거임
			
			//반납을 해줘야함
			rd.close(); //리더로 xml파일 다 읽었으니 반납
			
			//아이바티스 쓸라믄 smc필요함. 그거만드려고  선행작업을 한거임
			//smc안에는 sqlmapclietn객체가 있는거임
			//지금까지는 설정파일 읽는 작업... 이제 쓰기만 하면 됨
			
			//2. 실행할 sql문에 맞는 쿼리문을 호출해서 원하는 작업을 수행한다.
			//이놈을 가지고 실제 srud 하겠따.. 젤먼저 insert
			
			//2-1 insert 작업
			System.out.println("insert 작업 시작...");
			//1) 저장할 데이터를 VO에 담는다.
			MemberVO mv = new MemberVO();
			mv.setMemId("d001");
			mv.setMemName("강감찬");
			mv.setMemTel("010-4444-5555");
			mv.setMemAddr("경남 사천시");
			
			//2) sqlMapClient객체 변수를 이용하여 해당 쿼리문을 실행한다
			//형식) smc.insert("namespace값.id값",파라미터객체);
			//smc는 아이바티스객체, 아까 true로 놨던 namespace값이 여기서나옴.
			// 리턴값은 성공하면 null이 반환된다.
			Object obj = smc.insert("memberTest.insertMember", mv);//매개변수 하나짜리는 쿼리만.. 두개는 파라미터도 있는경우 인서트는 일반적으로 두개짜리
			//namespace를 memberTest로 지었고, insertMember는 쿼리를 부를수있는 쿼리아이디를 지어준거임
			if(obj == null) {
				System.out.println("insert작업 성공");
			}else {
				System.out.println("insert작업 실패!!");
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}catch (SQLException e) {
			e.printStackTrace();
		}
		
		
	}
}

 

 

 

test_sqlmap.xml 문서들어가서

 

 

sqlMap 파일안에 쿼리를 저장할거임

namespace는 왜만들까?  네임스패이스는 클래스작성할떄 같은 클래스이름을 작성할수있는 이유가

클래스가 저장되는 경로 (패키지이름)가 다르면 된다. 패키지는 분리하려고 만든개념인거임 같은이름의 클래스가 충돌나는걸 막으려고

마찬가지로 네임스페이스도 같은 목적임

이름공간을 나눠놓지않으면 같은 이름을 썼을때 충돌이나버리니까

이 안에 쿼리이름을 abc라고 써놓고 다른 xml에 abc라고 또 쓰면 컴터는 두개 다 등록해놯다가 abc실행해줘하면

두개가 잇으니까 이름충돌이 나버림

 

 

 

 

 

반응형

'highJAVA' 카테고리의 다른 글

JAVA IO  (0) 2020.12.04
클래스다이어그램  (0) 2020.12.04
log4J, 유즈케이스다이어그램  (1) 2020.12.03
mvc, singleton  (0) 2020.12.01
Properties ,MVC 패턴  (0) 2020.11.30