my batis 는 list 집합 이 지정 한 데 이 터 를 포함 하 는 지 여 부 를 어떻게 판단 합 니까?

수요
1.my batis 스 크 립 트 에서 list 에 어떤 문자열 이 있 는 지 판단 하려 고 합 니 다.
2.list 의 속성 을 동적 으로 사용 하여 데이터베이스 crud 필드 에 추가 합 니 다.
인터넷 에서 도 비슷 한 사례 를 찾 지 못 했 습 니 다.choose 기능 을 설정 하면 동적 sql 조합 을 쉽게 만 들 수 있 기 때문에 기록 합 니 다.
준비 하 다.
이전 스 크 립 트 에서 가장 많이 사 용 된 list 함 수 는 size 와 옮 겨 다 녔 습 니 다.그럼 my batis 스 크 립 트 에 함수 가 또 포함 되 어 있 는 거 아니에요?우선 list 의 유형 을 잘 알 아야 합 니 다.간단 한 테스트 용례 를 쓰다.

<select id="test" parameterType="java.util.Map" resultType="java.util.Map">
        select
          <if test="list.containsKey('0')">
              'yes' as a,
          </if>
          1
    </select>
list 다음 방법 contains Key 를 연결 합 니 다.실행 후 이상 을 던 집 니 다:
Caused by: org.apache.ibatis.ognl.MethodFailedException: Method "containsKey" failed for object [0, 1] [java.lang.NoSuchMethodException: java.util.Arrays$ArrayList.containsKey(java.lang.Character)]
우 리 는 list 의 유형 을 볼 수 있 습 니 다.Array List 입 니 다.contains Key 방법 은 없 지만 List 에 contains()방법 이 있어 야 한 다 는 것 을 알 고 있 습 니 다.그렇습니다.그러나 스 크 립 트 는 큰 시간 크기 를 계산 할 때()를 추가 하지 않 아 도 되 고 게다가 이상 을 던 질 수도 있다.
세부 사항
위의 이상 중 하 나 는 containsKey(java.lang.Character)입 니 다.Character 는 자바 에 문자 형식 입 니 다.즉,List 에 저 장 된[0,1]또는[0","1"]이 라면 다소 일치 하지 않 습 니 다.비교 정 수 는 contains(0)일 수 있 습 니 다.비교 문자열 은 작은 따옴표 일 수 밖 에 없습니다.자바 가 강제 유형 비 교 를 했 기 때 문 입 니 다.my batis 에서 더 블 따옴표 는 전의 문자" 를 사용 해 야 합 니 다.그래서 문자열 을 비교 하려 면 다음 과 같은 방법 이 있어 야 합 니 다.

 <if test="list.contains(&quot;0&quot;)">
              #{  }
        </if>
list 동적 추출 수
--삽입 필드 는 list 에서 직접 가 져 오고${list[0].retainDay}방식 을 통 해 가 져 옵 니 다.
물론 list 를 map 에 밀봉 할 수도 있 습 니 다.그러면 코드 에서 한 걸음 더 조작 해 야 합 니 다.

<insert id="insert">
           insert ignore into ads_circle_user_retain
             (eventDate,${list[0].retainDay})
           VALUES
            <foreach collection="list" item="item" separator=",">
                (#{item.eventDate1},#{item.readNum})
            </foreach>
           on DUPLICATE KEY UPDATE ${list[0].retainDay} = values(${list[0].retainDay})
    </insert>
집합(list)은 대응 하 는 문자열 이나 대상 이 있 는 지 판단 합 니 다.
집합 에 어떤 문자열 대상 이 존재 하 는 지 판단 하고 true 로 돌아 가 는 것 이 존재 하 며 false 로 돌아 가 는 것 이 존재 하지 않 습 니 다.

list.contains("str1")
집합 을 판단 할 때 똑 같은 대상 이 존재 합 니 다(모든 속성 이 같 습 니 다).true 로 돌아 가 는 것 이 존재 합 니 다.false 로 돌아 가 는 것 이 존재 하지 않 습 니 다.

list.containsAll(Objcet obj)
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기