여러개의 List로 나오는 데이터를 DB에 저장하는 코드를 구현했다.
foreach문을 사용하여 구현될 코드를 구분하기 위해 세미콜론을 사용했다.
// xml mapper
<insert id="saveCrawlingData" parameterType="List">
<foreach collection="list" item="crawling" separator=";">
INSERT INTO m_crawling (crawlingseq, title)
VALUES (m_crawling_seq.NEXTVAL, #{crawling.title})
</foreach>
</insert>
### The error occurred while setting parameters
### SQL: INSERT INTO m_crawling (crawlingseq) VALUES (m_crawling_seq.NEXTVAL) ; INSERT INTO m_crawling (crawlingseq) VALUES (m_crawling_seq.NEXTVAL) ; INSERT INTO m_crawling (crawlingseq) VALUES (m_crawling_seq.NEXTVAL)
### Cause: java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
MyBatis는 세미콜론(;)을 쿼리 내에서 사용할 수 없어서 오류가 발생했다.
List 형태로 받은 데이터를 객체 형태로 받아, 객체를 저장하는 코드를 구현했다.
for (int i = 0; i < count; i++) {
Crawling crawling = crawlingDataList.get(i);
crawlingDao.saveCrawlingData(crawling);
}
// xml mapper
<insert id="saveCrawlingData" parameterType="Crawling">
INSERT INTO m_crawling
(crawlingseq, title)
VALUES
(m_crawling_seq.NEXTVAL, #{title})
</insert>