MySQL では lastIndexOf に似た関数を使用する必要がある場合もありますが、すぐに使用できる既製の関数は用意されていないため、自分で見つけ出す必要があります。 まず、MySQL は次の 3 つの機能を提供します。instr(str:varchar, substr:varchar): str# 内の subsrtr の最初の出現を返します。例: 文字列 ab/cd/abc.html 内の b の最初の出現を検索します。select instr('ab/cd/abc.html', 'b'); # プログラマーが考えているのとは異なり、上記の結果は 2 です (添え字は 1 から始まりますので注意してください) 逆(str:varchar): 文字列を先頭から末尾まで反転し、abcを入力してcbaを出力します。 length(str:varcha): 文字列の長さを返します 上記の情報を知った後、ほとんどの人は lastInfdexOf 関数の実装方法を知っていると思います。 直接与える:select length('入力文字列') - instr(reverse('入力文字列'), '検索する文字列'); # 例: 文字列 'ab/cd/abc.html' 内の '/' の最後の位置を検索します。結果は次のとおりです: 5 length('ab/cd/abc.html') - instr(reverse('ab/cd/abc.html'), '/') を選択します。 最後に、最近私が遭遇した小さな要件を以下に示します。 データベース フィールドの値 (値は ab/cd/abc.html などのファイルのパス名) を取得し、ファイル名 (abc.html) を解析する SQL スクリプトを記述します。 右から選択(CONTENT_NAME, instr(reverse(CONTENT_NAME), '/') - 1) FILE_NAME config_template_contentから where lower(CONTENT_NAME) like '%/%.html'; # データに / が含まれている場合はこれで十分です。フィールド値が abcde.html の場合は判断が必要です〜 上記は正しい機能の使い方です。その有用性はご自身で探して(体験して)みてください。 補足: mysql の SELECT LAST_INSERT_ID() ステートメントの使用時に発生する問題 序文:主キーが自動増分であるデータベース テーブル (ユーザー テーブルなど) にレコードを挿入する場合、書き込まれたばかりのレコードの ID を取得することが期待されます (シナリオによっては、他の操作を実行するためにこの ID を取得する必要があるため)。この時点で、SELECT LAST_INSERT_ID() ステートメントを使用して、レコードが挿入された後に返される自動増分 ID の値を取得する必要があります。 例: /** * 苦情情報を挿入 * @param complaintInfoModel * @戻る */ @InsertProvider(タイプ = ComplaintInfoDao.ComplaintProviderSql.class、メソッド = "insertComplaintInfo") @SelectKey(ステートメント="SELECT LAST_INSERT_ID()", keyProperty="id", before=false, resultType=Integer.class) Integer insertComplaintInfo(ComplaintInfoModel complaintInfoModel); // データを挿入し、変更されたデータベースエントリの数を返します Mybatis の SelectKey は、データ挿入時に主キーが自動的に生成されない問題を解決するためのものです。主キーの生成方法を任意に設定できます。しかし、SelectKey がどれだけ優れていても、このような状況に遭遇しないようにしてください。結局のところ、非常に面倒です。 selectKey 属性
----1. SelectKeyは順序属性に注意する必要があります。 MySQL などの自動拡張をサポートするデータベースでは、正しい値を取得するために order を after に設定する必要があります。 Oracle のようなシーケンスを取得する場合は、before に設定する必要があります。そうしないと、エラーが報告されます。 -----2. さらに、Springを使用してトランザクションを管理する場合、 SelectKey と insert は同じトランザクション内にあるため、この場合、データがデータベースに挿入されないため、Mysql は自動的に増加されたキーを取得できません。 トランザクション管理をキャンセルすれば問題は発生しません。 以下は XML と注釈の例です。SelectKey は非常に単純なので、次の 2 つの例で十分です。 <挿入id="挿入" パラメータタイプ="マップ"> テーブル1 (名前) の値 (#{名前}) に挿入します <selectKey 結果タイプ="java.lang.Integer" キープロパティ="id"> コールID() </selectKey> </挿入> 上記の xml の入力パラメータは map であり、selectKey は結果を入力パラメータ map に格納します。 POJO でも状況は同じですが、注意すべき点が 1 つあります。keyProperty に対応するフィールドには、POJO 内に対応する setter メソッドが必要であり、setter のパラメーター型が一貫している必要があります。そうでない場合は、エラーが報告されます。 @Insert("table2 (name) の値(#{name}) に挿入") @SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class) int insertTable2(名前 name); 上記は注釈の形式です。 上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
<<: ウェブページ作成時のHTMLタグの使用に注意してください
>>: Dockerネットワーク作成に--subnetを追加した後の問題を解決する
今日午後ずっと私を悩ませたバグを記録する半月前から始めましょう。それから.................
導入簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...
目次導入準備するシステムイメージをダウンロードHyper-Vを有効にする新しい仮想ネットワークスイッ...
1. 関連概念1.1 Jenkins の概念: Jenkins は、使用されるプラットフォームに関係...
オンラインで検索して重複データを削除し、ID が最小のデータだけを残します。方法は次のとおりです。 ...
目次序文1. 準備 - サーバーとnginxの使用1. サーバーを準備する2. nginxをインスト...
0. システム要件CPU I5-10400F以上メモリ 16 GB、32 GBのメモリが最適ハードド...
docker コマンドを初めて使用する場合、権限の問題を確認するメッセージが表示されます。 unix...
COALESCE は、各パラメータ式 (expression_1、expression_2、...、...
Docker を初めて使用する場合は、コンテナの管理を始めるために習得する必要がある基本的なコマン...
最近、 Three.jsでReactを使用して、720 度のパノラマ写真を閲覧できるプロジェクトを構...
目次1: カプセル化の考え方2. 包装工程3: ドットインジケーター4: 左と右のインジケーター5:...
序文Javaプログラミングでは、ほとんどのアプリケーションはMavenに基づいて構築されており、配信...
ネイティブJSを使用して9つの正方形のグリッドを記述し、9つのグリッドの位置をドラッグして変更する効...
目次1. 要素の表示と非表示を制御する show() hide() 2. 要素の透明度を制御する f...