{"id":4043,"date":"2024-03-13T07:51:23","date_gmt":"2024-03-13T07:51:23","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/"},"modified":"2025-07-31T00:52:50","modified_gmt":"2025-07-31T00:52:50","slug":"how-to-implement-pessimistic-locking-in-mybatis","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/","title":{"rendered":"MyBatis Pessimistic Locking: FOR UPDATE Guide"},"content":{"rendered":"<p>One way to implement pessimistic locking in MyBatis is to use database locking statements. A common approach is to add the &#8220;FOR UPDATE&#8221; statement in the SQL query to lock the data. For example:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">SELECT<\/span> <span class=\"hljs-operator\">*<\/span> <span class=\"hljs-keyword\">FROM<\/span> table_name <span class=\"hljs-keyword\">WHERE<\/span> id <span class=\"hljs-operator\">=<\/span> #{id} <span class=\"hljs-keyword\">FOR<\/span> <span class=\"hljs-keyword\">UPDATE<\/span>;\r\n<\/code><\/pre>\n<p>In MyBatis, you can use methods of the Mapper interface to execute SQL statements with FOR UPDATE, for example:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-meta\">@Select(\"SELECT * FROM table_name WHERE id = #{id} FOR UPDATE\")<\/span>\r\n<span class=\"hljs-keyword\">public<\/span> Object <span class=\"hljs-title function_\">selectForUpdate<\/span><span class=\"hljs-params\">(<span class=\"hljs-type\">int<\/span> id)<\/span>;\r\n<\/code><\/pre>\n<p>Additionally, you can also use MyBatis plugins to achieve pessimistic locking by intercepting query statements and adding FOR UPDATE to lock the data. It is important to note that when using pessimistic locking, make sure that the transaction has been initiated, otherwise the locking will not be effective.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One way to implement pessimistic locking in MyBatis is to use database locking statements. A common approach is to add the &#8220;FOR UPDATE&#8221; statement in the SQL query to lock the data. For example: SELECT * FROM table_name WHERE id = #{id} FOR UPDATE; In MyBatis, you can use methods of the Mapper interface to [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[3179,3178,2797,1459,3177],"class_list":["post-4043","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-database-locking","tag-for-update","tag-java-orm","tag-mybatis","tag-pessimistic-locking"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>MyBatis Pessimistic Locking: FOR UPDATE Guide - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn to implement pessimistic locking in MyBatis using FOR UPDATE. Prevent race conditions in database transactions.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MyBatis Pessimistic Locking: FOR UPDATE Guide\" \/>\n<meta property=\"og:description\" content=\"Learn to implement pessimistic locking in MyBatis using FOR UPDATE. Prevent race conditions in database transactions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-13T07:51:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-31T00:52:50+00:00\" \/>\n<meta name=\"author\" content=\"William Carter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"William Carter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/\"},\"author\":{\"name\":\"William Carter\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0\"},\"headline\":\"MyBatis Pessimistic Locking: FOR UPDATE Guide\",\"datePublished\":\"2024-03-13T07:51:23+00:00\",\"dateModified\":\"2025-07-31T00:52:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/\"},\"wordCount\":107,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\"Database Locking\",\"FOR UPDATE\",\"Java ORM\",\"MyBatis\",\"Pessimistic Locking\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/\",\"name\":\"MyBatis Pessimistic Locking: FOR UPDATE Guide - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-13T07:51:23+00:00\",\"dateModified\":\"2025-07-31T00:52:50+00:00\",\"description\":\"Learn to implement pessimistic locking in MyBatis using FOR UPDATE. Prevent race conditions in database transactions.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MyBatis Pessimistic Locking: FOR UPDATE Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0\",\"name\":\"William Carter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"caption\":\"William Carter\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"MyBatis Pessimistic Locking: FOR UPDATE Guide - Blog - Silicon Cloud","description":"Learn to implement pessimistic locking in MyBatis using FOR UPDATE. Prevent race conditions in database transactions.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/","og_locale":"en_US","og_type":"article","og_title":"MyBatis Pessimistic Locking: FOR UPDATE Guide","og_description":"Learn to implement pessimistic locking in MyBatis using FOR UPDATE. Prevent race conditions in database transactions.","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-13T07:51:23+00:00","article_modified_time":"2025-07-31T00:52:50+00:00","author":"William Carter","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"William Carter","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/"},"author":{"name":"William Carter","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0"},"headline":"MyBatis Pessimistic Locking: FOR UPDATE Guide","datePublished":"2024-03-13T07:51:23+00:00","dateModified":"2025-07-31T00:52:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/"},"wordCount":107,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":["Database Locking","FOR UPDATE","Java ORM","MyBatis","Pessimistic Locking"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/","name":"MyBatis Pessimistic Locking: FOR UPDATE Guide - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-13T07:51:23+00:00","dateModified":"2025-07-31T00:52:50+00:00","description":"Learn to implement pessimistic locking in MyBatis using FOR UPDATE. Prevent race conditions in database transactions.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-pessimistic-locking-in-mybatis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"MyBatis Pessimistic Locking: FOR UPDATE Guide"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0","name":"William Carter","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","caption":"William Carter"},"url":"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/4043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=4043"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/4043\/revisions"}],"predecessor-version":[{"id":148705,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/4043\/revisions\/148705"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=4043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=4043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=4043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}