상단

Java에서 SQL Maps and Data Access Objects (DAO)로 알려진 Database 연동 플랫폼인 iBatis를 정리 한다.

 

iBatis 환경 설정


  • ORM(Object Relational Mapping)

    • 데이터베이스의 레코드를 직접 Java Class에 매핑하고 XML 형태의 SQL 문을 실행하는 Persistence Layer를 담당하는 Framework 개발 모델

     
  • /WEB-INF/classes/sqlMapConfig.xml : DB 정보와 mapper file 정보 등의 환경 설정 파일

  • mapper file (~Map.xml) : 실제 SQL문을 작성하는 XML 파일

 
 

sqlMapConfig.xml

{|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" 
|- |width="20%" align="center" style="color:#15470a; background-color:#91ce5c;"| settings |width="80%"|

  • cacheModelsEnabled : true. 캐시 가능

  • enhancementEnabled : false. 런타임시 바이트 코드 기능 향상

  • lazyLoadingEnabled : true

  • maxRequests : 512

  • maxSessions : 128

  • maxTransactions : 32

  • useStatementNamespaces : false
    align="center" style="color:#15470a; background-color:#91ce5c;"
    typeAlias
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| typeHandler |

 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| properties |

 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| sqlMap |

 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| transactionManager |

 
     
         
         
         
         
         
     
 

|}

 

Mapper file

  • Parameter, Query 문에서 해당 변수를 매개 변수로 사용

    • #name#

    • #name:VARCHAR#, #mailDomainSeq:INTEGER#

    • #nameArray#

  • Variable : $~$, 해당 변수로 Query문을 직접 생성

  • ? :

 
 

{|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" 
|- |width="20%" align="center" style="color:#15470a; background-color:#91ce5c;"| resultMap |width="80%"|

 
     
     
     
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| parameterMap |

 
     
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| select |

{|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" 
|- |width="25%" valign="top" style="background-color:#eee;"|id


|- |valign="top" style="background-color:#eee;"|parameterClass

전달되는 parameter의 class를 지정
valign="top" style="background-color:#eee;"
전달되는 parameter
-
valign="top" style="background-color:#eee;"
반환되는 resultMap의 class를 지정
-
valign="top" style="background-color:#eee;"
반환되는 값
-
valign="top" style="background-color:#eee;"
-
valign="top" style="background-color:#eee;"
  • resultMap 선언

 
 
     
 
  • SQL문 선언

 
 from parentTable a 
 '''left outer join childTable b on''' a.SEQ = b.PARENT_SEQ

|}

 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| selectKey |

 
     select case when max(bbs_id) is null then 1 else max(bbs_id)+1 end
       from tscheduler 
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| insert |

 
     insert into shf_shr_folder (mail_user_seq, folder_uid)
            values (#userSeq#, #fUid#)
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| update |

 
     update shf_shr_target set share_auth = #auth#, modify_time = #curTime# 
      where folder_uid = #fuid# and share_value = #email#
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| delete |

 
     delete from shf_shr_target where folder_uid = #value#
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| dynamic |

  • prepend : 동적 SQL문을 생성하기 전에 추가할 문자열

  • open : 시작하기 전에 추가할 문자열

  • close : 시작 후에 추가할 문자열

  • conjunction : SQL문 생성 사이 사이에 추가할 문자열

  • compareProperty : 비교되는 property

  • compareValue : 비교할 값

 
 
   
       
         #postId[](.md)#   
       
  
 
 
     
         mail_user_seq = #userSeq#
     
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| 연산 |

  • iterate :

  • isEqual :

  • isNotEqual :

  • isGreaterEqual :

  • isGreaterThan :

  • isLessEqual

  • isLessThan

  • isNull :

  • isNotNull :

  • isEmpty :

  • isNotEmpty :

  • isPropertyAvailable :

  • isNotPropertyAvailable :

  • isParameterPresent :

  • isNotParameterPresent :
    align="center" style="color:#15470a; background-color:#91ce5c;"
    cacheModel
 
     
     
     
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| sql |

  • 여기서 선언한 SQL문을 include 태그로 호출하여 사용 한다.

 
 
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| include |

  • sql 태그로 선언한 SQL문을 삽입 한다.

 
 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| procedure


|- |align="center" style="color:#15470a; background-color:#91ce5c;"| statement |

 

|- 
|align="center" style="color:#15470a; background-color:#91ce5c;"| Collection


|- |align="center" style="color:#15470a; background-color:#91ce5c;"| RowHandler | |}

 
  • Mapper file 사용법

    • Cache (CacheModel)

    • Sub Query 사용

      • List

 
 

DAO 프로그램


SqlMapClient

 Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
 SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

query

  • Select

 
 User user = (User) sqlMap.queryForObject(id, parameter);
 sqlMap.queryForList(id, parameter);
 sqlMap.queryForMap(id, parameter, key);
 
  • Insert

 
 Map map = new HashMap();
 map.put("mailUserSeq", userSeq);
 map.put("agingDay", agingDay);
 sqlMap.insert("~", map);
 
  • Update

 
 HashMap param = new HashMap();
 param.put("mailDomain", domainSeq);
 param.put("userSeq", userSeq);
 sqlMap.update("~", param);
 
  • Delete

 
 sqlMap.delete("~", ~);
 

참고 문헌


 
 

분류: 오픈소스 
Spring

최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :