データベースストアドプロシージャ `generate_serial_number_by_date` が存在する場合はプロシージャを削除します。 プロシージャ `generate_serial_number_by_date` を作成します ( IN param_key varchar(100)、 IN param_org_id bigint、 IN param_period_date_format varchar(20)、 OUT結果bigint、 出力 current_datestr varchar(20)) 始める old_datestr varchar(20) を宣言します。 トランザクションを開始します。 param_period_date_format='infinite'の場合 current_datestr を '00000000' に設定します。 それ以外 current_datestr = DATE_FORMAT(NOW(), param_period_date_format) を設定します。 終了の場合; 選択 数値、日付文字列 sys_serial_number から ここで、table_key = param_key org_id = param_org_id です そして、period_date_format = param_period_date_format 結果に、old_datestr 更新用; 結果がnullの場合 結果を 1 に設定します。 sys_serial_number(table_key、org_id、period_date_format、datestr、number、description) に挿入します。 values(param_key、param_org_id、param_period_date_format、current_datestr、1、'プロシージャによる追加'); そうでない場合、old_datestr != current_datestr then 結果を 1 に設定します。 sys_serial_number を更新 番号を 1 に設定し、 datestr = 現在の日付文字列 ここで、table_key = param_key org_id = param_org_id です かつ period_date_format = param_period_date_format; 終了の場合; sys_serial_numberを更新し、number = number + 1を設定します。 ここで、table_key = param_key org_id = param_org_id です かつ period_date_format = param_period_date_format; 専念; 終わり シリアル番号表 `sys_serial_number` が存在する場合はテーブルを削除します。 テーブル `sys_serial_number` を作成します ( `table_key` varchar(100) NOT NULL COMMENT '主キー(テーブル名を推奨)', `org_id` bigint(20) NOT NULL デフォルト '0' コメント 'ブランチID', `number` bigint(20) NOT NULL DEFAULT '1' COMMENT 'シリアル番号(ストアドプロシージャによって増加、取得後に+1)', `period_date_format` varchar(20) NOT NULL COMMENT 'シリアル番号生成期間の日付形式', `datestr` varchar(20) DEFAULT NULL COMMENT 'シリアル番号の日付値', `description` varchar(100) デフォルト NULL コメント '説明', 主キー (`table_key`,`org_id`,`period_date_format`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='シリアル番号生成テーブル'; mybatisの設定 <select id="generateSerialNumber" パラメータタイプ="java.util.HashMap" ステートメントタイプ="CALLABLE"> <![CDATA[ { generate_serial_number を呼び出す ( #{param_key,mode=IN,jdbcType=VARCHAR}, #{param_org_id,mode=IN,jdbcType=BIGINT}, #{結果、モード=OUT、jdbcType=BIGINT} ) } ]]> </選択> テストコード @オーバーライド パブリック Map<String, Object> generateSerialNumber(Map<String, Object> param) { sysSerialNumberMapper.generateSerialNumber(パラメータ); パラメータを返します。 } 最終的な Map<String, Object> パラメータ = 新しい HashMap<String, Object>(); param.put("param_key","契約"); param.put("param_orgId", 84); 新しいスレッド(新しい実行可能() { @オーバーライド パブリックボイド実行(){ (int i =0; i<100; i++) の場合 { Map<String, Object> map = serialNumberProvider.generateSerialNumber(param); System.out.println("スレッド1: " + map.get("結果")); } } })。始める(); 新しいスレッド(新しい実行可能() { @オーバーライド パブリックボイド実行() { (int i =0; i<100; i++) の場合 { Map<String, Object> map = serialNumberProvider.generateSerialNumber(param); System.out.println("スレッド2: " + map.get("結果")); } } })。始める(); 新しいスレッド(新しい実行可能() { @オーバーライド パブリックボイド実行() { (int i =0; i<100; i++) の場合 { Map<String, Object> map = serialNumberProvider.generateSerialNumber(param); System.out.println("スレッド3: " + map.get("結果")); } } })。始める(); バイト[] b = 新しいバイト[0]; 同期(b) { b.wait(); } コードを実行して次のエラーが発生した場合
トラブルシューティング方法: 1. ストアドプロシージャが正しく作成されているかどうかを確認する 2. データソース接続ユーザーにストアドプロシージャ実行権限があるかどうかを確認します。 これで、mysql+mybatis によるストアド プロシージャ + トランザクション + 複数同時シリアル番号取得の実装に関するこの記事は終了です。mysql mybatis ストアド プロシージャ シリアル番号に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 完璧なアロエベラジェルを選ぶには?完璧なアロエベラジェルの本物と偽物の見分け方
1. 目的Flask アプリケーションをローカルで作成し、Docker でパッケージ化し、独自のサー...
この記事では、Vueでドラッグ可能なコンポーネントとドラッグ可能なコンポーネントを実装する方法を参考...
問題: IIS を通じて公開された Web サイトは F5 デバイスの背後に配置されています。透過的...
2つの異なるサーバー間の転送ポート転送を有効にするまず、デフォルトでは無効になっている IP 転送機...
今日、PHP を学習する場合、当然ながら、まず実行環境をインストールする必要があります。Phpstu...
標準 CSS3 を使用して要素の影の効果を実現するには、2 つの手順があります。1 つ目は一般的なb...
障害の説明percona5.6、mysqldump フルバックアップ、バックアップデータのインポート...
前回の記事では、Docker を使用して、コンパイルされた jar パッケージをイメージに組み込む ...
1. システム環境[root@localhost ホーム]# cat /etc/redhat-re...
これは見落とされがちな問題かもしれません。まず、次の点を明確にする必要があります。 MySQL では...
1 はじめに「DockerでPostgreSQLを起動する方法といくつかの接続ツールのおすすめ」の記...
サーバーのデータベース ハード ディスク領域がいっぱいだったため、大量のデータの書き込みに失敗し、「...
Vue.js を使用して、クリックしてズームできる 9 グリッドの画像表示モジュールを作成しました。...
1. IDEAの下にあるターミナルをクリックし、mvn clean installと入力します。 次...
基礎リレーショナル データベースでは、各データ テーブルはファイルに相当し、異なるストレージ エンジ...