欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

流水號(hào)表

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 '流水號(hào)(存儲(chǔ)過程控制遞增,獲取完后+1)',
  `period_date_format` varchar(20) NOT NULL COMMENT '流水號(hào)生成周期日期格式',
  `datestr` varchar(20) DEFAULT NULL COMMENT '流水號(hào)日期值',
  `description` varchar(100) DEFAULT NULL COMMENT '描述',
  PRIMARY KEY (`table_key`,`org_id`,`period_date_format`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='流水號(hào)生成表';

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>

測(cè)試代碼

@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();
        }

如果運(yùn)行代碼報(bào)以下錯(cuò)誤

### 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、檢查存儲(chǔ)過程是否正確創(chuàng)建

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

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

相關(guān)文章

  • Mysql優(yōu)化策略(推薦)

    Mysql優(yōu)化策略(推薦)

    這篇文章主要介紹了Mysql優(yōu)化策略,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySQL提示The InnoDB feature is disabled需要開啟InnoDB的解決方法

    MySQL提示The InnoDB feature is disabled需要開啟InnoDB的解決方法

    這篇文章主要介紹了MySQL提示The InnoDB feature is disabled需要開啟InnoDB的解決方法,簡(jiǎn)單分析了MySQL數(shù)據(jù)庫開啟InnoDB引擎的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-01-01
  • MySQL優(yōu)化之如何查找SQL效率低的原因

    MySQL優(yōu)化之如何查找SQL效率低的原因

    這篇文章主要介紹了MySQL優(yōu)化之如何查找SQL效率低的原因 ,需要的朋友可以參考下
    2014-05-05
  • 詳解MySQL?substring()?字符串截取函數(shù)

    詳解MySQL?substring()?字符串截取函數(shù)

    MySQL 查詢數(shù)據(jù)有時(shí)候需要對(duì)數(shù)據(jù)項(xiàng)進(jìn)行日期格式化或截取特定部分的操作,當(dāng)需要對(duì)字符串進(jìn)行截取加工時(shí)用到了 substring() 函數(shù),這篇文章主要介紹了MySQL?substring()?字符串截取函數(shù),需要的朋友可以參考下
    2022-07-07
  • MySQL?SQL性能分析之慢查詢?nèi)罩?、explain使用詳解

    MySQL?SQL性能分析之慢查詢?nèi)罩?、explain使用詳解

    這篇文章主要介紹了MySQL?SQL性能分析?慢查詢?nèi)罩尽xplain使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • MySQL刪除數(shù)據(jù),表文件大小依然沒變的原因

    MySQL刪除數(shù)據(jù),表文件大小依然沒變的原因

    這篇文章主要介紹了MySQL刪除數(shù)據(jù),表文件大小依然沒變的原因,幫助大家更好的理解MySQL中的數(shù)據(jù)表,感興趣的朋友可以了解下
    2020-10-10
  • MySQL啟動(dòng)報(bào)錯(cuò):Starting MySQL.. ERROR! The server quit without updating PID file的問題分析和解決

    MySQL啟動(dòng)報(bào)錯(cuò):Starting MySQL.. ERROR! The se

    這篇文章給大家介紹了MySQL啟動(dòng)報(bào)錯(cuò):Starting MySQL.. ERROR! The server quit without updating PID file的問題分析和解決辦法,文中給出了詳細(xì)的原因分析,需要的朋友可以參考下
    2023-12-12
  • mysql5.1.26安裝配置方法詳解

    mysql5.1.26安裝配置方法詳解

    這篇文章主要為大家詳細(xì)介紹了mysql安裝配置方法,圖文詳解MySQL5.1.26安裝步驟,感興趣的小伙伴們可以參考一下
    2016-06-06
  • mysql 替換字段部分內(nèi)容及mysql 替換函數(shù)replace()

    mysql 替換字段部分內(nèi)容及mysql 替換函數(shù)replace()

    這篇文章主要介紹了mysql 替換字段部分內(nèi)容及mysql 替換函數(shù)replace()的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-02-02
  • SQL Server 2005 安裝遇到的錯(cuò)誤提示和解決方法

    SQL Server 2005 安裝遇到的錯(cuò)誤提示和解決方法

    在安裝SQL Server 2005時(shí)有時(shí)會(huì)出現(xiàn)意想不到的問題,如IIS,性能計(jì)數(shù)器,OWC11,無法配置外圍應(yīng)用的問題,下面筆者分享一下在安裝SQL Server 2005時(shí)常見問題解決方法
    2014-01-01

最新評(píng)論