Mybatis+mysqlはストアドプロシージャを使用してシリアル番号実装コードを生成します。

Mybatis+mysqlはストアドプロシージャを使用してシリアル番号実装コードを生成します。

同時操作によるデータの重複を避けるために、データベースを操作するときにストアドプロシージャを使用してトランザクションを開始します。

CREATE DEFINER=`root`@`localhost` PROCEDURE `GetSerialNo`(IN tsCode VARCHAR(50),OUT result VARCHAR(200) )
始める 
 tsValue VARCHAR(50)を宣言します。 
 tdToday VARCHAR(20) を宣言します。  
 nowdate VARCHAR(20) を宣言します。  
 tsQZ VARCHAR(50)を宣言します。 
 t_error INTEGER DEFAULT 0 を宣言します。 
 SQLEXCEPTION の CONTINUE ハンドラーを宣言し、t_error=1 を設定します。 
 トランザクションを開始します。 
  /* sys_sno を更新し、sValue=sValue を設定します (sCode=tsCode); */
  sValue を tsValue に選択します (sys_sno から sCode=tsCode の場合)。 
  sQz を tsQZ に SELECT します ( sys_sno から sCode=tsCode )。 
 -- 因子テーブルにレコードがない場合は、初期値を挿入します。IF tsValue IS NULL THEN 
   CONCAT(DATE_FORMAT(NOW(),'%y%m'),'0001') を tsValue に選択します。 
   sys_sno を更新し、sValue=tsValue を設定します。ここで、sCode=tsCode です。 
   SELECT CONCAT(tsQZ,tsValue) INTO 結果; 
  それ以外     
   SUBSTRING(tsValue,1,4) を tdToday に選択します。 
   CONVERT(DATE_FORMAT(NOW(),'%y%m'),SIGNED) INTO nowdate を選択します。
   -- 年と月を更新する必要があるかどうかを判定します。IF tdToday = nowdate THEN 
    tsValue=CONVERT(tsValue,SIGNED) + 1 を設定します。 
   それ以外 
    CONCAT(DATE_FORMAT(NOW(),'%y%m') ,'0001') を tsValue に選択します。 
   終了の場合; 
   sys_sno を更新し、sValue = tsValue を設定し、sCode = tsCode を設定します。 
   SELECT CONCAT(tsQZ,tsValue) INTO 結果; 
  終了の場合; 
  t_error =1の場合 
  ロールバック; 
  結果 = 'エラー' を設定します。 
  それ以外 
  専念; 
  終了の場合; 
  結果を選択します。  
終わり;
ダオ
整数 getFaultNo(Map<String, String> パラメータ Map);

xml

<update id="getFaultNo" パラメータマップ="getFaultMap" ステートメントタイプ="CALLABLE">
  GetSerialNo(?,?) を呼び出す
 </更新>
 <!--
  パラメータマップ.put("tsCode", 0);
  パラメータマップ.put("結果", -1);
  -->
 <パラメータマップ タイプ="java.util.Map" id="getFaultMap">
  <パラメータプロパティ="tsCode" モード="IN" jdbcType="VARCHAR"/>
  <パラメータプロパティ="結果" モード="OUT" jdbcType="VARCHAR"/>
 </パラメータマップ>

電話

Map<String, String> パラメータ Map = new HashMap<String, String>();
  パラメータマップ.put("tsCode", "a");
  パラメータマップ.put("結果", "-1");
  パラメータマップを取得します。
  // 失敗ログを挿入 (メインテーブル)
  if (!parameterMap.get("result").equals("-1") && 
    !parameterMap.get("結果").equals("エラー")) {
   //成功} else {
   新しい RuntimeException() をスローします。
  }

要約する

上記は、エディターが紹介したストアド プロシージャを使用してシリアル番号を生成する mybatis+mysql の実装コードです。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。エディターがすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • Mybatis で Mysql ストアド プロシージャを使用する方法
  • mysql+mybatisはストアドプロシージャ+トランザクション+複数同時シリアル番号取得を実装します

<<:  VueプロジェクトにPWAを導入する手順

>>:  Nginx コンテンツ キャッシュと共通パラメータ設定の詳細

推薦する

Vue3のdefineComponentの役割についての簡単な説明

目次defineComponent オーバーロード関数開発実務defineComponent 関数は...

HTML の iframe と frame の違いを例を使って説明します

プロジェクトで frameset 属性を使用したことがあるかどうかはわかりません。昨年、オンライン ...

MySql Group Byは複数のフィールドのグループ化を実装します

日常の開発タスクでは、データ テーブル内のグループ化フィールドに基づいて統計データを取得するために、...

GNU Parallelの具体的な使用法

それは何ですか? GNU Parallel は、1 台以上のコンピュータでコンピューティング タスク...

Vue プロジェクトでよく使用されるツール機能の概要

目次序文1. カスタムフォーカスコマンド1. 方法1 2. 方法2 3. 方法3 2. 入力ボックス...

my.cnf (my.ini) 重要なパラメータの最適化設定手順

MyISAM ストレージエンジンMyISAM ストレージ エンジンは、書き込みよりも読み取りが多く、...

SQL インジェクション脆弱性プロセスの例と解決策

コード例: パブリッククラスJDBCDemo3 { パブリック静的voiddemo3_1(){ bo...

CSS3を使用してトランジションとアニメーション効果を実現する

JS アニメーションの代わりに CSS アニメーションを使用する必要があるのはなぜですか? Java...

mysql の find_in_set 関数の基本的な使い方

序文これは私が最近見つけた新しい機能です。プロジェクトでの私の使用シナリオは次のとおりです。アプリケ...

Linux ディスクデバイスと LVM 管理コマンドの詳細な例

序文Linux オペレーティング システムでは、デバイス ファイルは特別なタイプのファイルです。これ...

Vue+swiperでタイムライン効果を実現

この記事では、タイムライン効果を実現するためのvue+swiperの具体的なコードを参考までに共有し...

CSS でリスト スタイル属性を設定する方法 (この記事を読むだけ)

リストスタイルのプロパティHTMLには、順序なしリストと順序ありリストの2種類のリストがあります。仕...

WeChatミニプログラムがいいねサービスを実装

この記事では、WeChatアプレットの具体的なコードを参考までに紹介します。具体的な内容は次のとおり...

Ubuntu 16.04 に Docker と nvidia-docker をインストールするための詳細なチュートリアル

目次DockerのインストールNvidia-docker のインストールDockerのインストール1...