Mybatis inクエリ入力文字列パラメータの問題

2823 ワード

今日mybatisを使用してsqlクエリの問題に遭遇しました.ここで記録します.シナリオ:



その時、結果は1つしか現れなかったが、予想された結果は10個だったはずだ.ログをよく確認しました:
Parameters: 11,14,189,202,227,242,255,256,266,267,271,288,289,295,296,297,301,305,309,48,5(String)

確かに正確な入力パラメータがありますが、どのようにして結果を1つ返しますか?資料を調べて、最後に以下のように整理しました.
パラメータが:{}:JDBCプリコンパイル文(prepared statement)のパラメータタグとして解析されると、1つの#{}がパラメータプレースホルダとして解析される.{}:単純なstring置換のみで、動的SQL解析フェーズで変数置換が行われます.
つまり、実際のsql文は似ています.
select * from t_user where uid in ('11,14,189,202,227,242,255,256,266,267,271,288,289,295,296,297,301,305,309,48,5')

この場合、クエリの結果は望ましくありません.sql文を次のように変更します.
select
        u.uid as uid,
        u.nickname as nickName,
        u.mobile as mobile,
        um.balance as balance,
        concat(b.brand_name, m.model_name) as autoBrandName,
        u.register_time as registerTime

        from t_user u
        left join t_user_car c on c.uid = u.uid
        left join t_auto_model m on c.auto_model_id = m.auto_model_id
        left join t_auto_brand b on b.auto_brand_id = m.auto_brand_id
        left join t_user_money um on u.uid = um.uid
        WHERE
        u.uid in (${_parameter})
        order by u.uid

結果はすでに10件検出され、私たちが望む効果を達成し、パラメータ名が何であれ、変更しなければならないことを覚えています」parameter”