MyBatisは文字列をトラバースし、MyBatisで特別な記号を使用し、Sqlデータタイプの変換を行います


序文

過去2日間で、mybatisデータベースの操作でいくつかの問題が発生しました。実は、データベースの知識が少し弱いことが主な理由です。それは私の食べ物なので、ブログを書いてメモを取ります。将来遭遇しても混乱することはありません。

1つは、MyBatisが文字列をトラバースすることです。

myBatisト​​ラバーサルと言えば、mybatisが配列またはリンクされたリストをトラバースすることだけを考えているので、私のフィールドは「1、2、3」などの文字列です。したがって、最初に考えるのは、マッパーインターフェイスを呼び出すときに、文字列が次のように変換されることです。 mybatisに渡された配列は、実際、通常の状況では問題ありませんが、データベース設定が多すぎます。文字列を配列に呼び出す前に、メソッドマッピングを介してMyBatisト​​ラバーサルメソッドを呼び出し、データの不一致エラーを報告しました。これを防ぐことは不可能です。トラバースの方法が間違っているといつも思っていました
が、ストリングをトラバースする方法は次のとおりです。学んだけどこんな風に使える

 select * from t_toWho where id in
        <foreach collection="strs.split(',')" item="item" index="index"  open="(" close=")" separator=",">
            CONVERT(#{item},SIGNED)
        </foreach>

2.MyBatisで特別な記号を使用する

Mybatisでの以前の判断は次のとおりです。

<if test="A!=null and A!=“”"> </if>

それで今日私は突然サイズを比較しようとしましたそしてエラーを見つけました

要素タイプ「if」に関連付けられた「test」属性値に「<」文字を含めることはできません

わざと波を学びに行った

gtは>に
対応gteは> =に
対応ltは<に対応
lteは<=に
対応eqは==に
対応neqは!=に対応


ファジークエリを実装したいので、文字列のスプライシングについても少し遭遇しました。理由は上記と同じであるため、多くのマッピングがあります。そうでない場合、マッパーインターフェイスを呼び出すときに直接スプライシングする場合
はそれほど多くありません。直接言うことはあまりありません。コードをアップロード

and toWhoId like  CONCAT(CONCAT('%', #{toWhoId}), '%')


実際、いろいろな方法がありますが、上記の方法は直感的で良いと思います。もっと良い方法があれば、コメントで指摘してください。

Sqlデータタイプの変換

intからvarchar

123+ ''
CAST(123 AS CHAR);

varchariからint

CONVERT(#{item}、SIGNED)
CONVERT( '67'、SIGNED);


総括する

各ピットに良いメモをとってください、そうすればそれはどんどん良くなっていきます。

おすすめ

転載: blog.csdn.net/weixin_43691773/article/details/108905752