One way to solve this problem would be as follows:
def pessoaIds = [1, 2, 3, 4, 5]
def inSql = ""
//Monta uma variável String que será os itens da lista
//pessoaIds separadas por vírgual
pessoasIds.each {inSql = inSql + it + ","}
//Retira a vírgula que sobra no processo de criar a variável acima
inSql = inSql.substring(0,inSql.lenght()-1)
//Monta a consulta, incluindo a variável acima
def query = """
"SELECT * FROM Pessoa WHERE id IN(${inSql})"
"""
//Como estamos fazendo query.toString(), a String será avaliada
//antes de ser passada como parametro para o método eachRow
//Parte da avaliação é interpretar a variável inSql colocando o seu
//conteúdo na String, ou seja, o valor passado para o eachRow é
//um SQL já montado e sem parametro
sql.rows(query.toString()) { row ->
}
Note that I am not using parameters (? or: parameter) in SQL and this hurts the good principles of passing parameters to a SQL.
If this bothers you a lot, another way to solve it would be this (see: ):
def pessoaIds = [1, 2, 3, 4, 5]
def placeholders = []
//Monta um vetor de placeholders ? (para ser usado como parametro na query)
pessoaIds.each { placeholders << '?' }
//Monta a consulta, transformando o placeholders em uma string
//separada por virgula
def query = """
"SELECT * FROM Pessoa WHERE id IN(${placeholders.join(',')})"
"""
//Para esse caso, estamos efetivamente passando um parametro para
//a query
sql.rows(query, pessoaIds).each { println it }