Use stored procedures to start transactions when operating the database to avoid data duplication caused by concurrent operations CREATE DEFINER=`root`@`localhost` PROCEDURE `GetSerialNo`(IN tsCode VARCHAR(50),OUT result VARCHAR(200) ) BEGIN DECLARE tsValue VARCHAR(50); DECLARE tdToday VARCHAR(20); DECLARE nowdate VARCHAR(20); DECLARE tsQZ VARCHAR(50); DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; START TRANSACTION; /* UPDATE sys_sno SET sValue=sValue WHERE sCode=tsCode; */ SELECT sValue INTO tsValue FROM sys_sno WHERE sCode=tsCode; SELECT sQz INTO tsQZ FROM sys_sno WHERE sCode=tsCode; -- There is no record in the factor table, insert the initial value IF tsValue IS NULL THEN SELECT CONCAT(DATE_FORMAT(NOW(),'%y%m'),'0001') INTO tsValue; UPDATE sys_sno SET sValue=tsValue WHERE sCode=tsCode; SELECT CONCAT(tsQZ,tsValue) INTO result; ELSE SELECT SUBSTRING(tsValue,1,4) INTO tdToday; SELECT CONVERT(DATE_FORMAT(NOW(),'%y%m'),SIGNED) INTO nowdate; -- Determine whether the year and month need to be updated IF tdToday = nowdate THEN SET tsValue=CONVERT(tsValue,SIGNED) + 1; ELSE SELECT CONCAT(DATE_FORMAT(NOW(),'%y%m') ,'0001') INTO tsValue; END IF; UPDATE sys_sno SET sValue = tsValue WHERE sCode = tsCode; SELECT CONCAT(tsQZ,tsValue) INTO result; END IF; IF t_error =1 THEN ROLLBACK; SET result = 'Error'; ELSE COMMIT; END IF; SELECT result ; END; dao Integer getFaultNo(Map<String, String> parameterMap); xml <update id="getFaultNo" parameterMap="getFaultMap" statementType="CALLABLE"> CALL GetSerialNo(?,?) </update> <!-- parameterMap.put("tsCode", 0); parameterMap.put("result", -1); --> <parameterMap type="java.util.Map" id="getFaultMap"> <parameter property="tsCode" mode="IN" jdbcType="VARCHAR"/> <parameter property="result" mode="OUT" jdbcType="VARCHAR"/> </parameterMap> Call Map<String, String> parameterMap = new HashMap<String, String>(); parameterMap.put("tsCode", "a"); parameterMap.put("result", "-1"); faultMapper.getFaultNo(parameterMap); // insert failure log (main table) if (!parameterMap.get("result").equals("-1") && !parameterMap.get("result").equals("Error")) { //Success} else { throw new RuntimeException(); } Summarize The above is the implementation code of mybatis+mysql using stored procedures to generate serial numbers introduced by the editor. I hope it will be helpful to everyone. If you have any questions, please leave me a message and the editor will reply to you in time. I would also like to thank everyone for their support of the 123WORDPRESS.COM website! You may also be interested in:
|
<<: Summary of Linux user groups and permissions
>>: Steps to introduce PWA into Vue project
This article shares the specific code of JavaScri...
When the Docker container exits, the file system ...
This article uses examples to explain the princip...
This article example shares the specific code of ...
IMG tag basic analysis In HTML5, the img tag has ...
First, what is box collapse? Elements that should...
Table of contents Scope Global Scope Function Sco...
Binlog is a binary log file that is used to recor...
This article mainly introduces common strategies ...
Centos7 uses yum to install MySQL and how to achi...
Reasons why the 1px line becomes thicker When wor...
step: 1. Create a new docker-compose.yml file in ...
Preface By default, Nginx logs are written to a f...
Background: position: sticky is also called stick...
Find the problem I recently migrated the storage ...