MyBatis는 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하는 우수한 지속성 계층 프레임 워크입니다. MyBatis는 거의 모든 JDBC 코드의 수동 설정과 매개 변수 및 결과 세트의 검색 캡슐화를 제거합니다. MyBatis는 구성 및 원래 매핑, 맵핑 인터페이스 및 Java의 Pojos (일반 Old Java Objects)를 데이터베이스의 레코드로 사용하기 위해 간단한 XML 또는 주석을 사용할 수 있습니다.
Mybatis가 점점 더 인기를 얻고 있기 때문에 모든 사람들은 그 장점을 알고 있으므로 많은 말을하지 않고 핵심 요점에 대해 이야기 할 것입니다.
Mybatis는 동적 SQL 기능을 제공합니다. 조건에 따라 생성 된 동적 SQL을 작성할 수 있도록 <if> <where> <wher> <soyg> <foreach> 등을 사용할 수 있습니다. 그러나 중간에는 우리가 자주 사용하는 <f> 태그에 대한 약간의 오해가 있습니다. 정상적인 예를 들어 드리겠습니다.
<ID = "findActiveBlogwithTitLelike"ParameterType = "blog"resultType = "blog"> select * state = 'active'<if test = "title! = null"> 및 #{title} </if> </select>위의 예에서, 제목이 NULL과 같지 않은 경우 <If> 태그의 조건이 스 플라이싱되어 SQL 문이 동적이됩니다.
그러나 우리가 모든 조건을 판단 할 때, 당신은 다음과 같은 방식으로 씁니다.
<id = "indectiveBlogwithTitlelike"ParameterType = "blog"resultType = "blog"> select * <if test = "userId! = null"> state = 'active'</if> <teSt! = null "> #{title} </ifect>에서 <use </if> </ift> if </select>를 선택하십시오.문제 없어요? 적어도 구문 적으로 좋으며 적어도 정상적으로 SQL을 생성 할 수 있습니다.
그러나 모든 조건이 무효 일 때 어떻게됩니까?
* 블로그에서 *를 선택하십시오
당신은 그것을 보셨습니까? 그러한 SQL을 성공적으로 실행할 수 있습니까?
대답은 물론 아니요입니다.
그래서 어떻게해야합니까? 그런 다음 동적 SQL을 작성할 때 먼저 모든 조건이 사실이 아닌 경우 모든 조건이 발생하는지 여부와 조건이 없지만 조건이 없는지 여부를 고려하십시오. 그런 다음 모든 조건을 감싸기 위해 <where> 태그를 추가하기 만하면됩니다.
<ID = "indectiveBlogwithTitlelike"ParameterType = "blog"resulttype = "blog"> select * <where> <where> <if test = "userId! = null"> state = 'active'</if> <if test = "the test! = null"> 및 제목 #{title} </if> </select> </select>이런 식으로, 모든 조건이 사실이 아닌 경우, 어디에 설명되지 않을지.
이때 똑똑한 친구는 첫 번째 조건이 사실이 아니고 두 번째 조건이 사실이라면 SQL이 이렇게 될 것인지를 발견했습니다.
#{title}과 같은 블로그에서 * 블로그에서 *를 선택하십시오.<if> 태그를 사용하여 조건을 둘러싸고있을 때는 자동으로 제거됩니다.
위는 편집자가 동적 SQL 태그를 사용하여 Mybatis가 소개하는 작은 함정입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!