Mybatis+mysql uses stored procedures to generate serial number implementation code

Mybatis+mysql uses stored procedures to generate serial number implementation code

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:
  • How to use Mysql stored procedures in Mybatis
  • mysql+mybatis implements stored procedure + transaction + multi-concurrent serial number acquisition

<<:  Summary of Linux user groups and permissions

>>:  Steps to introduce PWA into Vue project

Recommend

JavaScript canvas to load pictures

This article shares the specific code of JavaScri...

Instructions for using the --rm option of docker run

When the Docker container exits, the file system ...

MySQL trigger principle and usage example analysis

This article uses examples to explain the princip...

Vue Element UI custom description list component

This article example shares the specific code of ...

Detailed explanation of the spacing problem between img tags

IMG tag basic analysis In HTML5, the img tag has ...

5 solutions to CSS box collapse

First, what is box collapse? Elements that should...

JavaScript Basics: Scope

Table of contents Scope Global Scope Function Sco...

MySQL binlog opening steps

Binlog is a binary log file that is used to recor...

In-depth understanding of CSS @font-face performance optimization

This article mainly introduces common strategies ...

How to install MySQL using yum on Centos7 and achieve remote connection

Centos7 uses yum to install MySQL and how to achi...

Understanding and solutions of 1px line in mobile development

Reasons why the 1px line becomes thicker When wor...

How to install kibana tokenizer inside docker container

step: 1. Create a new docker-compose.yml file in ...

Detailed explanation of Nginx timed log cutting

Preface By default, Nginx logs are written to a f...

Detailed analysis of GUID display issues in Mongodb

Find the problem I recently migrated the storage ...