현재 어플리케이션에서 XML파일에 있는 SQL문들 중에서 find관련 SQL문들 입니다.
[#M_ more.. | less.. |
   <!-- find -->
   <select id="findByName" resultMap="memberMap">
       SELECT id, name, messengerId, email, blugAddress, phone
       FROM Member
       WHERE name = #name#;
   </select>

   <select id="findByMessengerId" resultMap="memberMap">
       SELECT id, name, messengerId, email, blugAddress, phone
       FROM Member
       WHERE messengerId = #messengerId#;
   </select>

   <select id="findByEmail" resultMap="memberMap">
       SELECT id, name, messengerId, email, blugAddress, phone
       FROM Member
       WHERE email = #email#;
   </select>

   <select id="findByBlugAddress" resultMap="memberMap">
       SELECT id, name, messengerId, email, blugAddress, phone
       FROM Member
       WHERE blugAddress = #blugAddress#;
   </select>

   <select id="findByPhone" resultMap="memberMap">
       SELECT id, name, messengerId, email, blugAddress, phone
       FROM Member
       WHERE phone = #phone#;
   </select>
_M#]
얼핏보면 전부 같아 보이지만 다들 매~우 조금씩 다릅니다. 좀더 세련되게 고치기 위해서 다음과 같이 코드를 수정합니다.
[#M_ more.. | less.. |
   <select id="find" resultMap="memberMap">
       SELECT id, name, messengerId, email, blugAddress, phone
       FROM Member
       WHERE
       <isNotNull property="phone">phone = #phone#</isNotNull>
       <isNotNull property="blugAddress">blugAddress = #blugAddress#</isNotNull>
       <isNotNull property="email">email = #email#</isNotNull>
       <isNotNull property="messengerId">messengerId = #messengerId#</isNotNull>
       <isNotNull property="name">name = #name#</isNotNull>
   </select>
_M#]
그리고 SqlmapMemberDao 클래스의 코드를 다음과 같이 맵을 사용하도록 수정합니다.
[#M_ more.. | less.. |
public List<Member> findByPhone(String phone) {
       Map<String, Object> params = new HashMap<String, Object>();
       params.put("phone", phone);
       return getSqlMapClientTemplate().queryForList("Member.find", params);
}
_M#]
이전의 SqlmapMemberDao 클래스에 있던 코드는 다음과 같았습니다.
[#M_ more.. | less.. |
public List<Member> findByPhone(String phone) {
      return getSqlMapClientTemplate().queryForList("Member.findByPhone", phone);
}
_M#]
코드에서의 차이는 각 메소드마다 구체적인 findByXXX와 같은 SQL문을 부르다가 좀더 추상적인 find라는 SQL을 부르게 바뀌었습니다. 이것도 이 전에 썼던 메소드 추상화와 비슷한 특징이 있는 것 아닌가 생각해봅니다.