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
Recently, WeChat was forced by Apple to develop a...
Zabbix 2019/10/12 Chenxin refer to https://www.za...
1.core file When a Segmentation fault (core dumpe...
1. Check the firewall status Check the firewall s...
CSS3 can change the color of pictures. From now o...
Table of contents Preface difficulty Cross-domain...
Before the arrow was shot, the bow whispered to t...
1. Open the virtual machine and git bash window a...
Many people may ask, does the text on the website...
Test the efficiency of deleting a large number of...
Table of contents 1. Find the mirror 2. Download ...
Preface This article introduces how to use the ne...
Table of contents 1. Usage of DATETIME and TIMEST...
Table of contents 1.sleep function 2. setTimeout ...
We all know that the underlying data structure of...