Comme le mentionne l'autre réponse :la requête que vous avez publiée n'a rien sur l'ordre dans lequel vous souhaitez obtenir vos résultats, mais uniquement sur les résultats que vous souhaitez obtenir.
Pour ordonner vos résultats, j'utiliserais ORDER BY FIELD() :
SELECT * FROM foo f where f.id IN (2, 3, 1)
ORDER BY FIELD(f.id, 2, 3, 1);
La liste d'arguments de FIELD peut être de longueur variable.