最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql+mybatis實現(xiàn)存儲過程+事務(wù)?+?多并發(fā)流水號獲取

 更新時間:2021年12月31日 15:13:28   作者:旋轉(zhuǎn)的夢  
這篇文章主要介紹了mysql+mybatis+存儲過程+事務(wù)?+?多并發(fā)流水號獲取,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

數(shù)據(jù)庫存儲過程

DROP PROCEDURE IF EXISTS `generate_serial_number_by_date`;
CREATE PROCEDURE `generate_serial_number_by_date`(
    IN param_key varchar(100),
    IN param_org_id bigint, 
    IN param_period_date_format varchar(20), 
      OUT result bigint,
    OUT current_datestr varchar(20))
begin 

        declare old_datestr varchar(20);
        
        START TRANSACTION; 

        if param_period_date_format='infinite' then 
            set current_datestr = '00000000';
    else
            set current_datestr = DATE_FORMAT(NOW(), param_period_date_format);
        end if;
        
        select 
                    number, datestr 
        from sys_serial_number
        where table_key = param_key 
                and org_id = param_org_id 
                and period_date_format = param_period_date_format
                into result, old_datestr
                for update;

        IF result is null then
            
            set result = 1;
            
            insert into 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, 'add by procedure');
        
        elseif old_datestr != current_datestr then
            
            set result = 1;
            
            update sys_serial_number 
                    set number = 1,    
                            datestr = current_datestr 
            where table_key = param_key 
                    and org_id = param_org_id 
                    and period_date_format = param_period_date_format;
            
        end if;
        
        update sys_serial_number set number = number + 1 
            where table_key = param_key 
                and org_id = param_org_id 
                and period_date_format = param_period_date_format;
    commit;
end

流水號表

DROP TABLE IF EXISTS `sys_serial_number`;
CREATE TABLE `sys_serial_number` (
  `table_key` varchar(100) NOT NULL COMMENT '主鍵(建議用表名)',
  `org_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '分公司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) DEFAULT NULL COMMENT '描述',
  PRIMARY KEY (`table_key`,`org_id`,`period_date_format`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='流水號生成表';

mybatis配置

<select id="generateSerialNumber" parameterType="java.util.HashMap" statementType="CALLABLE">
    <![CDATA[
           {
           call generate_serial_number (
            #{param_key,mode=IN,jdbcType=VARCHAR},
            #{param_org_id,mode=IN,jdbcType=BIGINT},
            #{result,mode=OUT,jdbcType=BIGINT}
            )
           }
       ]]>
  </select>

測試代碼

@Override
    public Map<String, Object> generateSerialNumber(Map<String, Object> param) {
        sysSerialNumberMapper.generateSerialNumber(param);
        return param;
    }
final Map<String, Object> param = new HashMap<String, Object>();
        param.put("param_key","contract");
        param.put("param_orgId", 84);
        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i =0; i<100; i++) {
                    Map<String, Object> map = serialNumberProvider.generateSerialNumber(param);
                    System.out.println("thread-1:" + map.get("result"));
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i =0; i<100; i++) {
                    Map<String, Object> map = serialNumberProvider.generateSerialNumber(param);
                    System.out.println("thread-2:" + map.get("result"));
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i =0; i<100; i++) {
                    Map<String, Object> map = serialNumberProvider.generateSerialNumber(param);
                    System.out.println("thread-3:" + map.get("result"));
                }
            }
        }).start();

        byte[] b = new byte[0];
        synchronized(b) {
            b.wait();
        }

如果運行代碼報以下錯誤

### SQL: 
{            
call generate_serial_number_by_date (             
?,             ?,             ?,             ?,             ?            
)            
}
### Cause: java.sql.SQLException: Parameter number 4 is not an OUT parameter
; SQL []; Parameter number 4 is not an OUT parameter; nested exception is java.sql.SQLException: Parameter number 4 is not an OUT parameter

排查方法:

1、檢查存儲過程是否正確創(chuàng)建

2、檢查數(shù)據(jù)源連接用戶是否有存儲過程執(zhí)行權(quán)限

到此這篇關(guān)于mysql+mybatis實現(xiàn)存儲過程+事務(wù) + 多并發(fā)流水號獲取的文章就介紹到這了,更多相關(guān)mysql mybatis存儲過程流水號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導(dǎo)入備份

    mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導(dǎo)入備份

    今天小編就為大家分享一篇關(guān)于mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導(dǎo)入備份,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN

    ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN

    這篇文章主要介紹了ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN,本文是在MySQL Workbench的環(huán)境操作,需要的朋友可以參考下
    2014-11-11
  • Apache Drill 連接 MySQL 或 PostgreSQL 數(shù)據(jù)庫的詳細(xì)步驟

    Apache Drill 連接 MySQL 或 PostgreSQL&

    Drill 連接 MySQL或PostgreSQL 數(shù)據(jù)庫需要通過配置JDBC存儲插件實現(xiàn),核心是通過JDBC 驅(qū)動連接外部數(shù)據(jù)庫,下面給大家介紹Apache Drill 連接 MySQL 或 PostgreSQL 數(shù)據(jù)庫的詳細(xì)步驟,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • php mysql訪問數(shù)據(jù)庫的步驟詳解

    php mysql訪問數(shù)據(jù)庫的步驟詳解

    這篇文章主要介紹了php mysql訪問數(shù)據(jù)庫的步驟詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • mysql like模糊匹配,按照匹配度排序方式

    mysql like模糊匹配,按照匹配度排序方式

    這篇文章主要介紹了mysql like模糊匹配,按照匹配度排序方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Mysql8.0修改配置文件my.ini的坑及解決

    Mysql8.0修改配置文件my.ini的坑及解決

    使用記事本直接編輯my.ini文件保存后,可能會導(dǎo)致MySQL無法啟動,因為MySQL會以ANSI編碼讀取該文件,解決方法是使用Notepad++打開my.ini文件,選擇ANSI編碼保存
    2025-01-01
  • MySQL中聯(lián)合主鍵的操作方式

    MySQL中聯(lián)合主鍵的操作方式

    MySQL聯(lián)合主鍵操作包括創(chuàng)建、新增和修改,創(chuàng)建時在表定義中使用PRIMARY KEY關(guān)鍵字指定多個字段,新增和修改時,分別使用ALTER TABLE語句刪除舊主鍵并添加新主鍵
    2024-12-12
  • 通過實例學(xué)習(xí)MySQL分區(qū)表原理及常用操作

    通過實例學(xué)習(xí)MySQL分區(qū)表原理及常用操作

    我們試著想一想, 在生產(chǎn)環(huán)境中什么最重要? 我感覺在生產(chǎn)環(huán)境中應(yīng)該沒有什么比數(shù)據(jù)跟更為重要. 那么我們該如何保證數(shù)據(jù)不丟失、或者丟失后可以快速恢復(fù)呢?只要看完這篇大家應(yīng)該就能對MySQL中數(shù)據(jù)備份有一定了解
    2019-05-05
  • 深入淺出講解MySQL的并行復(fù)制

    深入淺出講解MySQL的并行復(fù)制

    這篇文章主要給大家介紹了關(guān)于MySQL并行復(fù)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或使用mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • MySQL系列關(guān)于NUll值的經(jīng)驗總結(jié)分析教程

    MySQL系列關(guān)于NUll值的經(jīng)驗總結(jié)分析教程

    這篇文章主要為大家介紹了MySQL系列關(guān)于NUll值的一些經(jīng)驗總結(jié)分析,關(guān)于null值的影響作用以及為什么會出現(xiàn)null值的原因等等問題的解析
    2021-10-10

最新評論

阿坝县| 陈巴尔虎旗| 玛曲县| 鹿邑县| 阿城市| 吐鲁番市| 桐城市| 潞城市| 英吉沙县| 乾安县| 湛江市| 海伦市| 府谷县| 仁怀市| 洞口县| 新绛县| 修文县| 凤阳县| 陇南市| 古蔺县| 东海县| 赤水市| 灵石县| 东莞市| 辛集市| 伊宁市| 万山特区| 绍兴市| 澄江县| 天津市| 沂源县| 新昌县| 湛江市| 灵武市| 砀山县| 全州县| 西藏| 洪江市| 西乡县| 城步| 泰宁县|