res 영역 : dbinfo.properties : 데이터베이스 연결 정보를 저장해 놓는다.
--------------------------------------------------------------------------------------------------------
# properties 파일을 작성하는 방법은
# key값=value값 과 같은 모양으로 만듭니다.
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=Aurora
pass=java
-------------------------------------------------------------------------------------------------------
res 영역 : sqlMapConfig.xml 환경설정 해놓는 부분이다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- 이 문서는 ibatis 의 환경 설정용 xml 문서 입니다. -->
<!-- pc 가 문서설정해줌 ibatis 라이브러리에 설정을 가져옴 -->
<!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 파일의 내용을 읽어올 수 있도록 설정한다.
-->
<properties resource="dbinfo.properties"/>
<!--
각각의 sqlMap 파일의 namespace와 아이디 속성값을 연결해서 실행할 쿼리문을 선택한다.
-->
<settings useStatementNamespaces="true" />
<!--
쿼리문에서 사용할 VO객체는 패키지 이름을 포함한 전체 이름을 사용해야 하는데
그렇게 되면 문장이 너무 길어질 수 있다.
그래서 전체 이름 대신 사용할 alias 를 설정할 수 있다.
형식 : <typeAlias alias = "alias명" type="클래스의 전체이름" />
-->
<typeAlias alias="lprodVo" type="kr.or.ddit.basic.LprodVO"/>
<typeAlias alias="memVo" type="kr.or.ddit.member.vo.MemberVO"/>
<!-- 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 문서로 따로 작성한 후 그 xml 문서를 아래와 같이 등록하면 된다.
형식) <sqlMap resource="경로명/파일명.xml"/>
-->
<sqlMap resource="kr/or/ddit/basic/lprodTest.xml"/>
<sqlMap resource="kr/or/ddit/member/ibatis/mymember.xml"/>
</sqlMapConfig>
-----------------------------------------------------------------------------------------------------
src 영역 ~ 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.List;
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("---------------------------------------------");
*/
//2-4 select 연습
// 1) 응답 결과가 여러개의 레코드인 경우
// ==> 응답 결과가 여러개일 경우에는 queryForList()메서드를 사용하는데
// 이 메서드는 여러개의 레코드 각각을 VO 객체에 담은 후 이 VO 객체를 List 에 추가해서
// 추가하는 작업을 자동으로 수행한다.
// 형식 ) sqlMapClient객체변수.queryForList("namespace값.id속성값" , 파라미터클래스 )
// ==> SQL 문에 전달할 데이터가 없으면 '파라미터클래스'값을 생략할 수 있다.
// -> select * from lpro 같이 파라미터가 필요없는애들
System.out.println("1) select 연습(결과가 여러개일 경우....");
List<LprodVO> lprodList = smc.queryForList("lprod.getAllLprod");
for(LprodVO lpVo : lprodList) {
System.out.println("ID : " + lpVo.getLprod_id());
System.out.println("GU : " + lpVo.getLprod_gu());
System.out.println("NM : " + lpVo.getLprod_nm());
}
System.out.println("출력작업 끝");
//2) 응답 결과가 1개일 경우
// ==> 응답 결과가 1개일 경우에는 queryForObject() 메서드를 사용한다.
// 형식 ) sqlMapClient객체변수.queryForObject("namespace값.id속성값" , 파라미터클래스 )
System.out.println("2) select 연습 시작 ( 결과가 1개일 경우)....");
System.out.println("검색할 lprod_gu 입력 : ");
String lprodGu = scan.next();
LprodVO lprodVo =
(LprodVO) smc.queryForObject("lprod.getLprod" , lprodGu);
if(lprodVo == null) { //검색한 결과가 하나도 없으면 null 을 반환한다.
System.out.println("검색한 데이터가 하나도 없습니다.");
}else {
System.out.println("ID : " + lprodVo.getLprod_id());
System.out.println("GU : " + lprodVo.getLprod_gu());
System.out.println("NM : " + lprodVo.getLprod_nm());
System.out.println("출력끝");
}
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e ) {
e.printStackTrace();
}
}
}
---------------------------------------------------------------------------------------------------
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;
}
}
<?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 클래스, 자바의 자료형이름 등이 사용된다.(String , int 등 )
(VO 클래스 등을 기술할 때 해당 클래스의 전체이름( 패키지명까지 포함된 이름 ) 을 기술해야 한다. 만약 sqlMapConfig 에 Allias 를 별칭을 지정해주면
별칭을 대신 사용할 수도 있다.
-->
<!-- 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>
<!--
resultClass 속성 ==> select 문을 처리한 결과를 저장할 VO클래스나 자바 자료형이름을 지정한다.
select 한 결과가 여러개이면 자동으로 List 에 담아준다.
그래서 결과가 여러개일 경우에도 resultClass 속성에 지정하는 것은
1개의 레코드가 저장될 클래스나 자료형이름을 지정하면 된다.
-->
<select id="getAllLprod" resultClass="lprodVo" >
select * from lprod
</select>
<select id="getLprod" parameterClass="String" resultClass="lprodVo">
select * from lprod where lprod_gu = #lprod_gu#
</select>
</sqlMap>
댓글
댓글 쓰기