1) sqlMapConfig 데이터베이스와 연결 xml 파일 형식이다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- 이 문서는 ibatis 의 환경 설정용 xml 문서 입니다. -->
<!-- pc 가 문서설정해줌 ibatis 라이브러리에 설정을 가져옴 -->
<!-- ibatis 와 ojdbc 라이브러리를 가져왔잖아. ojdbc 는 자바에서도 데이터베이스 sql에 접근해서 사용하기 위한 라이브러리였어. -->
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sl-map-config-2.dtd">
<!-- 환경설정 -->
<sqlMapConfig>
<!--
DB와 연결하는 정보를 properties 파일에 설정해 놓고
이 properties 파일의 내용을 읽어올 수 있도록 설정한다.
dbinfo.properties 요거는 properties 파일형식 dbinfo 는 내가지정한 파일이름
그 안에 데이터는 sql 이랑 연결할때 쓰는 user password driver, url 정보가 있음
-->
<properties resource="dbinfo.properties"/>
<!--
각각의 sqlMap 파일의 namespace와 아이디 속성값을 연결해서 실행할 쿼리문을 선택한다.
반장오빠랑 했던것 namespace 와 id속성값이 두개가 동일한애들을 동시에 접속불가.
1개만 같으면 가능
두개로 구분하는것
-->
<settings useStatementNamespaces="true" />
<!--
쿼리문에서 사용할 VO객체는 패키지 이름을 포함한 전체 이름을 사용해야 하는데 ( LprodVO 에 모든 행의 정보가 저장되는데, 그것을 불러오려면 패키지명, 클래스명까지 다 써야해서
그렇게 되면 문장이 너무 길어질 수 있다.
그래서 전체 이름 대신 사용할 alias 를 설정할 수 있다.
형식 : <typeAlias alias = "alias명" type="클래스의 전체이름" />
-->
<typeAlias alias="lprodVo" type="kr.or.ddit.basic.LprodVO"/>
<!-- DB와 연결을 처리하는 부분 -->
<transactionManager type = "JDBC">
<dataSource type="SIMPLE">
<property name ="JDBC.Driver" value="${driver}"/>
<property name ="JDBC.ConnectionURL" value="${url}"/>
<property name ="JDBC.Username" value="${user}"/>
<property name ="JDBC.Password" value="${pass}"/>
</dataSource>
</transactionManager>
<!-- 실행할 SQL 문을 등록한다. -->
<!--
실행할 SQL문을 xml 문서로 따로 작성한 후(여기서는 lprodTest) 그 xml 문서를 아래와 같이 등록하면 된다.
형식) <sqlMap resource="경로명/파일명.xml"/>
-->
<sqlMap resource="kr/or/ddit/basic/lprodTest.xml"/>
</sqlMapConfig>
2) LprodVO 에 데이터를 만들어 놓는다. 하나의 객체같이 (데이터 저장해 놓은것 )
package kr.or.ddit.basic;
public class LprodVO {
private int lprod_id;
private String lprod_gu;
private String 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;
}
}
3) xml 파일 형식이고 여기에 sql문장을 작성해 놓는다. lprodTest .
여기에 namespace 와 id 가 존재한다.
<?xml version="1.0" encoding="UTF-8"?>
<!--
이 xml 문서는 ibatis에서 실행할 SQL 문을 작성하는 문서입니다. -->
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/dtd-map-2.dtd">
<sqlMap namespace="lprod">
<!--
이 부분에 ibatis 에서 실행할 SQL 문에 맞는 태그를 사용하여 SQL문을 작성한다.
사용할 수 있는 기본적인 태그들
<select> ~~ </select>
<insert> ~~ </insert>
<update> ~~ </update>
<delete> ~~ </delete>
~~~~~
-->
<!--
id 속성 ==> Java 프로그램에서 실행할 쿼리문을 호출할 때 사용되는 이름
<sqlMap>태그의 namespace 속성값과 연결해서 사용한다.
(예 : lprod.insertLprod)
-> sqlMapConfig 에서 <settings useStatementNamespaces="true" /> 를
주었다는 것은 여기서 <sqlMap namespace="lprod"> namespace 랑 id="insertLprod" id를 연결해서 구분해서 사용해라 (다른것과 구분)
parameterClass 속성 => SQL문에 사용될 데이터가 들어있는 객체를 기술한다.
(보통 VO 클래스, 자바의 자료형이름 등이 사용된다. )
(VO 클래스 등을 기술할 때 해당 클래스의 전체이름( 패키지명까지 포함된 이름 ) 을 기술해야 한다.
-->
<!-- parameterClass 에서는 vo객체에서 패키지이름이랑 클래스이름 가져와서 써준다. -->
<!-- <insert id="insertLprod" parameterClass="kr.or.ddit.basic.LprodVO"> -->
<insert id="insertLprod" parameterClass="lprodVo"> <!-- allias 로지정하기 -->
insert into lprod (lprod_id, lprod_gu , lprod_nm )
values(#lprod_id#, #lprod_gu# , #lprod_nm#)
</insert>
<update id="updateLprod" parameterClass="lprodVo">
update lprod set lprod_id = #lprod_id#, lprod_nm = #lprod_nm#
where lprod_gu = #lprod_gu#
</update>
<!--
parameterClass 에 설정되는 값이 단일값이면 SQL문에 이 값을 나타내는 변수는 이름이 특별히 정해지지
않았다. (즉, 사용자가 임의로 지정할 수 있다. )
-->
<delete id= "deleteLprod" parameterClass="String">
<!-- delete from lprod
where lprod_gu = #lprod_gu# -->
delete from lprod
where lprod_gu = #asdadasdsad#
<!-- 이렇게 변수에 아무렇게나 써도 작동이 된다. -->
<!-- 만약 변수명에 key값을 한다면, #키값쓰면된다.# -->
</delete>
</sqlMap>
4) 실제로 실행되는 main 부분 LprodIbatisTest
package kr.or.ddit.basic;
import java.io.IOException;
import java.io.Reader;
import java.nio.charset.Charset;
import java.sql.SQLException;
import java.util.Scanner;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class LprodIbatisTest {
//iBatis 를 이용하여 DB 자료를 처리하는 순서 및 방법
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//1. iBatis의 환경 설정 파일(sqlMapConfig.xml) 을 읽어와서 실행한다.
try {
// 1-1 . 문자 인코딩 케릭터셋 설정하기
Charset charset = Charset.forName("UTF-8");
Resources.setCharset(charset);
// 1-2 환경 설정 파일을 읽어온다.
Reader rd = Resources.getResourceAsReader("sqlMapConfig.xml");
// 1-3 위에서 읽어온 Reader 객체를 이용하여 실제 환경설정을 완성한 후
// SQL 문을 호출해서 실행할 수 있는 객체를 생성한다.
SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);
rd.close(); // Reader 객체 닫기
// 환경설정 끝
//-----------------------------------------------------
//2. 실행할 SQL 문에 맞는 쿼리문을 호출해서 원하는 작업을 수행한다.
/* //2-1 . insert 연습
System.out.println("insert 작업 시작....");
System.out.println("lprod_id 입력 : ");
int lprodId = scan.nextInt();
System.out.println("lprod_gu 입력 : ");
String lprodGu = scan.next();
System.out.println("lprod_nm 입력 : ");
String lprodNm = scan.next();
//insert 할 데이터들을 VO 객체에 담는다.
LprodVO lprodVo = new LprodVO() ;
lprodVo.setLprod_id(lprodId);
lprodVo.setLprod_gu(lprodGu);
lprodVo.setLprod_nm(lprodNm);
//2) sqlMapClient 객체변수를 이용해서 처리할 쿼리문을 호출하여 실행한다.
// 형식 ) sqlMapClient 객체변수. insert("namespace값.id속성값" , 파라미터클래스 )
// 반환값 : insert 성공이면 : null insert 실패면 : 오류객체가 반환
//----------------------------------------------------------------------------------
Object obj = smc.insert("lprod.insertLprod", lprodVo);
if(obj == null ) {
System.out.println("insert 작업 성공!");
}else {
System.out.println("insert 작업 실패 ~~~~ ");
}
*/
//////////////////////////////////////////////////////////////////////////////////
/* //2-2 update 연습
System.out.println("update 작업 시작....");
System.out.println("수정할 lprod_gu 입력 : ");
String lprodGu = scan.next();
System.out.println("lprod_id 입력 : ");
int lprodId = scan.nextInt();
System.out.println("lprod_nm 입력 : ");
String lprodNm = scan.next();
LprodVO lprodVo2 = new LprodVO();
lprodVo2.setLprod_gu(lprodGu);
lprodVo2.setLprod_id(lprodId);
lprodVo2.setLprod_nm(lprodNm);
// 2) sqlMapClient 객체변수.update("namespace값.id속성값", 파라미터클래스);
// ==> 반환값 : 작업에 성공한 레코드 수
int cnt = smc.update("lprod.updateLprod",lprodVo2 );
if(cnt > 0) {
System.out.println("update 작업 성공.. ");
}else {
System.out.println("update 작업 실패 ");
}
System.out.println("---------------------------------------------");
*/
//2-3. delete 연습
System.out.println("delete 작업 시작...");
System.out.println("삭제할 Lprod_gu 입력 : ");
String lprodGu = scan.next();
// 1) sqlClient객체변수.delete("namespace값.id속성값" , 파라미터클래스 )
// 반환값 : 작업에 성공한 레코드 수
int cnt2 = smc.delete("lprod.deleteLprod", lprodGu);
if(cnt2 > 0) {
System.out.println("update 작업 성공.. ");
}else {
System.out.println("update 작업 실패 ");
}
System.out.println("---------------------------------------------");
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e ) {
e.printStackTrace();
}
}
}
댓글
댓글 쓰기