{"id":432,"date":"2025-03-24T08:54:48","date_gmt":"2025-03-23T23:54:48","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=432"},"modified":"2025-03-24T08:54:48","modified_gmt":"2025-03-23T23:54:48","slug":"%e3%80%902024%e5%b9%b4%e6%9c%80%e6%96%b0%e3%80%91spring-boot-mybatis%e3%81%a7%e4%bd%9c%e3%82%8b%e9%ab%98%e9%80%9f%e3%81%a7%e5%a0%85%e7%89%a2%e3%81%aa%e3%83%87%e3%83%bc%e3%82%bf%e3%82%a2%e3%82%af","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=432","title":{"rendered":"\u30102024\u5e74\u6700\u65b0\u3011Spring Boot + MyBatis\u3067\u4f5c\u308b\u9ad8\u901f\u3067\u5805\u7262\u306a\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u5c64\uff01\u521d\u5fc3\u8005\u304b\u3089\u30d7\u30ed\u307e\u3067\u4f7f\u3048\u308b7\u3064\u306e\u6280"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Spring Boot\u3068MyBatis\u306e\u57fa\u672c\uff1a\u306a\u305c\u7d44\u307f\u5408\u308f\u305b\u308b\u306e\u304b\uff1f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">1.1 Spring Boot\u3068MyBatis\u305d\u308c\u305e\u308c\u306e\u7279\u5fb4\u3068\u5229\u70b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">1.2 \u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u5f97\u3089\u308c\u308b\u76f8\u4e57\u52b9\u679c<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">\u74b0\u5883\u69cb\u7bc9\uff1aSpring Boot\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bMyBatis\u3092\u5c0e\u5165\u3057\u3088\u3046<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">2.1 \u5fc5\u8981\u306a\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">2.2 application.properties\u3067\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u8a2d\u5b9a<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">MyBatis\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\uff1aCRUD\u3092\u5b9f\u88c5\u3057\u3066\u307f\u3088\u3046<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">3.1 Mapper\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u4f5c\u6210\u3068\u4f7f\u7528\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-8\">3.2 XML\u30de\u30c3\u30d4\u30f3\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u65b9\u3068\u6ce8\u610f\u70b9<\/a>      <\/li>      <li>        <a href=\"#i-9\">\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u4fdd\u5b88\u6027\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3vs XML\uff1a\u72b6\u6cc1\u306b\u5fdc\u3058\u305f\u4f7f\u3044\u5206\u3051\u306e\u30b3\u30c4<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">4.1 \u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u30d9\u30fc\u30b9\u306e\u5b9f\u88c5\u4f8b\u3068\u5229\u70b9<\/a>      <\/li>      <li>        <a href=\"#i-13\">4.2 XML\u30d9\u30fc\u30b9\u306e\u5b9f\u88c5\u4f8b\u3068\u305d\u306e\u5f37\u307f<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u4f7f\u3044\u5206\u3051\u306e\u30b3\u30c4<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\uff1aMyBatis\u3092\u6700\u9069\u5316\u3059\u308b3\u3064\u306e\u6280<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">5.1 N+1\u554f\u984c\u306e\u89e3\u6c7a\u7b56\u3068\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-17\">5.2 \u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\uff1a2nd level cache\u306e\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">5.3 \u5b9f\u884c\u8a08\u753b\u306e\u78ba\u8a8d\u3068\u52d5\u7684SQL\u306e\u6700\u9069\u5316<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-19\">\u5fdc\u7528\u30c6\u30af\u30cb\u30c3\u30af\uff1a\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3068\u30de\u30c3\u30d4\u30f3\u30b0\u306e\u653b\u7565\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">6.1 \u52d5\u7684SQL\u3092\u4f7f\u3044\u3053\u306a\u3059\uff1aif, choose, where\u306e\u6d3b\u7528<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-21\">6.2 \u8907\u96d1\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30b0\u30e9\u30d5\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u624b\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-22\">\u30c6\u30b9\u30c8\u3068\u4fdd\u5b88\u6027\uff1a\u9577\u671f\u904b\u7528\u3092\u898b\u636e\u3048\u305f\u958b\u767a\u306e\u30dd\u30a4\u30f3\u30c8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-23\">7.1 MyBatis\u306e\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\uff1a@MybatisTest\u306e\u4f7f\u3044\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-24\">7.2 \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30eb\u3068\u306e\u9023\u643a\uff1aFlyway\u306e\u5c0e\u5165<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-25\">\u307e\u3068\u3081\uff1aSpring Boot + MyBatis\u30de\u30b9\u30bf\u30fc\u3078\u306e\u9053<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-26\">8.1 \u5b66\u7fd2\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\uff1a\u3055\u3089\u306a\u308b\u9ad8\u307f\u3092\u76ee\u6307\u3059\u305f\u3081\u306b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-27\">8.2 \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30ea\u30bd\u30fc\u30b9\uff1a\u56f0\u3063\u305f\u3068\u304d\u306e\u52a9\u3051\u306b\u306a\u308b\u30b5\u30a4\u30c8\u3084\u66f8\u7c4d<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Spring Boot\u3068MyBatis\u306e\u57fa\u672c\uff1a\u306a\u305c\u7d44\u307f\u5408\u308f\u305b\u308b\u306e\u304b\uff1f<\/h2>\n\n\n\n<p>\u30e2\u30c0\u30f3\u306aJava\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u3001Spring Boot\u3068MyBatis\u306f\u5f37\u529b\u306a\u7d44\u307f\u5408\u308f\u305b\u3068\u3057\u3066\u6ce8\u76ee\u3092\u96c6\u3081\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u4e8c\u3064\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u958b\u767a\u8005\u306f\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u5c64\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u3067\u306f\u3001\u306a\u305c\u3053\u306e\u7d44\u307f\u5408\u308f\u305b\u304c\u4eba\u6c17\u306a\u306e\u3067\u3057\u3087\u3046\u304b\uff1f<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">1.1 Spring Boot\u3068MyBatis\u305d\u308c\u305e\u308c\u306e\u7279\u5fb4\u3068\u5229\u70b9<\/h3>\n\n\n\n<p>Spring Boot\u306f\u3001Java\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8fc5\u901f\u306a\u958b\u767a\u3092\u53ef\u80fd\u306b\u3059\u308b\u9769\u65b0\u7684\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u7279\u5fb4\u304c\u958b\u767a\u8005\u304b\u3089\u9ad8\u304f\u8a55\u4fa1\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u8a2d\u5b9a<\/strong>: \u591a\u304f\u306e\u4e00\u822c\u7684\u306a\u8a2d\u5b9a\u3092\u81ea\u52d5\u3067\u884c\u3044\u3001\u958b\u767a\u8005\u306e\u8ca0\u62c5\u3092\u8efd\u6e1b<\/li>\n\n\n\n<li><strong>\u7d44\u307f\u8fbc\u307f\u30b5\u30fc\u30d0\u30fc<\/strong>: Tomcat\u306a\u3069\u306e\u30b5\u30fc\u30d0\u30fc\u3092\u5185\u8535\u3057\u3001\u3059\u3050\u306b\u5b9f\u884c\u53ef\u80fd\u306a\u74b0\u5883\u3092\u63d0\u4f9b<\/li>\n\n\n\n<li><strong>\u4f9d\u5b58\u95a2\u4fc2\u306e\u7c21\u7d20\u5316<\/strong>: \u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u81ea\u52d5\u3067\u7ba1\u7406\u3057\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e92\u63db\u6027\u3092\u4fdd\u8a3c<\/li>\n<\/ul>\n\n\n\n<p>\u4e00\u65b9\u3001MyBatis\u306f\u67d4\u8edf\u3067\u5f37\u529b\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SQL\u3068Java\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30de\u30c3\u30d4\u30f3\u30b0<\/strong>: \u76f4\u611f\u7684\u306a\u30de\u30c3\u30d4\u30f3\u30b0\u6a5f\u80fd\u306b\u3088\u308a\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u7c21\u7d20\u5316<\/li>\n\n\n\n<li><strong>\u52d5\u7684SQL\u306e\u751f\u6210<\/strong>: \u6761\u4ef6\u306b\u5fdc\u3058\u3066SQL\u3092\u52d5\u7684\u306b\u69cb\u7bc9\u3057\u3001\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406<\/li>\n\n\n\n<li><strong>\u67d4\u8edf\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c<\/strong>: \u5358\u7d14\u306aCRUD\u64cd\u4f5c\u304b\u3089\u8907\u96d1\u306a\u7d50\u5408\u30af\u30a8\u30ea\u307e\u3067\u3001\u5e45\u5e83\u3044\u30cb\u30fc\u30ba\u306b\u5bfe\u5fdc<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">1.2 \u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u5f97\u3089\u308c\u308b\u76f8\u4e57\u52b9\u679c<\/h3>\n\n\n\n<p>Spring Boot\u3068MyBatis\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u76f8\u4e57\u52b9\u679c\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u671f\u5f85\u3055\u308c\u308b\u76f8\u4e57\u52b9\u679c<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ol class=\"wp-block-list\">\n<li><strong>\u8a2d\u5b9a\u306e\u7c21\u7d20\u5316<\/strong>: Spring Boot\u306e\u81ea\u52d5\u8a2d\u5b9a\u6a5f\u80fd\u306b\u3088\u308a\u3001MyBatis\u306e\u521d\u671f\u8a2d\u5b9a\u304c\u5927\u5e45\u306b\u7c21\u7565\u5316\u3055\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u7d71\u5408<\/strong>: Spring Boot\u306e\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u6a5f\u80fd\u3068MyBatis\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u304c seamlessly \u306b\u9023\u643a\u3057\u3001\u30c7\u30fc\u30bf\u306e\u4e00\u8cab\u6027\u3092\u4fdd\u3061\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30c6\u30b9\u30c8\u306e\u5bb9\u6613\u3055<\/strong>: Spring Boot\u306e\u30c6\u30b9\u30c8\u652f\u63f4\u6a5f\u80fd\u3068MyBatis\u306e\u30e2\u30c3\u30af\u6a5f\u80fd\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3084\u7d71\u5408\u30c6\u30b9\u30c8\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/li>\n<\/ol>\n<\/div><\/div>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3082\u3001\u3053\u306e\u7d44\u307f\u5408\u308f\u305b\u306f\u9ad8\u3044\u8a55\u4fa1\u3092\u5f97\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u5927\u898f\u6a21\u306aEC\u30b5\u30a4\u30c8\u3084\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u63a1\u7528\u3057\u305f\u30b7\u30b9\u30c6\u30e0\u3067\u3001Spring Boot + MyBatis\u306e\u69cb\u6210\u304c\u63a1\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>GitHub\u3067\u306eStar\u6570\u3092\u898b\u3066\u3082\u3001Spring Boot\u306f60,000\u4ee5\u4e0a\u3001MyBatis\u306f16,000\u4ee5\u4e0a\u3068\u3001\u4e21\u8005\u3068\u3082\u306b\u9ad8\u3044\u4eba\u6c17\u3092\u8a87\u3063\u3066\u3044\u307e\u3059\uff082024\u5e7410\u6708\u73fe\u5728\uff09\u3002<\/p>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u306e\u5f37\u529b\u306a\u7d44\u307f\u5408\u308f\u305b\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5c0e\u5165\u3059\u308b\u65b9\u6cd5\u3092\u5177\u4f53\u7684\u306b\u898b\u3066\u3044\u304d\u307e\u3059\u3002Spring Boot\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bMyBatis\u3092\u8ffd\u52a0\u3057\u3001\u57fa\u672c\u7684\u306a\u8a2d\u5b9a\u3092\u884c\u3046\u624b\u9806\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6b21\u306e\u30ec\u30d9\u30eb\u306b\u5f15\u304d\u4e0a\u3052\u308b\u6e96\u5099\u306f\u3067\u304d\u3066\u3044\u307e\u3059\u304b\uff1f<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">\u74b0\u5883\u69cb\u7bc9\uff1aSpring Boot\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bMyBatis\u3092\u5c0e\u5165\u3057\u3088\u3046<\/h2>\n\n\n\n<p>Spring Boot\u3068MyBatis\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u59cb\u3081\u308b\u306b\u306f\u3001\u9069\u5207\u306a\u74b0\u5883\u69cb\u7bc9\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u3067\u74b0\u5883\u69cb\u7bc9\u306e\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">2.1 \u5fc5\u8981\u306a\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u307e\u305a\u3001\u4ee5\u4e0b\u306e\u524d\u63d0\u6761\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>JDK 17\u4ee5\u964d<\/li>\n\n\n\n<li>Maven \u307e\u305f\u306f Gradle<\/li>\n\n\n\n<li>\u597d\u307f\u306eIDE\uff08IntelliJ IDEA, Eclipse, VS Code\u7b49\uff09<\/li>\n<\/ul>\n\n\n\n<p>Spring Initializr (https:\/\/start.spring.io\/) \u3092\u4f7f\u7528\u3057\u3066\u3001\u65b0\u3057\u3044Spring Boot\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u300cProject\u300d\u3067Maven\u307e\u305f\u306fGradle\u3092\u9078\u629e<\/li>\n\n\n\n<li>\u300cLanguage\u300d\u3067Java\u3092\u9078\u629e<\/li>\n\n\n\n<li>Spring Boot\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u6700\u65b0\u306e\u5b89\u5b9a\u7248\u3092\u9078\u629e\uff08\u4f8b\uff1a3.1.x\uff09<\/li>\n\n\n\n<li>\u300cProject Metadata\u300d\u3092\u9069\u5207\u306b\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u300cDependencies\u300d\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0\uff1a\n<ul class=\"wp-block-list\">\n<li>Spring Web<\/li>\n\n\n\n<li>MyBatis Framework<\/li>\n\n\n\n<li>\u4f7f\u7528\u3059\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306eDriver\uff08\u4f8b\uff1aMySQL Driver\uff09<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3001IDE\u3067\u958b\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>pom.xml\uff08Maven\u306e\u5834\u5408\uff09\u306b\u4ee5\u4e0b\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;dependencies&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n        &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.mybatis.spring.boot&lt;\/groupId&gt;\n        &lt;artifactId&gt;mybatis-spring-boot-starter&lt;\/artifactId&gt;\n        &lt;version&gt;3.0.2&lt;\/version&gt;\n    &lt;\/dependency&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;com.mysql&lt;\/groupId&gt;\n        &lt;artifactId&gt;mysql-connector-j&lt;\/artifactId&gt;\n        &lt;scope&gt;runtime&lt;\/scope&gt;\n    &lt;\/dependency&gt;\n&lt;\/dependencies&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">2.2 application.properties\u3067\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u8a2d\u5b9a<\/h3>\n\n\n\n<p>\u6b21\u306b\u3001<code>src\/main\/resources\/application.properties<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304d\u3001\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">spring.datasource.url=jdbc:mysql:\/\/localhost:3306\/your_database\nspring.datasource.username=your_username\nspring.datasource.password=your_password\nspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver\n\nmybatis.mapper-locations=classpath:mapper\/*.xml\nmybatis.type-aliases-package=com.yourcompany.model<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u3092\u81ea\u5206\u306e\u74b0\u5883\u306b\u5408\u308f\u305b\u3066\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p>\u8a2d\u5b9a\u304c\u6b63\u3057\u304f\u6a5f\u80fd\u3057\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3059\u308b\u305f\u3081\u3001\u7c21\u5358\u306a\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068Mapper\u3092\u4f5c\u6210\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ src\/main\/java\/com\/yourcompany\/model\/User.java\npublic class User {\n    private Long id;\n    private String name;\n    \/\/ getters and setters\n}\n\n\/\/ src\/main\/java\/com\/yourcompany\/mapper\/UserMapper.java\n@Mapper\npublic interface UserMapper {\n    @Select(\"SELECT * FROM users WHERE id = #{id}\")\n    User getUserById(Long id);\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3067\u57fa\u672c\u7684\u306a\u74b0\u5883\u69cb\u7bc9\u306f\u5b8c\u4e86\u3067\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8d77\u52d5\u3057\u3001\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#fff9e6;color:#ffb36b\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#ffb36b\"><i class=\"fas fa-pencil-alt\"><\/i><\/span><div class=\"sng-box-msg__title\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30d2\u30f3\u30c8\uff1a<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e0d\u4e00\u81f4\u306b\u6ce8\u610f<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u60c5\u5831\u304c\u6b63\u3057\u3044\u304b\u78ba\u8a8d<\/li>\n\n\n\n<li>MyBatis\u306e\u30de\u30c3\u30d1\u30fc\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u304c\u6b63\u3057\u304f\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d<\/li>\n<\/ul>\n<\/div><\/div><\/div>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u306e\u74b0\u5883\u3092\u4f7f\u3063\u3066MyBatis\u306e\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u3092\u5b9f\u88c5\u3057\u3066\u3044\u304d\u307e\u3059\u3002\u6e96\u5099\u306f\u3067\u304d\u307e\u3057\u305f\u304b\uff1f\u5b9f\u969b\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306b\u9032\u307f\u307e\u3057\u3087\u3046\uff01<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">MyBatis\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\uff1aCRUD\u3092\u5b9f\u88c5\u3057\u3066\u307f\u3088\u3046<\/h2>\n\n\n\n<p>MyBatis\u3092\u4f7f\u7528\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u884c\u3046\u57fa\u672c\u7684\u306a\u65b9\u6cd5\u3092\u5b66\u3073\u307e\u3057\u3087\u3046\u3002\u3053\u3053\u3067\u306f\u3001CRUD\uff08Create, Read, Update, Delete\uff09\u64cd\u4f5c\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">3.1 Mapper\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u4f5c\u6210\u3068\u4f7f\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>MyBatis\u3067\u306f\u3001Mapper\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u901a\u3058\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u884c\u3044\u307e\u3059\u3002\u307e\u305a\u3001\u57fa\u672c\u7684\u306aMapper\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Mapper\npublic interface UserMapper {\n    @Select(\"SELECT * FROM users WHERE id = #{id}\")\n    User getUserById(Long id);\n\n    @Insert(\"INSERT INTO users(name, email) VALUES(#{name}, #{email})\")\n    @Options(useGeneratedKeys = true, keyProperty = \"id\")\n    int insertUser(User user);\n\n    @Update(\"UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}\")\n    int updateUser(User user);\n\n    @Delete(\"DELETE FROM users WHERE id = #{id}\")\n    int deleteUser(Long id);\n}<\/pre>\n\n\n\n<p>\u3053\u306eMapper\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u306f\u3001\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066SQL\u6587\u3092\u76f4\u63a5\u8a18\u8ff0\u3057\u3066\u3044\u307e\u3059\u3002<code>@Mapper<\/code>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u3001MyBatis\u304c\u3053\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u8a8d\u8b58\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">3.2 XML\u30de\u30c3\u30d4\u30f3\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u65b9\u3068\u6ce8\u610f\u70b9<\/h3>\n\n\n\n<p>\u8907\u96d1\u306aSQL\u3084\u52d5\u7684SQL\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001XML\u30de\u30c3\u30d4\u30f3\u30b0\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3068\u3088\u308a\u67d4\u8edf\u306b\u8a18\u8ff0\u3067\u304d\u307e\u3059\u3002<code>src\/main\/resources\/mapper\/UserMapper.xml<\/code>\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a18\u8ff0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?&gt;\n&lt;!DOCTYPE mapper PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\" \n  \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\"&gt;\n&lt;mapper namespace=\"com.yourcompany.mapper.UserMapper\"&gt;\n  &lt;select id=\"getUserById\" resultType=\"com.yourcompany.model.User\"&gt;\n    SELECT * FROM users WHERE id = #{id}\n  &lt;\/select&gt;\n  \n  &lt;insert id=\"insertUser\" useGeneratedKeys=\"true\" keyProperty=\"id\"&gt;\n    INSERT INTO users(name, email) VALUES(#{name}, #{email})\n  &lt;\/insert&gt;\n  \n  &lt;update id=\"updateUser\"&gt;\n    UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}\n  &lt;\/update&gt;\n  \n  &lt;delete id=\"deleteUser\"&gt;\n    DELETE FROM users WHERE id = #{id}\n  &lt;\/delete&gt;\n  &lt;!-- \u52d5\u7684SQL\u306e\u4f8b --&gt;\n  &lt;select id=\"findUsers\" resultType=\"com.yourcompany.model.User\"&gt;\n    SELECT * FROM users\n    &lt;where&gt;\n      &lt;if test=\"name != null\"&gt;\n        AND name LIKE CONCAT('%', #{name}, '%')\n      &lt;\/if&gt;\n      &lt;if test=\"email != null\"&gt;\n        AND email = #{email}\n      &lt;\/if&gt;\n    &lt;\/where&gt;\n  &lt;\/select&gt;\n&lt;\/mapper&gt;<\/pre>\n\n\n\n<p>XML\u30de\u30c3\u30d4\u30f3\u30b0\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001<code>application.properties<\/code>\u306b\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mybatis.mapper-locations=classpath:mapper\/*.xml<\/pre>\n\n\n\n<p>\u52d5\u7684SQL\u306e\u4f8b\u3067\u306f\u3001<code>&lt;where&gt;<\/code>\u3068<code>&lt;if&gt;<\/code>\u30bf\u30b0\u3092\u4f7f\u7528\u3057\u3066\u3001\u6761\u4ef6\u306b\u5fdc\u3058\u3066WHERE\u53e5\u3092\u52d5\u7684\u306b\u69cb\u7bc9\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u67d4\u8edf\u306a\u691c\u7d22\u30af\u30a8\u30ea\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>Mapper\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306b\u5bfe\u5fdc\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Mapper\npublic interface UserMapper {\n    \/\/ ... \u65e2\u5b58\u306e\u30e1\u30bd\u30c3\u30c9 ...\n\n    List&lt;User&gt; findUsers(@Param(\"name\") String name, @Param(\"email\") String email);\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>MyBatis\u306e\u64cd\u4f5c\u3092\u30c6\u30b9\u30c8\u3059\u308b\u305f\u3081\u306b\u3001<code>@MybatisTest<\/code>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u7c21\u5358\u306a\u30c6\u30b9\u30c8\u306e\u4f8b\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@MybatisTest\n@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)\nclass UserMapperTest {\n\n    @Autowired\n    private UserMapper userMapper;\n\n    @Test\n    void testInsertAndGetUser() {\n        User user = new User();\n        user.setName(\"Test User\");\n        user.setEmail(\"test@example.com\");\n\n        int result = userMapper.insertUser(user);\n        assertThat(result).isEqualTo(1);\n        assertThat(user.getId()).isNotNull();\n\n        User retrievedUser = userMapper.getUserById(user.getId());\n        assertThat(retrievedUser).isNotNull();\n        assertThat(retrievedUser.getName()).isEqualTo(\"Test User\");\n        assertThat(retrievedUser.getEmail()).isEqualTo(\"test@example.com\");\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u4fdd\u5b88\u6027\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9069\u5207\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u8a08<\/strong>: \u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b\u691c\u7d22\u6761\u4ef6\u306b\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f5c\u6210\u3057\u3001\u30af\u30a8\u30ea\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>N+1\u554f\u984c\u306e\u56de\u907f<\/strong>: \u95a2\u9023\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u53d6\u5f97\u3059\u308b\u969b\u306f\u3001\u53ef\u80fd\u306a\u9650\u308a\u7d50\u5408\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3057\u3001\u8907\u6570\u56de\u306e\u30af\u30a8\u30ea\u5b9f\u884c\u3092\u907f\u3051\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d9\u30fc\u30b9Mapper\u306e\u6d3b\u7528<\/strong>: \u5171\u901a\u306eCRUD\u64cd\u4f5c\u3092\u6301\u3064\u30d9\u30fc\u30b9Mapper\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u3001\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u3092\u9ad8\u3081\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public interface BaseMapper&lt;T, ID&gt; {\n    T selectById(ID id);\n    int insert(T entity);\n    int updateById(T entity);\n    int deleteById(ID id);\n}\n\n@Mapper\npublic interface UserMapper extends BaseMapper&lt;User, Long&gt; {\n    \/\/ \u30e6\u30fc\u30b6\u30fc\u56fa\u6709\u306e\u64cd\u4f5c\u306e\u307f\u3092\u5b9a\u7fa9\n    List&lt;User&gt; findByName(String name);\n}<\/pre>\n\n\n\n<p>MyBatis\u3092\u4f7f\u3063\u305fCRUD\u64cd\u4f5c\u306e\u57fa\u672c\u3092\u7406\u89e3\u3057\u305f\u3068\u3053\u308d\u3067\u3001\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u30d9\u30fc\u30b9\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u3068XML\u30d9\u30fc\u30b9\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306e\u4f7f\u3044\u5206\u3051\u306b\u3064\u3044\u3066\u3001\u3088\u308a\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u306f\u3069\u306e\u3088\u3046\u306a\u7279\u5fb4\u304c\u3042\u308a\u3001\u3069\u306e\u3088\u3046\u306a\u5834\u9762\u3067\u4f7f\u7528\u3059\u308b\u306e\u304c\u9069\u5207\u306a\u306e\u3067\u3057\u3087\u3046\u304b\uff1f<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3vs XML\uff1a\u72b6\u6cc1\u306b\u5fdc\u3058\u305f\u4f7f\u3044\u5206\u3051\u306e\u30b3\u30c4<\/h2>\n\n\n\n<p>MyBatis\u3067\u306f\u3001SQL\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u5b9a\u7fa9\u3059\u308b\u65b9\u6cd5\u3068\u3057\u3066\u3001\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u30d9\u30fc\u30b9\u3068XML\u30d9\u30fc\u30b9\u306e2\u3064\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306b\u9577\u6240\u3068\u77ed\u6240\u304c\u3042\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u9069\u5207\u306b\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">4.1 \u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u30d9\u30fc\u30b9\u306e\u5b9f\u88c5\u4f8b\u3068\u5229\u70b9<\/h3>\n\n\n\n<p>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u30d9\u30fc\u30b9\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u3001Java\u30b3\u30fc\u30c9\u5185\u3067\u76f4\u63a5SQL\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Mapper\npublic interface UserMapper {\n    @Select(\"SELECT * FROM users WHERE id = #{id}\")\n    User getUserById(Long id);\n\n    @Insert(\"INSERT INTO users(name, email) VALUES(#{name}, #{email})\")\n    @Options(useGeneratedKeys = true, keyProperty = \"id\")\n    int insertUser(User user);\n}<\/pre>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#b4e0fa;color:#009EF3\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#009EF3\"><i class=\"far fa-lightbulb\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u5229\u70b9:<\/strong><\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u3068SQL\u304c\u8fd1\u63a5\u3057\u3066\u304a\u308a\u3001\u7406\u89e3\u3057\u3084\u3059\u3044<\/li>\n\n\n\n<li>\u5358\u7d14\u306aCRUD\u64cd\u4f5c\u306b\u9069\u3057\u3066\u3044\u308b<\/li>\n\n\n\n<li>IDE\u306e\u30b5\u30dd\u30fc\u30c8\u304c\u5f37\u529b\uff08\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3001\u30b3\u30fc\u30c9\u88dc\u5b8c\u306a\u3069\uff09<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u5c11\u306a\u304f\u3066\u6e08\u3080<\/li>\n<\/ul>\n<\/div><\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">4.2 XML\u30d9\u30fc\u30b9\u306e\u5b9f\u88c5\u4f8b\u3068\u305d\u306e\u5f37\u307f<\/h3>\n\n\n\n<p>XML\u30d9\u30fc\u30b9\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306f\u3001\u5225\u30d5\u30a1\u30a4\u30eb\u3067SQL\u3092\u7ba1\u7406\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?&gt;\n&lt;!DOCTYPE mapper PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\" \n  \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\"&gt;\n&lt;mapper namespace=\"com.example.UserMapper\"&gt;\n  &lt;select id=\"getUserById\" resultType=\"com.example.User\"&gt;\n    SELECT * FROM users WHERE id = #{id}\n  &lt;\/select&gt;\n\n  &lt;insert id=\"insertUser\" useGeneratedKeys=\"true\" keyProperty=\"id\"&gt;\n    INSERT INTO users(name, email) VALUES(#{name}, #{email})\n  &lt;\/insert&gt;\n&lt;\/mapper&gt;<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#b4e0fa;color:#009EF3\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#009EF3\"><i class=\"far fa-lightbulb\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u5f37\u307f:<\/strong><\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u8907\u96d1\u306aSQL\u3084\u52d5\u7684SQL\u306e\u7ba1\u7406\u306b\u9069\u3057\u3066\u3044\u308b<\/li>\n\n\n\n<li>SQL\u306e\u518d\u5229\u7528\u6027\u304c\u9ad8\u3044<\/li>\n\n\n\n<li>\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u53ef\u8aad\u6027\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u304c\u9ad8\u3044<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5c02\u9580\u5bb6\u3068Java\u958b\u767a\u8005\u306e\u5f79\u5272\u5206\u62c5\u304c\u3057\u3084\u3059\u3044<\/li>\n<\/ul>\n<\/div><\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u4f7f\u3044\u5206\u3051\u306e\u30b3\u30c4<\/h3>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u8868\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n<div id=\"id-63521ebf-f213-4fb7-bad4-2467bc1c5655\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u8981\u7d20<\/th><th>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/th><th>XML<\/th><\/tr><\/thead><tbody><tr><td>\u5358\u7d14\u306aCRUD<\/td><td>\u25ce<\/td><td>\u25cb<\/td><\/tr><tr><td>\u8907\u96d1\u306aSQL<\/td><td>\u25b3<\/td><td>\u25ce<\/td><\/tr><tr><td>\u52d5\u7684SQL<\/td><td>\u25cb<\/td><td>\u25ce<\/td><\/tr><tr><td>\u53ef\u8aad\u6027\uff08\u5c0f\u898f\u6a21\uff09<\/td><td>\u25ce<\/td><td>\u25cb<\/td><\/tr><tr><td>\u53ef\u8aad\u6027\uff08\u5927\u898f\u6a21\uff09<\/td><td>\u25b3<\/td><td>\u25ce<\/td><\/tr><tr><td>IDE\u652f\u63f4<\/td><td>\u25ce<\/td><td>\u25cb<\/td><\/tr><tr><td>\u5b66\u7fd2\u66f2\u7dda<\/td><td>\u7de9\u3084\u304b<\/td><td>\u3084\u3084\u6025<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u898f\u6a21\u3001SQL\u306e\u8907\u96d1\u3055\u3001\u30c1\u30fc\u30e0\u306e\u7d4c\u9a13\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8981\u4ef6\u306a\u3069\u3092\u8003\u616e\u3057\u3066\u9078\u629e\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u30a2\u30d7\u30ed\u30fc\u30c1\u3082\u6709\u52b9\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001\u5358\u7d14\u306aCRUD\u64cd\u4f5c\u306b\u306f\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3001\u8907\u96d1\u306a\u30af\u30a8\u30ea\u306b\u306fXML\u3092\u4f7f\u7528\u3059\u308b\u3068\u3044\u3046\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u4e00\u8cab\u6027\u3092\u4fdd\u3064\u305f\u3081\u306b\u30c1\u30fc\u30e0\u5185\u3067\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u8a2d\u3051\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001MyBatis\u3092\u4f7f\u7528\u3059\u308b\u4e0a\u3067\u907f\u3051\u3066\u901a\u308c\u306a\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3059\u3002\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3084\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u969b\u306b\u3001\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u6700\u9069\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5f15\u304d\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u304b\uff1f<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\uff1aMyBatis\u3092\u6700\u9069\u5316\u3059\u308b3\u3064\u306e\u6280<\/h2>\n\n\n\n<p>MyBatis\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e3\u3064\u306e\u91cd\u8981\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6280\u3092\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u306e\u52b9\u7387\u3092\u5927\u5e45\u306b\u6539\u5584\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">5.1 N+1\u554f\u984c\u306e\u89e3\u6c7a\u7b56\u3068\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>N+1\u554f\u984c\u306f\u30011\u56de\u306e\u30af\u30a8\u30ea\u3067\u53d6\u5f97\u3059\u3079\u304d\u30c7\u30fc\u30bf\u3092\u3001N\u56de\u306e\u8ffd\u52a0\u30af\u30a8\u30ea\u3067\u53d6\u5f97\u3057\u3066\u3057\u307e\u3046\u554f\u984c\u3067\u3059\u3002\u3053\u308c\u306f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5927\u304d\u306a\u4f4e\u4e0b\u306b\u3064\u306a\u304c\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b561: JOIN\u3092\u4f7f\u7528\u3059\u308b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;select id=\"getUsersWithPosts\" resultMap=\"userWithPostsResult\"&gt;\n  SELECT u.*, p.* \n  FROM users u \n  LEFT JOIN posts p ON u.id = p.user_id\n&lt;\/select&gt;\n\n&lt;resultMap id=\"userWithPostsResult\" type=\"com.example.User\"&gt;\n  &lt;id property=\"id\" column=\"id\"\/&gt;\n  &lt;result property=\"name\" column=\"name\"\/&gt;\n  &lt;collection property=\"posts\" ofType=\"com.example.Post\"&gt;\n    &lt;id property=\"id\" column=\"post_id\"\/&gt;\n    &lt;result property=\"title\" column=\"title\"\/&gt;\n  &lt;\/collection&gt;\n&lt;\/resultMap&gt;<\/pre>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b562: \u30d0\u30c3\u30c1\u53d6\u5f97\u3092\u5b9f\u88c5\u3059\u308b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Select(\"SELECT * FROM posts WHERE user_id IN \n  &lt;foreach item='item' index='index' collection='list'\n      open='(' separator=',' close=')'&gt;\n        #{item}\n  &lt;\/foreach&gt;\")\nList&lt;Post&gt; getPostsByUserIds(List&lt;Long&gt; userIds);<\/pre>\n\n\n\n<p>\u30d0\u30c3\u30c1\u51e6\u7406\u3092\u4f7f\u7528\u3057\u3066\u8907\u6570\u306e\u64cd\u4f5c\u3092\u307e\u3068\u3081\u3066\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {\n    UserMapper mapper = sqlSession.getMapper(UserMapper.class);\n    for (User user : users) {\n        mapper.insertUser(user);\n    }\n    sqlSession.flushStatements();\n    sqlSession.commit();\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">5.2 \u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\uff1a2nd level cache\u306e\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>MyBatis\u306b\u306f2\u30ec\u30d9\u30eb\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>1st level cache: \u30bb\u30c3\u30b7\u30e7\u30f3\u30ec\u30d9\u30eb\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u6709\u52b9\uff09<\/li>\n\n\n\n<li>2nd level cache: \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ec\u30d9\u30eb\u306e\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n<\/ol>\n\n\n\n<p>2nd level cache\u3092\u6d3b\u7528\u3059\u308b\u306b\u306f\u3001\u307e\u305a\u30de\u30c3\u30d1\u30fcXML\u3067<code>&lt;cache&gt;<\/code>\u8981\u7d20\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;cache\n  eviction=\"LRU\"\n  flushInterval=\"60000\"\n  size=\"512\"\n  readOnly=\"true\"\/&gt;<\/pre>\n\n\n\n<p>\u305d\u3057\u3066\u3001\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30af\u30e9\u30b9\u3092<code>Serializable<\/code>\u306b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class User implements Serializable {\n    private static final long serialVersionUID = 1L;\n    \/\/ fields, getters, setters\n}<\/pre>\n\n\n\n<p>application.properties\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mybatis.configuration.cache-enabled=true<\/pre>\n\n\n\n<p>\u6ce8\u610f\u70b9\u3068\u3057\u3066\u3001\u983b\u7e41\u306b\u66f4\u65b0\u3055\u308c\u308b\u30c7\u30fc\u30bf\u3084\u53b3\u5bc6\u306a\u4e00\u8cab\u6027\u304c\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u306b\u306f2nd level cache\u306e\u4f7f\u7528\u3092\u907f\u3051\u308b\u3079\u304d\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">5.3 \u5b9f\u884c\u8a08\u753b\u306e\u78ba\u8a8d\u3068\u52d5\u7684SQL\u306e\u6700\u9069\u5316<\/h3>\n\n\n\n<p>SQL\u306e\u5b9f\u884c\u8a08\u753b\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3067\u3001\u30af\u30a8\u30ea\u306e\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u3092\u7279\u5b9a\u3067\u304d\u307e\u3059\u3002MyBatis\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9f\u884c\u8a08\u753b\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Configuration configuration = sqlSession.getConfiguration();\nMappedStatement mappedStatement = configuration.getMappedStatement(\"com.example.UserMapper.getUserById\");\nBoundSql boundSql = mappedStatement.getBoundSql(parameterObject);\nString sql = boundSql.getSql();\n\/\/ SQL\u306b\"EXPLAIN \"\u3092\u8ffd\u52a0\u3057\u3066\u5b9f\u884c\u8a08\u753b\u3092\u53d6\u5f97<\/pre>\n\n\n\n<p>\u52d5\u7684SQL\u306e\u6700\u9069\u5316\u3067\u306f\u3001\u4e0d\u8981\u306a\u6761\u4ef6\u3092\u7701\u7565\u3057\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u52b9\u679c\u7684\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;select id=\"findUsers\" resultType=\"User\"&gt;\n  SELECT * FROM users\n  &lt;where&gt;\n    &lt;if test=\"name != null and name != ''\"&gt;\n      AND name LIKE CONCAT('%', #{name}, '%')\n    &lt;\/if&gt;\n    &lt;if test=\"email != null and email != ''\"&gt;\n      AND email = #{email}\n    &lt;\/if&gt;\n  &lt;\/where&gt;\n&lt;\/select&gt;<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001\u6761\u4ef6\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306e\u307fWHERE\u53e5\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001\u4e0d\u8981\u306a\u51e6\u7406\u3092\u6e1b\u3089\u3057\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528\u3092\u4fc3\u9032\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6539\u5584\u52b9\u679c\u3092\u6e2c\u5b9a\u3059\u308b\u306b\u306f\u3001\u30ed\u30b0\u306b\u3088\u308b\u5b9f\u884c\u6642\u9593\u306e\u8a08\u6e2c\u3084\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\u306e\u4f7f\u7528\u304c\u6709\u52b9\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001log4jdbc\u3092\u4f7f\u7528\u3057\u3066SQL\u306e\u5b9f\u884c\u6642\u9593\u3092\u30ed\u30b0\u306b\u51fa\u529b\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6280\u8853\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001MyBatis\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3055\u3089\u306b\u9ad8\u5ea6\u306a\u4f7f\u7528\u65b9\u6cd5\u3068\u3057\u3066\u3001\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3068\u30de\u30c3\u30d4\u30f3\u30b0\u306e\u653b\u7565\u6cd5\u3092\u898b\u3066\u3044\u304d\u307e\u3059\u3002\u5927\u898f\u6a21\u306a\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\u3084\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u52b9\u7387\u7684\u306b\u6271\u3046\u305f\u3081\u306b\u3001MyBatis\u3092\u3069\u306e\u3088\u3046\u306b\u6d3b\u7528\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u304b\uff1f<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">\u5fdc\u7528\u30c6\u30af\u30cb\u30c3\u30af\uff1a\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3068\u30de\u30c3\u30d4\u30f3\u30b0\u306e\u653b\u7565\u6cd5<\/h2>\n\n\n\n<p>\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3067\u306f\u3001\u5358\u7d14\u306aCRUD\u64cd\u4f5c\u3060\u3051\u3067\u306a\u304f\u3001\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3084\u9ad8\u5ea6\u306a\u30c7\u30fc\u30bf\u30de\u30c3\u30d4\u30f3\u30b0\u304c\u5fc5\u8981\u3068\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002MyBatis\u306f\u3001\u3053\u306e\u3088\u3046\u306a\u8907\u96d1\u306a\u8981\u6c42\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u306e\u8c4a\u5bcc\u306a\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">6.1 \u52d5\u7684SQL\u3092\u4f7f\u3044\u3053\u306a\u3059\uff1aif, choose, where\u306e\u6d3b\u7528<\/h3>\n\n\n\n<p>\u52d5\u7684SQL\u306f\u3001\u6761\u4ef6\u306b\u5fdc\u3058\u3066\u30af\u30a8\u30ea\u3092\u52d5\u7684\u306b\u69cb\u7bc9\u3059\u308b\u5f37\u529b\u306a\u6a5f\u80fd\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u8981\u7d20\u3068\u305d\u306e\u4f7f\u7528\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;select id=\"findUsers\" resultType=\"User\"&gt;\n  SELECT * FROM users\n  &lt;where&gt;\n    &lt;if test=\"name != null\"&gt;\n      AND name LIKE CONCAT('%', #{name}, '%')\n    &lt;\/if&gt;\n    &lt;choose&gt;\n      &lt;when test=\"status != null\"&gt;\n        AND status = #{status}\n      &lt;\/when&gt;\n      &lt;otherwise&gt;\n        AND status != 'DELETED'\n      &lt;\/otherwise&gt;\n    &lt;\/choose&gt;\n  &lt;\/where&gt;\n  ORDER BY id DESC\n&lt;\/select&gt;<\/pre>\n\n\n\n<p>\u3053\u306e\u4f8b\u3067\u306f\u3001<code>&lt;where&gt;<\/code>\u8981\u7d20\u304c\u81ea\u52d5\u7684\u306bWHERE\u53e5\u3092\u51e6\u7406\u3057\u3001\u6700\u521d\u306eAND\/OR\u3092\u9069\u5207\u306b\u53d6\u308a\u9664\u304d\u307e\u3059\u3002<code>&lt;choose&gt;<\/code>\u8981\u7d20\u306f\u3001\u8907\u6570\u306e\u6761\u4ef6\u304b\u3089\u4e00\u3064\u3092\u9078\u629e\u3059\u308b\u969b\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3088\u308a\u8907\u96d1\u306a\u52d5\u7684SQL\u306b\u306f\u3001<code>&lt;trim&gt;<\/code>\u3001<code>&lt;set&gt;<\/code>\u3001<code>&lt;foreach&gt;<\/code>\u8981\u7d20\u3082\u6d3b\u7528\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;update id=\"updateUser\"&gt;\n  UPDATE users\n  &lt;set&gt;\n    &lt;if test=\"name != null\"&gt;name = #{name},&lt;\/if&gt;\n    &lt;if test=\"email != null\"&gt;email = #{email},&lt;\/if&gt;\n    &lt;if test=\"status != null\"&gt;status = #{status},&lt;\/if&gt;\n  &lt;\/set&gt;\n  WHERE id = #{id}\n&lt;\/update&gt;\n\n&lt;select id=\"selectPostIn\" resultType=\"Post\"&gt;\n  SELECT * FROM post\n  WHERE ID in\n  &lt;foreach item=\"item\" index=\"index\" collection=\"list\"\n      open=\"(\" separator=\",\" close=\")\"&gt;\n        #{item}\n  &lt;\/foreach&gt;\n&lt;\/select&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">6.2 \u8907\u96d1\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30b0\u30e9\u30d5\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u624b\u6cd5<\/h3>\n\n\n\n<p>1\u5bfe\u591a\u3084\u591a\u5bfe\u591a\u306e\u95a2\u4fc2\u3092\u6301\u3064\u8907\u96d1\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30b0\u30e9\u30d5\u3092\u30de\u30c3\u30d4\u30f3\u30b0\u3059\u308b\u969b\u306f\u3001<code>&lt;association&gt;<\/code>\u3068<code>&lt;collection&gt;<\/code>\u8981\u7d20\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;resultMap id=\"blogResult\" type=\"Blog\"&gt;\n  &lt;id property=\"id\" column=\"blog_id\"\/&gt;\n  &lt;result property=\"title\" column=\"blog_title\"\/&gt;\n  &lt;association property=\"author\" javaType=\"Author\"&gt;\n    &lt;id property=\"id\" column=\"author_id\"\/&gt;\n    &lt;result property=\"name\" column=\"author_name\"\/&gt;\n  &lt;\/association&gt;\n  &lt;collection property=\"posts\" ofType=\"Post\"&gt;\n    &lt;id property=\"id\" column=\"post_id\"\/&gt;\n    &lt;result property=\"subject\" column=\"post_subject\"\/&gt;\n    &lt;result property=\"body\" column=\"post_body\"\/&gt;\n  &lt;\/collection&gt;\n&lt;\/resultMap&gt;<\/pre>\n\n\n\n<p>\u3053\u306e\u4f8b\u3067\u306f\u3001\u30d6\u30ed\u30b0\u3001\u8457\u8005\u3001\u6295\u7a3f\u306e\u95a2\u4fc2\u3092\u4e00\u3064\u306e\u7d50\u679c\u30de\u30c3\u30d7\u3067\u8868\u73fe\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u9045\u5ef6\u8aad\u307f\u8fbc\u307f\uff08lazy loading\uff09\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5fc5\u8981\u306a\u3068\u304d\u306b\u306e\u307f\u95a2\u9023\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;resultMap id=\"lazyLoadingExample\" type=\"Blog\"&gt;\n  &lt;association property=\"author\" select=\"selectAuthor\" column=\"author_id\" fetchType=\"lazy\"\/&gt;\n  &lt;collection property=\"posts\" select=\"selectPosts\" column=\"id\" fetchType=\"lazy\"\/&gt;\n&lt;\/resultMap&gt;<\/pre>\n\n\n\n<p>\u30b9\u30c8\u30a2\u30c9\u30d7\u30ed\u30b7\u30fc\u30b8\u30e3\u306e\u547c\u3073\u51fa\u3057\u3082\u3001MyBatis\u3067\u7c21\u5358\u306b\u884c\u3048\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;select id=\"callGetUserCount\" statementType=\"CALLABLE\"&gt;\n  {call getUserCount(\n    #{department, mode=IN, jdbcType=VARCHAR},\n    #{count, mode=OUT, jdbcType=INTEGER}\n  )}\n&lt;\/select&gt;<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u9ad8\u5ea6\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3084\u5927\u898f\u6a21\u306a\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\u3082\u52b9\u7387\u7684\u306b\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u6b20\u304b\u305b\u306a\u3044\u3001\u30c6\u30b9\u30c8\u3068\u9577\u671f\u7684\u306a\u4fdd\u5b88\u6027\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002\u8907\u96d1\u5316\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3001\u3069\u306e\u3088\u3046\u306b\u3057\u3066\u5b89\u5b9a\u7684\u306b\u904b\u7528\u3057\u7d9a\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u304b\uff1f<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-22\">\u30c6\u30b9\u30c8\u3068\u4fdd\u5b88\u6027\uff1a\u9577\u671f\u904b\u7528\u3092\u898b\u636e\u3048\u305f\u958b\u767a\u306e\u30dd\u30a4\u30f3\u30c8<\/h2>\n\n\n\n<p>MyBatis\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u9577\u671f\u904b\u7528\u3092\u6210\u529f\u3055\u305b\u308b\u305f\u3081\u306b\u306f\u3001\u9069\u5207\u306a\u30c6\u30b9\u30c8\u6226\u7565\u3068\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u958b\u767a\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30c6\u30b9\u30c8\u3068\u4fdd\u5b88\u6027\u306b\u95a2\u3059\u308b\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">7.1 MyBatis\u306e\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\uff1a@MybatisTest\u306e\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>MyBatis\u306e\u30c6\u30b9\u30c8\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u305f\u3081\u306b\u3001<code>@MybatisTest<\/code>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306f\u3001MyBatis\u95a2\u9023\u306e\u8a2d\u5b9a\u306e\u307f\u3092\u8aad\u307f\u8fbc\u307f\u3001\u8efd\u91cf\u306a\u30c6\u30b9\u30c8\u74b0\u5883\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@MybatisTest\n@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)\npublic class UserMapperTest {\n\n    @Autowired\n    private UserMapper userMapper;\n\n    @Test\n    public void testFindUserById() {\n        User user = userMapper.findById(1L);\n        assertNotNull(user);\n        assertEquals(\"John Doe\", user.getName());\n    }\n}<\/pre>\n\n\n\n<p>\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u7ba1\u7406\u306b\u306f\u3001DBUnit\u3092\u4f7f\u7528\u3059\u308b\u3068\u4fbf\u5229\u3067\u3059\u3002DBUnit\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3054\u3068\u306b\u4e00\u8cab\u3057\u305f\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u6e96\u5099\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@MybatisTest\n@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)\n@DatabaseSetup(\"\/testdata\/users.xml\")\npublic class UserMapperTest {\n    \/\/ \u30c6\u30b9\u30c8\u30e1\u30bd\u30c3\u30c9\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">7.2 \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30eb\u3068\u306e\u9023\u643a\uff1aFlyway\u306e\u5c0e\u5165<\/h3>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u306e\u5909\u66f4\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306b\u3001Flyway\u306e\u3088\u3046\u306a\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30eb\u306e\u5c0e\u5165\u304c\u52b9\u679c\u7684\u3067\u3059\u3002Flyway\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30b9\u30ad\u30fc\u30de\u306e\u5909\u66f4\u5c65\u6b74\u3092\u8ffd\u8de1\u3057\u3001\u7570\u306a\u308b\u74b0\u5883\u9593\u3067\u4e00\u8cab\u6027\u3092\u4fdd\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305a\u3001<code>pom.xml<\/code>\u306bFlyway\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;dependency&gt;\n    &lt;groupId&gt;org.flywaydb&lt;\/groupId&gt;\n    &lt;artifactId&gt;flyway-core&lt;\/artifactId&gt;\n&lt;\/dependency&gt;<\/pre>\n\n\n\n<p>\u6b21\u306b\u3001<code>src\/main\/resources\/db\/migration<\/code>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- V1__Create_users_table.sql\nCREATE TABLE users (\n    id BIGINT PRIMARY KEY AUTO_INCREMENT,\n    name VARCHAR(100) NOT NULL,\n    email VARCHAR(100) UNIQUE NOT NULL\n);<\/pre>\n\n\n\n<p><code>application.properties<\/code>\u306bFlyway\u306e\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">spring.flyway.locations=classpath:db\/migration\nspring.flyway.baseline-on-migrate=true<\/pre>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8d77\u52d5\u6642\u306b\u81ea\u52d5\u7684\u306b\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#b4e0fa;color:#009EF3\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#009EF3\"><i class=\"far fa-lightbulb\"><\/i><\/span><div class=\"sng-box-msg__title\">\u9577\u671f\u904b\u7528\u3092\u898b\u636e\u3048\u305f\u958b\u767a\u3067\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406<\/strong>: SQL\u30d5\u30a1\u30a4\u30eb\u3082\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3068\u540c\u69d8\u306b\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3067\u7ba1\u7406\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3<\/strong>: JavaDoc\u3092\u4f7f\u7528\u3057\u3066Mapper\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u8ffd\u52a0\u3057\u3001SQL\u306b\u3082\u9069\u5207\u306a\u30b3\u30e1\u30f3\u30c8\u3092\u4ed8\u3051\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0<\/strong>: \u5b9a\u671f\u7684\u306bSQL\u3068Java\u30b3\u30fc\u30c9\u3092\u898b\u76f4\u3057\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u53ef\u8aad\u6027\u3092\u6539\u5584\u3057\u307e\u3059\u3002<\/li>\n<\/ol>\n<\/div><\/div><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u3092\u7ba1\u7406\u3059\u308bMapper\n *\/\n@Mapper\npublic interface UserMapper {\n    \/**\n     * \u6307\u5b9a\u3055\u308c\u305fID\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002\n     * @param id \u30e6\u30fc\u30b6\u30fcID\n     * @return \u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u3001\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306fnull\n     *\/\n    @Select(\"SELECT * FROM users WHERE id = #{id}\")\n    User findById(Long id);\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u624b\u6cd5\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30c6\u30b9\u30c8\u53ef\u80fd\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044MyBatis\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3057\u3001\u9577\u671f\u7684\u306a\u904b\u7528\u3092\u6210\u529f\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u307e\u3067\u306b\u5b66\u3093\u3060\u5185\u5bb9\u3092\u7dcf\u62ec\u3057\u3001Spring Boot + MyBatis\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u3001\u3055\u3089\u306a\u308b\u5b66\u7fd2\u306e\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u306b\u3064\u3044\u3066\u7d39\u4ecb\u3057\u307e\u3059\u3002MyBatis\u30de\u30b9\u30bf\u30fc\u3078\u306e\u9053\u306e\u308a\u3067\u3001\u6b21\u306b\u4f55\u3092\u5b66\u3076\u3079\u304d\u3067\u3057\u3087\u3046\u304b\uff1f<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-25\">\u307e\u3068\u3081\uff1aSpring Boot + MyBatis\u30de\u30b9\u30bf\u30fc\u3078\u306e\u9053<\/h2>\n\n\n\n<p>\u672c\u8a18\u4e8b\u3067\u306f\u3001Spring Boot\u3068MyBatis\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u9ad8\u901f\u3067\u5805\u7262\u306a\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u5c64\u306e\u69cb\u7bc9\u65b9\u6cd5\u306b\u3064\u3044\u3066\u3001\u5e45\u5e83\u304f\u30ab\u30d0\u30fc\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u4e3b\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u3092\u632f\u308a\u8fd4\u308b\u3068\u3001\u57fa\u672c\u7684\u306a\u6982\u5ff5\u3084\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u59cb\u307e\u308a\u3001CRUD\u64cd\u4f5c\u306e\u5b9f\u88c5\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u3001\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3068\u30de\u30c3\u30d4\u30f3\u30b0\u306e\u624b\u6cd5\u3001\u305d\u3057\u3066\u30c6\u30b9\u30c8\u3068\u9577\u671f\u904b\u7528\u306e\u6226\u7565\u307e\u3067\u5b66\u3073\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>Spring Boot + MyBatis\u306e\u7d44\u307f\u5408\u308f\u305b\u306f\u3001\u958b\u767a\u306e\u8fc5\u901f\u5316\u3001\u67d4\u8edf\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3001\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u4fdd\u5b88\u6027\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6280\u8853\u3092\u7fd2\u5f97\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u3067\u62e1\u5f35\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">8.1 \u5b66\u7fd2\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\uff1a\u3055\u3089\u306a\u308b\u9ad8\u307f\u3092\u76ee\u6307\u3059\u305f\u3081\u306b<\/h3>\n\n\n\n<p>MyBatis\u30de\u30b9\u30bf\u30fc\u3078\u306e\u9053\u306f\u307e\u3060\u307e\u3060\u7d9a\u304d\u307e\u3059\u3002\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u9ad8\u5ea6\u306a\u30c8\u30d4\u30c3\u30af\u306b\u6311\u6226\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306eMyBatis\u6d3b\u7528<\/li>\n\n\n\n<li>NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a<\/li>\n\n\n\n<li>\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3068MyBatis<\/li>\n<\/ol>\n\n\n\n<p>\u5b66\u3093\u3060\u77e5\u8b58\u3092\u5b9f\u8df5\u306b\u79fb\u3059\u305f\u3081\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u53d6\u308a\u7d44\u3093\u3067\u307f\u308b\u306e\u3082\u826f\u3044\u3067\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>E\u30b3\u30de\u30fc\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u958b\u767a<\/li>\n\n\n\n<li>\u30d6\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u5206\u6790\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u4f5c\u6210<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">8.2 \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30ea\u30bd\u30fc\u30b9\uff1a\u56f0\u3063\u305f\u3068\u304d\u306e\u52a9\u3051\u306b\u306a\u308b\u30b5\u30a4\u30c8\u3084\u66f8\u7c4d<\/h3>\n\n\n\n<p>\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u306e\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u6d3b\u7528\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/mybatis.org\/mybatis-3\/\">MyBatis\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a><\/li>\n\n\n\n<li>Stack Overflow: <a href=\"https:\/\/stackoverflow.com\/questions\/tagged\/mybatis\">mybatis<\/a>\u30bf\u30b0<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/mybatis\/mybatis-3\/discussions\">GitHub Discussions<\/a><\/li>\n\n\n\n<li>\u66f8\u7c4d: \u300cMyBatis in Action\u300d\u300cMastering MyBatis 3\u300d<\/li>\n<\/ul>\n\n\n\n<p>MyBatis\u306f\u5e38\u306b\u9032\u5316\u3057\u3066\u304a\u308a\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u5bfe\u5fdc\u3084AI\/\u6a5f\u68b0\u5b66\u7fd2\u3068\u306e\u7d71\u5408\u306a\u3069\u3001\u65b0\u3057\u3044\u6280\u8853\u3068\u306e\u878d\u5408\u304c\u9032\u3093\u3067\u3044\u307e\u3059\u3002\u6700\u65b0\u306e\u30c8\u30ec\u30f3\u30c9\u306b\u3082\u6ce8\u76ee\u3057\u3064\u3064\u3001\u81ea\u8eab\u306e\u30b9\u30ad\u30eb\u3092\u78e8\u304d\u7d9a\u3051\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p>Spring Boot + MyBatis\u30de\u30b9\u30bf\u30fc\u3078\u306e\u9053\u306e\u308a\u306f\u9577\u304f\u3001\u6642\u306b\u56f0\u96e3\u3092\u4f34\u3046\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3057\u304b\u3057\u3001\u4e00\u6b69\u4e00\u6b69\u7740\u5b9f\u306b\u9032\u3081\u3070\u3001\u5fc5\u305a\u76ee\u6a19\u306b\u5230\u9054\u3067\u304d\u307e\u3059\u3002\u672c\u8a18\u4e8b\u304c\u3001\u3042\u306a\u305f\u306eJava\u958b\u767a\u8005\u3068\u3057\u3066\u306e\u30ad\u30e3\u30ea\u30a2\u306e\u4e00\u52a9\u3068\u306a\u308c\u3070\u5e78\u3044\u3067\u3059\u3002\u9811\u5f35\u3063\u3066\u304f\u3060\u3055\u3044\uff01<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":{"0":"post-432","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=432"}],"version-history":[{"count":3,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/432\/revisions"}],"predecessor-version":[{"id":3498,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/432\/revisions\/3498"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}