{"id":19487,"date":"2024-03-15T18:58:16","date_gmt":"2024-03-15T18:58:16","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/"},"modified":"2024-03-21T15:49:09","modified_gmt":"2024-03-21T15:49:09","slug":"how-to-configure-a-one-to-many-relationship-in-mybatis","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/","title":{"rendered":"How to configure a one-to-many relationship in MyBatis?"},"content":{"rendered":"<p>To set up a one-to-many relationship in MyBatis, nested queries and nested result mappings are required.<\/p>\n<p>Firstly, two query statements need to be defined in the Mapper XML file, one for retrieving information from the main table and another for retrieving information from the sub table. For example:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-comment\">&lt;!-- \u67e5\u8be2\u4e3b\u8868\u4fe1\u606f --&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">select<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"selectMainTable\"<\/span> <span class=\"hljs-attr\">resultMap<\/span>=<span class=\"hljs-string\">\"MainTableResultMap\"<\/span>&gt;<\/span>\r\n    SELECT *\r\n    FROM main_table\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">select<\/span>&gt;<\/span>\r\n\r\n<span class=\"hljs-comment\">&lt;!-- \u67e5\u8be2\u4ece\u8868\u4fe1\u606f --&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">select<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"selectSubTable\"<\/span> <span class=\"hljs-attr\">resultMap<\/span>=<span class=\"hljs-string\">\"SubTableResultMap\"<\/span>&gt;<\/span>\r\n    SELECT *\r\n    FROM sub_table\r\n    WHERE main_table_id = #{mainTableId}\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">select<\/span>&gt;<\/span>\r\n<\/code><\/pre>\n<p>Next, it is necessary to define two ResultMaps, each used to map the result sets of the main table and the subordinate table. For example:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-comment\">&lt;!-- \u4e3b\u8868ResultMap --&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">resultMap<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"MainTableResultMap\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"MainTable\"<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span> <span class=\"hljs-attr\">property<\/span>=<span class=\"hljs-string\">\"id\"<\/span> <span class=\"hljs-attr\">column<\/span>=<span class=\"hljs-string\">\"id\"<\/span> \/&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">result<\/span> <span class=\"hljs-attr\">property<\/span>=<span class=\"hljs-string\">\"name\"<\/span> <span class=\"hljs-attr\">column<\/span>=<span class=\"hljs-string\">\"name\"<\/span> \/&gt;<\/span>\r\n    <span class=\"hljs-comment\">&lt;!-- \u5b9a\u4e49\u4ece\u8868\u7684\u96c6\u5408 --&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">collection<\/span> <span class=\"hljs-attr\">property<\/span>=<span class=\"hljs-string\">\"subTables\"<\/span> <span class=\"hljs-attr\">ofType<\/span>=<span class=\"hljs-string\">\"SubTable\"<\/span> <span class=\"hljs-attr\">resultMap<\/span>=<span class=\"hljs-string\">\"SubTableResultMap\"<\/span> \/&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">resultMap<\/span>&gt;<\/span>\r\n\r\n<span class=\"hljs-comment\">&lt;!-- \u4ece\u8868ResultMap --&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">resultMap<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"SubTableResultMap\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"SubTable\"<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span> <span class=\"hljs-attr\">property<\/span>=<span class=\"hljs-string\">\"id\"<\/span> <span class=\"hljs-attr\">column<\/span>=<span class=\"hljs-string\">\"id\"<\/span> \/&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">result<\/span> <span class=\"hljs-attr\">property<\/span>=<span class=\"hljs-string\">\"name\"<\/span> <span class=\"hljs-attr\">column<\/span>=<span class=\"hljs-string\">\"name\"<\/span> \/&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">result<\/span> <span class=\"hljs-attr\">property<\/span>=<span class=\"hljs-string\">\"mainTableId\"<\/span> <span class=\"hljs-attr\">column<\/span>=<span class=\"hljs-string\">\"main_table_id\"<\/span> \/&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">resultMap<\/span>&gt;<\/span>\r\n<\/code><\/pre>\n<p>Finally, define a method in the Mapper interface to call the two previously mentioned query statements in order to achieve a one-to-many relationship query. For example:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title class_\">MainTableMapper<\/span> {\r\n    MainTable <span class=\"hljs-title function_\">selectMainTable<\/span><span class=\"hljs-params\">(<span class=\"hljs-type\">int<\/span> id)<\/span>;\r\n}\r\n<\/code><\/pre>\n<p>When the selectMainTable method is called, MyBatis will first execute the SQL query to retrieve information from the primary table, then based on the primary table&#8217;s ID value, it will execute the SQL query to retrieve information from the secondary table and map the query results to the secondary table collection property in the primary table object.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>To set up a one-to-many relationship in MyBatis, nested queries and nested result mappings are required. Firstly, two query statements need to be defined in the Mapper XML file, one for retrieving information from the main table and another for retrieving information from the sub table. For example: &lt;!&#8211; \u67e5\u8be2\u4e3b\u8868\u4fe1\u606f &#8211;&gt; &lt;select id=&#8221;selectMainTable&#8221; resultMap=&#8221;MainTableResultMap&#8221;&gt; SELECT [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-19487","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"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>How to configure a one-to-many relationship in MyBatis? - Blog - Silicon Cloud<\/title>\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-configure-a-one-to-many-relationship-in-mybatis\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to configure a one-to-many relationship in MyBatis?\" \/>\n<meta property=\"og:description\" content=\"To set up a one-to-many relationship in MyBatis, nested queries and nested result mappings are required. Firstly, two query statements need to be defined in the Mapper XML file, one for retrieving information from the main table and another for retrieving information from the sub table. For example: &lt;!-- \u67e5\u8be2\u4e3b\u8868\u4fe1\u606f --&gt; &lt;select id=&quot;selectMainTable&quot; resultMap=&quot;MainTableResultMap&quot;&gt; SELECT [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-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-15T18:58:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T15:49:09+00:00\" \/>\n<meta name=\"author\" content=\"Benjamin Taylor\" \/>\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=\"Benjamin Taylor\" \/>\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-configure-a-one-to-many-relationship-in-mybatis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/\"},\"author\":{\"name\":\"Benjamin Taylor\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/ac801fe9549a25960ce48aa2e0a691c9\"},\"headline\":\"How to configure a one-to-many relationship in MyBatis?\",\"datePublished\":\"2024-03-15T18:58:16+00:00\",\"dateModified\":\"2024-03-21T15:49:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/\"},\"wordCount\":165,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/\",\"name\":\"How to configure a one-to-many relationship in MyBatis? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T18:58:16+00:00\",\"dateModified\":\"2024-03-21T15:49:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to configure a one-to-many relationship in MyBatis?\"}]},{\"@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\/ac801fe9549a25960ce48aa2e0a691c9\",\"name\":\"Benjamin Taylor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ec2e3d3e2d525fd148047c4520ae7c1cdccd1f4b48a1a488422b31f04f345c14?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ec2e3d3e2d525fd148047c4520ae7c1cdccd1f4b48a1a488422b31f04f345c14?s=96&d=mm&r=g\",\"caption\":\"Benjamin Taylor\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/benjamintaylor\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to configure a one-to-many relationship in MyBatis? - Blog - Silicon Cloud","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-configure-a-one-to-many-relationship-in-mybatis\/","og_locale":"en_US","og_type":"article","og_title":"How to configure a one-to-many relationship in MyBatis?","og_description":"To set up a one-to-many relationship in MyBatis, nested queries and nested result mappings are required. Firstly, two query statements need to be defined in the Mapper XML file, one for retrieving information from the main table and another for retrieving information from the sub table. For example: &lt;!-- \u67e5\u8be2\u4e3b\u8868\u4fe1\u606f --&gt; &lt;select id=\"selectMainTable\" resultMap=\"MainTableResultMap\"&gt; SELECT [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T18:58:16+00:00","article_modified_time":"2024-03-21T15:49:09+00:00","author":"Benjamin Taylor","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Benjamin Taylor","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/"},"author":{"name":"Benjamin Taylor","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/ac801fe9549a25960ce48aa2e0a691c9"},"headline":"How to configure a one-to-many relationship in MyBatis?","datePublished":"2024-03-15T18:58:16+00:00","dateModified":"2024-03-21T15:49:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/"},"wordCount":165,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/","name":"How to configure a one-to-many relationship in MyBatis? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T18:58:16+00:00","dateModified":"2024-03-21T15:49:09+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-configure-a-one-to-many-relationship-in-mybatis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to configure a one-to-many relationship in MyBatis?"}]},{"@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\/ac801fe9549a25960ce48aa2e0a691c9","name":"Benjamin Taylor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ec2e3d3e2d525fd148047c4520ae7c1cdccd1f4b48a1a488422b31f04f345c14?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ec2e3d3e2d525fd148047c4520ae7c1cdccd1f4b48a1a488422b31f04f345c14?s=96&d=mm&r=g","caption":"Benjamin Taylor"},"url":"https:\/\/www.silicloud.com\/blog\/author\/benjamintaylor\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/19487","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=19487"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/19487\/revisions"}],"predecessor-version":[{"id":53232,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/19487\/revisions\/53232"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=19487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=19487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=19487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}