Spring BootでMyBatisを使っており、一括でSQLを回したいとき
例えばSELECTやDELETEでIN
句を使って一括で値取得したり削除したりしたい場合ありますよね?foreachを使えばよいことは分かったのですが、List<Integer>
とかで受けた値をそのままIN
句に渡したいとき、微妙に例が見つからなくて困ったので備忘録です。
StudentMapper.kt
interface StudentMapper {
@DELETE(
"""
<script>
DELETE FROM Student
WHERE studentid IN
<foreach item="studentids" opem="("close=")" collection="studentids" separator=",">
#{studentids}
</foreach>
</script>
"""
)
fun removeStudentsByStudentId(studentids: List<Long>) {}
}
MyBatisだとxmlでこういった<select></select>
タグの中にこういったスクリプトタグで書く方法か、StringでSQL文を投げるかどっちかは見つかるのですが、SQL文の中にforeachを入れたいけど#{something}
的な渡し方だとforeachが出来ないっぽかったのでこういったやり方になりました。
一応動きますが、無理やり感があるので、もしもっと良い方法があれば知りたいです。(MyBatisの公式doc読んでも方法分からず)