https://mybatis.org/mybatis-3/dynamic-sql.html
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
<where>
<foreach item="item" index="index" collection="list"
open="ID in (" separator="," close=")" nullable="true">
#{item}
</foreach>
</where>
</select>
일단 이게 기본 코드
검색해보면 자료는 많은데 내가 적용을 못해서 오전을 다 날렸다
원인1. list로 담아보낼지 map에 담아보낼지 확실치 않아서 이리저리 왔다갔다 함.
원인2. 배열에 담기로 결정한 후 collection="array"로 해야 한다는 걸 뒤늦게 앎.
(어떤 경우에는 array가 아니가 키값을 써야 할때도 있음. )
원인3. 이게 마지막까지 ...붙잡고 있던 이유 였는데
insert all 하고
into .. 부터 시작해야 한다.................................................................................................
1. 나의 데이터는
String A = "가,나,다,라";
이고 이 값을 콤마로 구분해서 4번 insert할거다. 횟수는 정해지지 않음.
=>
String[] A_arr = subject.split(",");
sqlSession.insert("Mapper.insertA",A_arr);
2. 마이바티스에서 <insert 말고 <update사용
=>
<update id="insertA" parameterType="java.util.ArrayList">
<foreach collection="array" item="item" open="INSERT ALL" separator=" " close="SELECT * FROM DUAL">
INTO 테이블명 (컬럼1,컬럼2)
VALUES (#{item},"하하하")
</foreach>
</update>
https://blog.naver.com/sonmit002/221311028574
https://haenny.tistory.com/255
https://windingroad.tistory.com/51
- 객체의 속성 값을 칼럼으로 사용할 때는 $문자를, 값으로 사용할 때는 #문자를 앞에 붙여 사용한다.
https://zorba91.tistory.com/189
- 구분자는 콤마가 아닌 공백(" ")으로 처리된다.
foreach 자체 기능을 통해 open에 insert all을 해주고 마지막 select * from dual로 처리해준다.
* 추가내용: oracle을 사용하고 mybatis 사용시, xml문에서 mapper 형식을 insert(<insert id="" >)로 하면 sql command not properly ended 라는 에러가 난다. update(<update id="" ~~~>)로 해주어야 에러가 나지 않는다.
https://dejavuhyo.github.io/posts/mybatis-foreach/
https://java119.tistory.com/85
https://mingggu.tistory.com/71
https://wook-dragon.tistory.com/8
'차근차근 > Oracle' 카테고리의 다른 글
Regexp_Substr를 사용해 구분자를 통한 row생성 (0) | 2022.09.19 |
---|---|
ORA-01461 Long 열에 입력할때만 Long 값을 바인딩 할 수 있다. (0) | 2022.07.05 |
[Oracle] FETCH 구문 사용하기 (0) | 2022.06.03 |
tnsnames.ora파일 (0) | 2022.05.19 |
REGEXP_SUBSTR , LEVEL, CONNECT BY, INSTR (0) | 2022.04.13 |