{"id":355,"date":"2025-03-24T08:54:49","date_gmt":"2025-03-23T23:54:49","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=355"},"modified":"2025-03-24T08:54:49","modified_gmt":"2025-03-23T23:54:49","slug":"%e3%80%902024%e5%b9%b4%e6%9c%80%e6%96%b0%e3%80%91spring-boot-with-jpa%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e5%88%9d%e5%bf%83%e8%80%85%e3%81%8b%e3%82%89%e3%82%a8%e3%82%ad%e3%82%b9","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=355","title":{"rendered":"\u30102024\u5e74\u6700\u65b0\u3011Spring Boot with JPA\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u521d\u5fc3\u8005\u304b\u3089\u30a8\u30ad\u30b9\u30d1\u30fc\u30c8\u307e\u3067\u306e\u9053\u306e\u308a"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"i-0\">1. \u306f\u3058\u3081\u306b\uff1aSpring Boot with JPA\u306e\u6982\u8981<\/h1>\n\n\n\n<p>\u73fe\u4ee3\u306eJava\u958b\u767a\u306b\u304a\u3044\u3066\u3001Spring Boot\u3068JPA\uff08Java Persistence API\uff09\u306f\u975e\u5e38\u306b\u91cd\u8981\u306a\u6280\u8853\u30b9\u30bf\u30c3\u30af\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u7d44\u307f\u5408\u308f\u305b\u306f\u3001\u52b9\u7387\u7684\u3067\u5805\u7262\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3092\u53ef\u80fd\u306b\u3057\u3001\u591a\u304f\u306e\u958b\u767a\u8005\u306b\u652f\u6301\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001Spring Boot\u3068JPA\u306e\u6982\u8981\u3001\u305d\u3057\u3066\u3053\u308c\u3089\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u306e\u5229\u70b9\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\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\">1. \u306f\u3058\u3081\u306b\uff1aSpring Boot with JPA\u306e\u6982\u8981<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">1.1 Spring Boot\u3068\u306f\u4f55\u304b\uff1f<\/a>      <\/li>      <li>        <a href=\"#i-2\">1.2 JPA\u3068\u306f\u4f55\u304b\uff1f<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">1.3 Spring Boot\u3068JPA\u306e\u95a2\u4fc2\u6027<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">2. Spring Boot with JPA\u306e\u74b0\u5883\u8a2d\u5b9a<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">2.1 \u5fc5\u8981\u306a\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0<\/a>      <\/li>      <li>        <a href=\"#i-6\">2.2 application.properties\u306e\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-7\">2.3 \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-8\">\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u6ce8\u610f\u70b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-9\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-10\">3. \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-11\">3.1 JPA\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5b9a\u7fa9<\/a>      <\/li>      <li>        <a href=\"#i-12\">3.2 Spring Data JPA\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210<\/a>      <\/li>      <li>        <a href=\"#i-13\">3.3 \u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\u306e\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">4. CRUD\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">4.1 \u30c7\u30fc\u30bf\u306e\u4f5c\u6210\u3068\u4fdd\u5b58<\/a>      <\/li>      <li>        <a href=\"#i-17\">4.2 \u30c7\u30fc\u30bf\u306e\u8aad\u307f\u53d6\u308a\u3068\u691c\u7d22<\/a>      <\/li>      <li>        <a href=\"#i-20\">4.3 \u30c7\u30fc\u30bf\u306e\u66f4\u65b0<\/a>      <\/li>      <li>        <a href=\"#i-21\">4.4 \u30c7\u30fc\u30bf\u306e\u524a\u9664<\/a>      <\/li>      <li>        <a href=\"#i-22\">\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-23\"><\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-24\">6. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-25\">6.1 \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u9069\u5207\u306a\u4f7f\u7528<\/a>      <\/li>      <li>        <a href=\"#i-28\">6.2 \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/a>      <\/li>      <li>        <a href=\"#i-31\">6.3 \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-34\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-35\">\u307e\u3068\u3081<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-36\">7. Spring Boot with JPA\u306e\u30c6\u30b9\u30c8\u6226\u7565<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-37\">7.1 \u5358\u4f53\u30c6\u30b9\u30c8\u306e\u4f5c\u6210<\/a>      <\/li>      <li>        <a href=\"#i-39\">7.2 \u7d71\u5408\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-41\">7.3 \u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u7ba1\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-44\">\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u6e2c\u5b9a<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-45\">8. \u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-46\">8.1 RESTful API\u306e\u69cb\u7bc9<\/a>      <\/li>      <li>        <a href=\"#i-49\">8.2 \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-51\">8.3 \u8907\u96d1\u306a\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-54\">9. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-55\">9.1 \u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u7b56<\/a>      <\/li>      <li>        <a href=\"#i-59\">9.2 \u30ed\u30b0\u306e\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-62\">9.3 \u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\u306e\u4f7f\u7528<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-66\">10. \u307e\u3068\u3081\u3068\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-67\">10.1 \u5b66\u7fd2\u3057\u305f\u30dd\u30a4\u30f3\u30c8\u306e\u632f\u308a\u8fd4\u308a<\/a>      <\/li>      <li>        <a href=\"#i-68\">10.2 \u3055\u3089\u306a\u308b\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u306e\u7d39\u4ecb<\/a>      <\/li>      <li>        <a href=\"#i-69\">10.3 Spring Boot with JPA\u306e\u672a\u6765\u5c55\u671b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-70\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/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-1\">1.1 Spring Boot\u3068\u306f\u4f55\u304b\uff1f<\/h2>\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\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u7279\u5fb4\u304c\u3042\u308a\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\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u304a\u308a\u3001\u3059\u3050\u306b\u5b9f\u884c\u53ef\u80fd<\/li>\n\n\n\n<li><strong>\u30b9\u30bf\u30fc\u30bf\u30fc\u4f9d\u5b58\u95a2\u4fc2<\/strong>: \u4e00\u822c\u7684\u306a\u7528\u9014\u306b\u5fc5\u8981\u306a\u4f9d\u5b58\u95a2\u4fc2\u3092\u307e\u3068\u3081\u3066\u63d0\u4f9b<\/li>\n\n\n\n<li><strong>\u30a2\u30af\u30c1\u30e5\u30a8\u30fc\u30bf\u30fc<\/strong>: \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5065\u5168\u6027\u3084\u30e1\u30c8\u30ea\u30af\u30b9\u3092\u7c21\u5358\u306b\u78ba\u8a8d\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u7279\u5fb4\u306b\u3088\u308a\u3001Spring Boot\u306f\u958b\u767a\u306e\u8fc5\u901f\u5316\u3001\u8a2d\u5b9a\u306e\u7c21\u7d20\u5316\u3001\u305d\u3057\u3066\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u30b5\u30dd\u30fc\u30c8\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-2\">1.2 JPA\u3068\u306f\u4f55\u304b\uff1f<\/h2>\n\n\n\n<p>JPA\uff08Java Persistence API\uff09\u306f\u3001Java\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u6a19\u6e96\u5316\u3055\u308c\u305fAPI\u3067\u3059\u3002\u4e3b\u306a\u7279\u5fb4\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\/\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30de\u30c3\u30d4\u30f3\u30b0<\/strong>: Java\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u3092\u7c21\u5358\u306b\u30de\u30c3\u30d4\u30f3\u30b0<\/li>\n\n\n\n<li><strong>JPQL\uff08Java Persistence Query Language\uff09<\/strong>: \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u30af\u30a8\u30ea\u8a00\u8a9e\u3092\u63d0\u4f9b<\/li>\n\n\n\n<li><strong>\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30de\u30cd\u30fc\u30b8\u30e3<\/strong>: \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u3092\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<p>JPA\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u62bd\u8c61\u5316\u3001\u30d9\u30f3\u30c0\u30fc\u975e\u4f9d\u5b58\u306e\u30b3\u30fc\u30c9\u4f5c\u6210\u3001\u305d\u3057\u3066\u958b\u767a\u751f\u7523\u6027\u306e\u5411\u4e0a\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">1.3 Spring Boot\u3068JPA\u306e\u95a2\u4fc2\u6027<\/h2>\n\n\n\n<p>Spring Boot\u306fJPA\u306e\u5b9f\u88c5\uff08\u4e3b\u306bHibernate\uff09\u3092\u5bb9\u6613\u306b\u7d71\u5408\u3057\u3001\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u5c64\u306e\u958b\u767a\u3092\u5927\u5e45\u306b\u7c21\u7d20\u5316\u3057\u307e\u3059\u3002\u3053\u306e\u7d44\u307f\u5408\u308f\u305b\u306e\u4e3b\u306a\u5229\u70b9\u306f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u81ea\u52d5\u8a2d\u5b9a\u306b\u3088\u308bJPA\u306e\u8fc5\u901f\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/li>\n\n\n\n<li>Spring Data JPA\u306b\u3088\u308b\u5f37\u529b\u306a\u62bd\u8c61\u5316<\/li>\n\n\n\n<li>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u7c21\u7d20\u5316<\/li>\n<\/ol>\n\n\n\n<p>Spring Boot with JPA\u306f\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u958b\u767a\u3001\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3001\u30c7\u30fc\u30bf\u99c6\u52d5\u578b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306a\u3069\u3001\u5e45\u5e83\u3044\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3067\u6d3b\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u964d\u306e\u7ae0\u3067\u306f\u3001Spring Boot\u3068JPA\u3092\u4f7f\u7528\u3057\u305f\u958b\u767a\u306e\u8a73\u7d30\u306a\u624b\u9806\u3001\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3001\u305d\u3057\u3066\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u3064\u3044\u3066\u6df1\u6398\u308a\u3057\u3066\u3044\u304d\u307e\u3059\u3002\u3053\u306e\u5f37\u529b\u306a\u7d44\u307f\u5408\u308f\u305b\u3092\u7406\u89e3\u3057\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044Java\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"i-4\">2. Spring Boot with JPA\u306e\u74b0\u5883\u8a2d\u5b9a<\/h1>\n\n\n\n<p>Spring Boot\u3068JPA\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u74b0\u5883\u8a2d\u5b9a\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6210\u529f\u306b\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u9069\u5207\u306a\u8a2d\u5b9a\u306b\u3088\u308a\u3001\u958b\u767a\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u3001\u6f5c\u5728\u7684\u306a\u554f\u984c\u3092\u56de\u907f\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u74b0\u5883\u8a2d\u5b9a\u306e\u4e3b\u8981\u306a\u5074\u9762\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-5\">2.1 \u5fc5\u8981\u306a\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0<\/h2>\n\n\n\n<p>Spring Boot with JPA\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u4e3b\u8981\u306a\u4f9d\u5b58\u95a2\u4fc2\u304c\u5fc5\u8981\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Spring Boot Starter Data JPA<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c9\u30e9\u30a4\u30d0<\/li>\n<\/ol>\n\n\n\n<p>Maven\u4f7f\u7528\u6642\u306e<code>pom.xml<\/code>\u306e\u4f8b\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-data-jpa&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n    &lt;!-- H2\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408 --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;com.h2database&lt;\/groupId&gt;\n        &lt;artifactId&gt;h2&lt;\/artifactId&gt;\n        &lt;scope&gt;runtime&lt;\/scope&gt;\n    &lt;\/dependency&gt;\n&lt;\/dependencies&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">2.2 application.properties\u306e\u8a2d\u5b9a<\/h2>\n\n\n\n<p><code>application.properties<\/code>\uff08\u307e\u305f\u306f<code>application.yml<\/code>\uff09\u30d5\u30a1\u30a4\u30eb\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u3084<\/p>\n\n\n\n<p>JPA\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\u3002\u4e3b\u8981\u306a\u8a2d\u5b9a\u9805\u76ee\u306f\u4ee5\u4e0b\u306e\u901a\u308a\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=\"\"># \u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u8a2d\u5b9a\nspring.datasource.url=jdbc:mysql:\/\/localhost:3306\/mydb\nspring.datasource.username=root\nspring.datasource.password=password\n\n# JPA\/Hibernate\u8a2d\u5b9a\nspring.jpa.hibernate.ddl-auto=update\nspring.jpa.show-sql=true\nspring.jpa.properties.hibernate.format_sql=true\n\n# \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u56fa\u6709\u306e\u8a2d\u5b9a\uff08\u4f8b\uff1aMySQL\uff09\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">2.3 \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u8a2d\u5b9a<\/h2>\n\n\n\n<p>\u4f7f\u7528\u3059\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5fdc\u3058\u3066\u3001\u63a5\u7d9a\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u4e3b\u8981\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>H2\uff08\u30a4\u30f3\u30e1\u30e2\u30ea\uff09:<\/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=\"\">   spring.datasource.url=jdbc:h2:mem:testdb\n   spring.datasource.driverClassName=org.h2.Driver<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>MySQL:<\/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=\"\">   spring.datasource.url=jdbc:mysql:\/\/localhost:3306\/mydb\n   spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>PostgreSQL:<\/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=\"\">   spring.datasource.url=jdbc:postgresql:\/\/localhost:5432\/mydb\n   spring.datasource.driverClassName=org.postgresql.Driver<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u6ce8\u610f\u70b9<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308b\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\uff08\u4f8b\uff1a<code>application-dev.properties<\/code>, <code>application-prod.properties<\/code>\uff09<\/li>\n\n\n\n<li>\u6a5f\u5bc6\u60c5\u5831\uff08\u30d1\u30b9\u30ef\u30fc\u30c9\u306a\u3069\uff09\u306f\u74b0\u5883\u5909\u6570\u3084\u5916\u90e8\u8a2d\u5b9a\u3067\u7ba1\u7406\u3059\u308b<\/li>\n\n\n\n<li>Spring Profiles\u3092\u6d3b\u7528\u3057\u3066\u3001\u7570\u306a\u308b\u74b0\u5883\u306b\u5bfe\u5fdc\u3059\u308b<\/li>\n\n\n\n<li>\u958b\u767a\u74b0\u5883\u3067\u306fSQL\u6587\u306e\u51fa\u529b\u3092\u6709\u52b9\u306b\u3057\u3001\u672c\u756a\u74b0\u5883\u3067\u306f\u7121\u52b9\u306b\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<p>\u74b0\u5883\u8a2d\u5b9a\u6642\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u70b9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306e\u7af6\u5408\u304c\u306a\u3044\u304b\u78ba\u8a8d\u3059\u308b<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u60c5\u5831\uff08URL\u3001\u30e6\u30fc\u30b6\u30fc\u540d\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\uff09\u3092\u518d\u78ba\u8a8d\u3059\u308b<\/li>\n\n\n\n<li>\u30ed\u30b0\u30ec\u30d9\u30eb\u3092<code>DEBUG<\/code>\u306b\u8a2d\u5b9a\u3057\u3066\u3001\u3088\u308a\u8a73\u7d30\u306a\u60c5\u5831\u3092\u5f97\u308b<\/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=\"\">logging.level.org.springframework=DEBUG\nlogging.level.org.hibernate=DEBUG<\/pre>\n\n\n\n<p>\u9069\u5207\u306a\u74b0\u5883\u8a2d\u5b9a\u306b\u3088\u308a\u3001Spring Boot\u3068JPA\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u306e\u74b0\u5883\u3092\u6d3b\u7528\u3057\u3066\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"i-10\">3. \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210<\/h1>\n\n\n\n<p>Spring Boot with JPA\u3092\u4f7f\u7528\u3059\u308b\u969b\u3001\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u9069\u5207\u306a\u8a2d\u8a08\u3068\u5b9f\u88c5\u306f\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001JPA\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5b9a\u7fa9\u3001Spring Data JPA\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210\u3001\u305d\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\u306e\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">3.1 JPA\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u5b9a\u7fa9<\/h2>\n\n\n\n<p>JPA\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u308bJava\u30af\u30e9\u30b9\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u4e3b\u8981\u306a\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u5b9a\u7fa9\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>@Entity<\/code>: \u30af\u30e9\u30b9\u304cJPA\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3059<\/li>\n\n\n\n<li><code>@Table<\/code>: \u30de\u30c3\u30d4\u30f3\u30b0\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u540d\u3092\u6307\u5b9a\uff08\u7701\u7565\u53ef\u80fd\uff09<\/li>\n\n\n\n<li><code>@Id<\/code>: \u30d7\u30e9\u30a4\u30de\u30ea\u30ad\u30fc\u3092\u6307\u5b9a<\/li>\n\n\n\n<li><code>@GeneratedValue<\/code>: \u30d7\u30e9\u30a4\u30de\u30ea\u30ad\u30fc\u306e\u751f\u6210\u65b9\u6cd5\u3092\u6307\u5b9a<\/li>\n\n\n\n<li><code>@Column<\/code>: \u30ab\u30e9\u30e0\u540d\u3084\u5236\u7d04\u3092\u6307\u5b9a\uff08\u7701\u7565\u53ef\u80fd\uff09<\/li>\n<\/ul>\n\n\n\n<p>\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u4f8b\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=\"\">import javax.persistence.*;\n\n@Entity\n@Table(name = \"users\")\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @Column(nullable = false, unique = true)\n    private String email;\n\n    @Column(nullable = false)\n    private String password;\n\n    \/\/ \u30b2\u30c3\u30bf\u30fc\u3001\u30bb\u30c3\u30bf\u30fc\u3001\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u7b49\u306f\u7701\u7565\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">3.2 Spring Data JPA\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f5c\u6210<\/h2>\n\n\n\n<p>Spring Data JPA\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u3001\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306b\u5bfe\u3059\u308bCRUD\u64cd\u4f5c\u3092\u63d0\u4f9b\u3059\u308b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002<code>JpaRepository<\/code>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u7d99\u627f\u3059\u308b\u3053\u3068\u3067\u3001\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u304c\u81ea\u52d5\u7684\u306b\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u4f8b\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=\"\">import org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.stereotype.Repository;\n\n@Repository\npublic interface UserRepository extends JpaRepository&lt;User, Long&gt; {\n    \/\/ \u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306f\u81ea\u52d5\u7684\u306b\u63d0\u4f9b\u3055\u308c\u307e\u3059\n    \/\/ \u4f8b: save(), findById(), findAll(), delete()\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-13\">3.3 \u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\u306e\u5b9f\u88c5<\/h2>\n\n\n\n<p>Spring Data JPA\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u65b9\u6cd5\u3067\u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30e1\u30bd\u30c3\u30c9\u540d\u306b\u3088\u308b\u30af\u30a8\u30ea\u5b9a\u7fa9\uff1a<\/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 UserRepository extends JpaRepository&lt;User, Long&gt; {\n       User findByEmailAndPassword(String email, String password);\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>JPQL\uff08Java Persistence Query Language\uff09\u306e\u4f7f\u7528\uff1a<\/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=\"\">   @Query(\"SELECT u FROM User u WHERE u.email = :email AND u.active = true\")\n   User findActiveUserByEmail(@Param(\"email\") String email);<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30cd\u30a4\u30c6\u30a3\u30d6SQL\u30af\u30a8\u30ea\u306e\u4f7f\u7528\uff1a<\/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=\"\">   @Query(value = \"SELECT * FROM users WHERE created_at &gt; :date\", nativeQuery = true)\n   List&lt;User&gt; findUsersCreatedAfter(@Param(\"date\") Date date);<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-14\">\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30af\u30e9\u30b9\u306f\u4e0d\u5909\uff08\u30a4\u30df\u30e5\u30fc\u30bf\u30d6\u30eb\uff09\u306b\u3059\u308b\uff1a\n<ul class=\"wp-block-list\">\n<li>setter\u306e\u4f7f\u7528\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u3001\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u521d\u671f\u5316\u3059\u308b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u30ea\u30dd\u30b8\u30c8\u30ea\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306f\u9069\u5207\u306b\u5206\u5272\u3059\u308b\uff1a\n<ul class=\"wp-block-list\">\n<li>\u6a5f\u80fd\u3054\u3068\u306b\u5225\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3001\u8cac\u52d9\u3092\u660e\u78ba\u306b\u3059\u308b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>N+1\u554f\u984c\u3092\u56de\u907f\u3059\u308b\u305f\u3081\u306bJOIN\u30d5\u30a7\u30c3\u30c1\u3092\u4f7f\u7528\u3059\u308b\uff1a<\/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=\"\">   @Query(\"SELECT u FROM User u JOIN FETCH u.roles WHERE u.id = :id\")\n   User findUserWithRoles(@Param(\"id\") Long id);<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>\u5927\u91cf\u30c7\u30fc\u30bf\u3092\u6271\u3046\u5834\u5408\u306f\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u3092\u5229\u7528\u3059\u308b\uff1a<\/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=\"\">   Page&lt;User&gt; findAll(Pageable pageable);<\/pre>\n\n\n\n<p>\u9069\u5207\u306b\u8a2d\u8a08\u3055\u308c\u305f\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4fdd\u5b88\u6027\u3068\u62e1\u5f35\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u3092\u6d3b\u7528\u3057\u3066CRUD\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"i-15\">4. CRUD\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/h1>\n\n\n\n<p>CRUD\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\uff08Create\u3001Read\u3001Update\u3001Delete\uff09\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u57fa\u672c\u3068\u306a\u308b\u64cd\u4f5c\u30bb\u30c3\u30c8\u3067\u3059\u3002Spring Boot with JPA\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u3053\u308c\u3089\u306e\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u7c21\u5358\u304b\u3064\u52b9\u7387\u7684\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5404CRUD\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5\u3068\u3001\u95a2\u9023\u3059\u308b\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">4.1 \u30c7\u30fc\u30bf\u306e\u4f5c\u6210\u3068\u4fdd\u5b58<\/h2>\n\n\n\n<p>\u30c7\u30fc\u30bf\u306e\u4f5c\u6210\u3068\u4fdd\u5b58\u306f\u3001<code>save()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u884c\u3044\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=\"\">@Service\npublic class UserService {\n    @Autowired\n    private UserRepository userRepository;\n\n    public User createUser(User user) {\n        return userRepository.save(user);\n    }\n}<\/pre>\n\n\n\n<p>\u8907\u6570\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u4e00\u5ea6\u306b\u4fdd\u5b58\u3059\u308b\u5834\u5408\u306f\u3001<code>saveAll()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\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=\"\">List&lt;User&gt; users = Arrays.asList(new User(\"John\"), new User(\"Jane\"));\nList&lt;User&gt; savedUsers = userRepository.saveAll(users);<\/pre>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#ffebeb;color:#f88080\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#f88080\"><i class=\"fas fa-exclamation\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u6ce8\u610f\u70b9<\/strong>:<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u30d0\u30c3\u30c1\u51e6\u7406\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n\n\n\n<li>\u4fdd\u5b58\u524d\u306b\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u884c\u3046\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/div><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">4.2 \u30c7\u30fc\u30bf\u306e\u8aad\u307f\u53d6\u308a\u3068\u691c\u7d22<\/h2>\n\n\n\n<p>\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u53d6\u308a\u3068\u691c\u7d22\u306b\u306f\u3001\u69d8\u3005\u306a\u30e1\u30bd\u30c3\u30c9\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u57fa\u672c\u7684\u306a\u691c\u7d22<\/h3>\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=\"\">\/\/ ID\u306b\u3088\u308b\u691c\u7d22\nOptional&lt;User&gt; user = userRepository.findById(1L);\n\n\/\/ \u5168\u4ef6\u53d6\u5f97\nList&lt;User&gt; allUsers = userRepository.findAll();\n\n\/\/ \u6761\u4ef6\u306b\u3088\u308b\u691c\u7d22\uff08\u30e1\u30bd\u30c3\u30c9\u540d\u304b\u3089\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u30af\u30a8\u30ea\uff09\nList&lt;User&gt; activeUsers = userRepository.findByActiveTrue();<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u9ad8\u5ea6\u306a\u691c\u7d22<\/h3>\n\n\n\n<p>\u3088\u308a\u8907\u96d1\u306a\u691c\u7d22\u6761\u4ef6\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u65b9\u6cd5\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Specification:<\/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 List&lt;User&gt; findUsersByComplexCriteria(String name, boolean active) {\n       return userRepository.findAll((root, query, cb) -&gt; {\n           List&lt;Predicate&gt; predicates = new ArrayList&lt;&gt;();\n           if (name != null) {\n               predicates.add(cb.like(root.get(\"name\"), \"%\" + name + \"%\"));\n           }\n           predicates.add(cb.equal(root.get(\"active\"), active));\n           return cb.and(predicates.toArray(new Predicate[0]));\n       });\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Query By Example:<\/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=\"\">   User probe = new User();\n   probe.setActive(true);\n   probe.setEmail(\"example@email.com\");\n\n   Example&lt;User&gt; example = Example.of(probe);\n   List&lt;User&gt; users = userRepository.findAll(example);<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30bf\u30e0JPQL\u30af\u30a8\u30ea:<\/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=\"\">   @Query(\"SELECT u FROM User u WHERE u.email LIKE :email AND u.active = :active\")\n   List&lt;User&gt; findActiveUsersByEmailPattern(@Param(\"email\") String email, @Param(\"active\") boolean active);<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-20\">4.3 \u30c7\u30fc\u30bf\u306e\u66f4\u65b0<\/h2>\n\n\n\n<p>\u30c7\u30fc\u30bf\u306e\u66f4\u65b0\u3082<code>save()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u65e2\u5b58\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u66f4\u65b0\u3059\u308b\u5834\u5408\u3001JPA\u306f\u66f4\u65b0\u64cd\u4f5c\u3092\u5b9f\u884c\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=\"\">@Service\npublic class UserService {\n    @Autowired\n    private UserRepository userRepository;\n\n    public User updateUser(Long id, String newName) {\n        User user = userRepository.findById(id)\n            .orElseThrow(() -&gt; new EntityNotFoundException(\"User not found\"));\n        user.setName(newName);\n        return userRepository.save(user);\n    }\n}<\/pre>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#ffebeb;color:#f88080\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#f88080\"><i class=\"fas fa-exclamation\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u6ce8\u610f\u70b9<\/strong>:<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u90e8\u5206\u66f4\u65b0\u306e\u5834\u5408\u306f\u3001\u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u697d\u89b3\u7684\u30ed\u30c3\u30af\u3092\u4f7f\u7528\u3057\u3066\u3001\u540c\u6642\u66f4\u65b0\u306e\u554f\u984c\u3092\u56de\u907f\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\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=\"\">@Entity\npublic class User {\n    @Version\n    private Long version;\n    \/\/ \u305d\u306e\u4ed6\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-21\">4.4 \u30c7\u30fc\u30bf\u306e\u524a\u9664<\/h2>\n\n\n\n<p>\u30c7\u30fc\u30bf\u306e\u524a\u9664\u306b\u306f\u3001\u3044\u304f\u3064\u304b\u306e\u65b9\u6cd5\u304c\u3042\u308a\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=\"\">\/\/ ID\u306b\u3088\u308b\u524a\u9664\nuserRepository.deleteById(1L);\n\n\/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306b\u3088\u308b\u524a\u9664\nUser user = userRepository.findById(1L).orElse(null);\nif (user != null) {\n    userRepository.delete(user);\n}\n\n\/\/ \u5168\u4ef6\u524a\u9664\uff08\u6ce8\u610f\u3057\u3066\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\uff09\nuserRepository.deleteAll();<\/pre>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#ffebeb;color:#f88080\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#f88080\"><i class=\"fas fa-exclamation\"><\/i><\/span><div class=\"sng-box-msg__title\"><strong>\u6ce8\u610f\u70b9<\/strong>:<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u5b9f\u969b\u306e\u30c7\u30fc\u30bf\u3092\u524a\u9664\u3059\u308b\u4ee3\u308f\u308a\u306b\u3001\u8ad6\u7406\u524a\u9664\uff08soft delete\uff09\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n\n\n\n<li>\u95a2\u9023\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u524a\u9664\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30ab\u30b9\u30b1\u30fc\u30c9\u524a\u9664\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/li>\n<\/ul>\n<\/div><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-22\">\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9069\u5207\u306a\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/strong>:<\/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=\"\">   @Transactional\n   public void complexOperation() {\n       \/\/ \u8907\u6570\u306e\u64cd\u4f5c\u3092\u30a2\u30c8\u30df\u30c3\u30af\u306b\u5b9f\u884c\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4f8b\u5916\u51e6\u7406\u306e\u5b9f\u88c5<\/strong>:<\/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=\"\">   try {\n       userRepository.save(user);\n   } catch (DataIntegrityViolationException e) {\n       \/\/ \u4e00\u610f\u5236\u7d04\u9055\u53cd\u306a\u3069\u306e\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u4f7f\u7528<\/strong>:<\/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=\"\">   Pageable pageable = PageRequest.of(0, 20, Sort.by(\"name\").ascending());\n   Page&lt;User&gt; userPage = userRepository.findAll(pageable);<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>N+1\u554f\u984c\u306e\u56de\u907f<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a7\u30c3\u30c1\u30b8\u30e7\u30a4\u30f3\u3092\u4f7f\u7528\u3057\u3066\u95a2\u9023\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3092\u4e00\u5ea6\u306b\u53d6\u5f97\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/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=\"\">   @Query(\"SELECT u FROM User u JOIN FETCH u.roles WHERE u.active = true\")\n   List&lt;User&gt; findActiveUsersWithRoles();<\/pre>\n\n\n\n<p>CRUD\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30fc\u30bf\u7ba1\u7406\u304c\u52b9\u7387\u7684\u306b\u306a\u308a\u307e\u3059\u3002\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3084\u4fdd\u5b88\u6027\u3092\u8003\u616e\u3057\u306a\u304c\u3089\u3001\u3053\u308c\u3089\u306e\u64cd\u4f5c\u3092\u8a2d\u8a08\u30fb\u5b9f\u88c5\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306aCRUD\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u8d85\u3048\u305f\u3001\u3088\u308a\u9ad8\u5ea6\u306aJPA\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001Spring Boot with JPA\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3001\u4fdd\u5b88\u6027\u3001\u305d\u3057\u3066\u4fe1\u983c\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u5404\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u9069\u7528\u306b\u306f\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u304c\u3042\u308b\u305f\u3081\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8981\u4ef6\u3084\u7279\u6027\u306b\u5fdc\u3058\u3066\u9069\u5207\u306b\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-23\"><\/h2>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#ffebeb;color:#f88080\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#f88080\"><i class=\"fas fa-exclamation\"><\/i><\/span><div class=\"sng-box-msg__title\">\u6ce8\u610f\u70b9\u3068\u3088\u304f\u3042\u308b\u843d\u3068\u3057\u7a74<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ol class=\"wp-block-list\">\n<li>\u904e\u5ea6\u306a\u6700\u9069\u5316:\n<ul class=\"wp-block-list\">\n<li>\u65e9\u671f\u6700\u9069\u5316\u306f\u907f\u3051\u3001\u5b9f\u969b\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u6642\u70b9\u3067\u5bfe\u51e6\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306e\u7121\u8996:\n<ul class=\"wp-block-list\">\n<li>\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u76f2\u76ee\u7684\u306b\u9069\u7528\u305b\u305a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u6027\u3084\u8981\u4ef6\u3092\u8003\u616e\u306b\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u306e\u8efd\u8996:\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3092\u884c\u3046\u969b\u306f\u3001\u5fc5\u305a\u9069\u5207\u306a\u30c6\u30b9\u30c8\u3092\u5b9f\u65bd\u3057\u3001\u671f\u5f85\u901a\u308a\u306e\u52b9\u679c\u304c\u5f97\u3089\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u306e\u4e0d\u8db3:\n<ul class=\"wp-block-list\">\n<li>Spring Boot\u3084JPA\u306f\u5e38\u306b\u9032\u5316\u3057\u3066\u3044\u307e\u3059\u3002\u6700\u65b0\u306e\u6a5f\u80fd\u3084\u63a8\u5968\u4e8b\u9805\u3092\u5b9a\u671f\u7684\u306b\u30c1\u30a7\u30c3\u30af\u3057\u3001\u77e5\u8b58\u3092\u66f4\u65b0\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/div><\/div><\/div>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u5207\u306b\u7406\u89e3\u3057\u3001\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u9ad8\u54c1\u8cea\u3067\u52b9\u7387\u7684\u306aSpring Boot with JPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u6d3b\u7528\u3057\u305f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u3001\u3088\u308a\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"i-24\">6. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h1>\n\n\n\n<p>Spring Boot with JPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3059\u308b\u3053\u3068\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u306e\u5411\u4e0a\u3068\u904b\u7528\u30b3\u30b9\u30c8\u306e\u524a\u6e1b\u306b\u76f4\u7d50\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u4e3b\u8981\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-25\">6.1 \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u9069\u5207\u306a\u4f7f\u7528<\/h2>\n\n\n\n<p>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u901f\u5ea6\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b\u691c\u7d22\u6761\u4ef6\u306b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f5c\u6210\u3059\u308b<\/li>\n\n\n\n<li>\u8907\u5408\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u9069\u5207\u306b\u8a2d\u8a08\u3059\u308b<\/li>\n\n\n\n<li>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u904e\u5270\u4f7f\u7528\u3092\u907f\u3051\u308b\uff08\u66f4\u65b0\u6027\u80fd\u3078\u306e\u5f71\u97ff\u3092\u8003\u616e\uff09<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">\u5b9f\u88c5\u4f8b:<\/h3>\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=\"\">@Entity\n@Table(indexes = @Index(name = \"idx_email\", columnList = \"email\", unique = true))\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @Column(nullable = false)\n    private String email;\n\n    @Index(name = \"idx_last_name\")\n    @Column(nullable = false)\n    private String lastName;\n\n    \/\/ \u305d\u306e\u4ed6\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u30e1\u30bd\u30c3\u30c9\n}<\/pre>\n\n\n\n<p>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u52b9\u679c\u3092\u6700\u5927\u9650\u306b\u5f15\u304d\u51fa\u3059\u306b\u306f\u3001\u5b9f\u969b\u306e\u30af\u30a8\u30ea\u30d1\u30bf\u30fc\u30f3\u3092\u5206\u6790\u3057\u3001\u9069\u5207\u306a\u30ab\u30e9\u30e0\u3084\u9806\u5e8f\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-28\">6.2 \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/h2>\n\n\n\n<p>\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u3092\u6e1b\u3089\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5fdc\u7b54\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-29\">Spring Boot\u3067\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u5b9f\u88c5:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6709\u52b9\u306b\u3059\u308b:<\/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=\"\">@EnableCaching\n@SpringBootApplication\npublic class Application {\n    public static void main(String[] args) {\n        SpringApplication.run(Application.class, args);\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u4f7f\u7528:<\/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=\"\">@Service\npublic class UserService {\n    @Cacheable(\"users\")\n    public User findById(Long id) {\n        \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u3092\u53d6\u5f97\u3059\u308b\u51e6\u7406\n    }\n\n    @CachePut(value = \"users\", key = \"#user.id\")\n    public User updateUser(User user) {\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u3092\u66f4\u65b0\u3059\u308b\u51e6\u7406\n    }\n\n    @CacheEvict(value = \"users\", key = \"#id\")\n    public void deleteUser(Long id) {\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u3092\u524a\u9664\u3059\u308b\u51e6\u7406\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-30\">\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u6709\u52b9\u671f\u9650\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u4e00\u8cab\u6027\u7dad\u6301\uff08\u66f4\u65b0\u6642\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u7121\u52b9\u5316\uff09<\/li>\n\n\n\n<li>\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u5206\u6563\u30ad\u30e3\u30c3\u30b7\u30e5\uff08\u4f8b\uff1aRedis\uff09\u306e\u691c\u8a0e<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-31\">6.3 \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5<\/h2>\n\n\n\n<p>\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u51e6\u7406\u306b\u306f\u3001\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5\u304c\u52b9\u679c\u7684\u3067\u3059\u3002Spring Batch\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u3067\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30d0\u30c3\u30c1\u51e6\u7406\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-32\">Spring Batch\u306e\u57fa\u672c\u6982\u5ff5:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b8\u30e7\u30d6\uff08Job\uff09: \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5168\u4f53\u3092\u8868\u3059<\/li>\n\n\n\n<li>\u30b9\u30c6\u30c3\u30d7\uff08Step\uff09: \u30b8\u30e7\u30d6\u5185\u306e\u500b\u3005\u306e\u51e6\u7406\u5358\u4f4d<\/li>\n\n\n\n<li>ItemReader\u3001ItemProcessor\u3001ItemWriter: \u30c7\u30fc\u30bf\u306e\u8aad\u307f\u53d6\u308a\u3001\u51e6\u7406\u3001\u66f8\u304d\u8fbc\u307f\u3092\u62c5\u5f53<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-33\">\u5b9f\u88c5\u4f8b:<\/h3>\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\n@EnableBatchProcessing\npublic class BatchConfig {\n    @Autowired\n    public JobBuilderFactory jobBuilderFactory;\n\n    @Autowired\n    public StepBuilderFactory stepBuilderFactory;\n\n    @Bean\n    public Job importUserJob(Step step1) {\n        return jobBuilderFactory.get(\"importUserJob\")\n            .incrementer(new RunIdIncrementer())\n            .flow(step1)\n            .end()\n            .build();\n    }\n\n    @Bean\n    public Step step1(ItemReader&lt;User&gt; reader, ItemProcessor&lt;User, User&gt; processor, ItemWriter&lt;User&gt; writer) {\n        return stepBuilderFactory.get(\"step1\")\n            .&lt;User, User&gt;chunk(10)\n            .reader(reader)\n            .processor(processor)\n            .writer(writer)\n            .build();\n    }\n}<\/pre>\n\n\n\n<div class=\"wp-block-sgb-message\"><div class=\"memo sng-shadow-0\" style=\"border-radius:0px;background-color:#ffebeb;color:#f88080\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#f88080\"><i class=\"fas fa-exclamation\"><\/i><\/span><div class=\"sng-box-msg__title\">\u6ce8\u610f\u70b9<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30c1\u30e3\u30f3\u30af\u30b5\u30a4\u30ba\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3068\u30ea\u30c8\u30e9\u30a4\u6226\u7565\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u91cf\u3092\u8003\u616e\u3057\u305f\u4e26\u5217\u51e6\u7406\u306e\u691c\u8a0e<\/li>\n<\/ul>\n<\/div><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-34\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/h2>\n\n\n\n<p>\u6700\u9069\u5316\u306e\u52b9\u679c\u3092\u78ba\u8a8d\u3059\u308b\u306b\u306f\u3001\u9069\u5207\u306a\u6e2c\u5b9a\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u304c\u4e0d\u53ef\u6b20\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30c4\u30fc\u30eb\uff08JMeter\u3001Gatling\uff09\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>Spring Boot Actuator\u306b\u3088\u308b\u30e1\u30c8\u30ea\u30af\u30b9\u53ce\u96c6<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u8a08\u753b\u5206\u6790<\/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=\"\">management.endpoints.web.exposure.include=*\nmanagement.endpoint.health.show-details=always<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001Spring Boot with JPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5fdc\u7b54\u6027\u3068\u51e6\u7406\u80fd\u529b\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u6700\u9069\u5316\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u6027\u3084\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u884c\u3046\u3079\u304d\u3067\u3042\u308a\u3001\u904e\u5ea6\u306a\u6700\u9069\u5316\u306b\u3088\u3063\u3066\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3084\u4fdd\u5b88\u6027\u304c\u640d\u306a\u308f\u308c\u306a\u3044\u3088\u3046\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u7528\u3059\u308b\u969b\u306e\u30c6\u30b9\u30c8\u6226\u7565\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002\u9069\u5207\u306a\u30c6\u30b9\u30c8\u306f\u3001\u6700\u9069\u5316\u306e\u52b9\u679c\u3092\u78ba\u8a8d\u3057\u3001\u4e88\u671f\u305b\u306c\u526f\u4f5c\u7528\u3092\u9632\u3050\u305f\u3081\u306b\u4e0d\u53ef\u6b20\u3067\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:#ffebeb;color:#f88080\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#f88080\"><i class=\"fas fa-exclamation\"><\/i><\/span><div class=\"sng-box-msg__title\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u843d\u3068\u3057\u7a74\u3068\u6ce8\u610f\u70b9<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ol class=\"wp-block-list\">\n<li>\u904e\u5270\u6700\u9069\u5316\uff1a\n<ul class=\"wp-block-list\">\n<li>\u554f\u984c\u304c\u660e\u78ba\u306b\u306a\u308b\u524d\u306b\u6700\u9069\u5316\u3092\u884c\u3046\u3053\u3068\u306f\u907f\u3051\u307e\u3057\u3087\u3046\u3002<\/li>\n\n\n\n<li>\u201cPremature optimization is the root of all evil\u201d \u2013 Donald Knuth<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u306e\u72a0\u7272\uff1a\n<ul class=\"wp-block-list\">\n<li>\u6700\u9069\u5316\u306e\u305f\u3081\u306b\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3092\u640d\u306a\u308f\u306a\u3044\u3088\u3046\u6ce8\u610f\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u30e1\u30f3\u30d0\u30fc\u3068\u306e\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u3092\u901a\u3058\u3066\u3001\u30d0\u30e9\u30f3\u30b9\u3092\u53d6\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u4f4e\u4e0b\uff1a\n<ul class=\"wp-block-list\">\n<li>\u6700\u9069\u5316\u306b\u3088\u3063\u3066\u30c6\u30b9\u30c8\u304c\u7834\u7dbb\u3057\u306a\u3044\u3088\u3046\u3001\u30c6\u30b9\u30c8\u30b9\u30a4\u30fc\u30c8\u3092\u9069\u5207\u306b\u66f4\u65b0\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u74b0\u5883\u4f9d\u5b58\u306e\u6700\u9069\u5316\uff1a\n<ul class=\"wp-block-list\">\n<li>\u958b\u767a\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u3067\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u9055\u3044\u306b\u6ce8\u610f\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n\n\n\n<li>\u53ef\u80fd\u306a\u9650\u308a\u672c\u756a\u306b\u8fd1\u3044\u74b0\u5883\u3067\u30c6\u30b9\u30c8\u3092\u884c\u3046\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/div><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-35\">\u307e\u3068\u3081<\/h2>\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\">\u307e\u3068\u3081<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<p>Spring Boot with JPA\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5fdc\u7b54\u6027\u3068\u51e6\u7406\u80fd\u529b\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u9069\u5207\u306a\u4f7f\u7528\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528\u3001\u305d\u3057\u3066\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5\u306f\u3001\u4e3b\u8981\u306a\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u306e\u4e00\u90e8\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u7528\u3059\u308b\u969b\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u6027\u3084\u8981\u4ef6\u3092\u5341\u5206\u306b\u8003\u616e\u3057\u3001\u9069\u5207\u306a\u30c6\u30b9\u30c8\u3068\u8a08\u6e2c\u3092\u884c\u3046\u3053\u3068\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u6700\u9069\u5316\u306f\u7d99\u7d9a\u7684\u306a\u30d7\u30ed\u30bb\u30b9\u3067\u3042\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6210\u9577\u3068\u3068\u3082\u306b\u5b9a\u671f\u7684\u306b\u898b\u76f4\u3057\u3092\u884c\u3046\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n<\/div><\/div>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u52b9\u679c\u7684\u306b\u30c6\u30b9\u30c8\u3057\u3001\u8a55\u4fa1\u3059\u308b\u305f\u3081\u306e\u6226\u7565\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002\u9069\u5207\u306a\u30c6\u30b9\u30c8\u6226\u7565\u306f\u3001\u6700\u9069\u5316\u306e\u52b9\u679c\u3092\u78ba\u5b9f\u306b\u6e2c\u5b9a\u3057\u3001\u4e88\u671f\u305b\u306c\u526f\u4f5c\u7528\u3092\u9632\u3050\u305f\u3081\u306b\u4e0d\u53ef\u6b20\u3067\u3059\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"i-36\">7. Spring Boot with JPA\u306e\u30c6\u30b9\u30c8\u6226\u7565<\/h1>\n\n\n\n<p>\u9069\u5207\u306a\u30c6\u30b9\u30c8\u6226\u7565\u306f\u3001Spring Boot with JPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u54c1\u8cea\u3068\u4fe1\u983c\u6027\u3092\u78ba\u4fdd\u3059\u308b\u305f\u3081\u306b\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u52b9\u679c\u7684\u306a\u30c6\u30b9\u30c8\u6226\u7565\u306e\u69cb\u7bc9\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-37\">7.1 \u5358\u4f53\u30c6\u30b9\u30c8\u306e\u4f5c\u6210<\/h2>\n\n\n\n<p>\u5358\u4f53\u30c6\u30b9\u30c8\u306f\u3001\u500b\u3005\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u6a5f\u80fd\u3092\u72ec\u7acb\u3057\u3066\u30c6\u30b9\u30c8\u3057\u307e\u3059\u3002Spring Boot with JPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4e3b\u306b\u30ea\u30dd\u30b8\u30c8\u30ea\u3001\u30b5\u30fc\u30d3\u30b9\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u5358\u4f53\u30c6\u30b9\u30c8\u306e\u5bfe\u8c61\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-38\">JUnit\u3068Mockito\u3092\u4f7f\u7528\u3057\u305f\u5358\u4f53\u30c6\u30b9\u30c8\u4f8b\uff1a<\/h3>\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=\"\">@ExtendWith(MockitoExtension.class)\npublic class UserServiceTest {\n\n    @Mock\n    private UserRepository userRepository;\n\n    @InjectMocks\n    private UserService userService;\n\n    @Test\n    void testFindUserById() {\n        \/\/ Arrange\n        Long userId = 1L;\n        User expectedUser = new User(userId, \"test@example.com\");\n        when(userRepository.findById(userId)).thenReturn(Optional.of(expectedUser));\n\n        \/\/ Act\n        User result = userService.findUserById(userId);\n\n        \/\/ Assert\n        assertNotNull(result);\n        assertEquals(expectedUser.getId(), result.getId());\n        assertEquals(expectedUser.getEmail(), result.getEmail());\n        verify(userRepository, times(1)).findById(userId);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30c6\u30b9\u30c8\u3067\u306f\u3001<code>UserRepository<\/code>\u3092\u30e2\u30c3\u30af\u5316\u3057\u3001<code>UserService<\/code>\u306e<code>findUserById<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u30c6\u30b9\u30c8\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-39\">7.2 \u7d71\u5408\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/h2>\n\n\n\n<p>\u7d71\u5408\u30c6\u30b9\u30c8\u306f\u3001\u8907\u6570\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u76f8\u4e92\u4f5c\u7528\u3092\u30c6\u30b9\u30c8\u3057\u307e\u3059\u3002Spring Boot\u306f\u3001<code>@SpringBootTest<\/code>\u3084<code>@DataJpaTest<\/code>\u306a\u3069\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u63d0\u4f9b\u3057\u3001\u7d71\u5408\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-40\">@DataJpaTest\u3092\u4f7f\u7528\u3057\u305f\u7d71\u5408\u30c6\u30b9\u30c8\u4f8b\uff1a<\/h3>\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=\"\">@DataJpaTest\n@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)\npublic class UserRepositoryIntegrationTest {\n\n    @Autowired\n    private UserRepository userRepository;\n\n    @Test\n    void testSaveAndFindUser() {\n        \/\/ Arrange\n        User user = new User(null, \"test@example.com\");\n\n        \/\/ Act\n        User savedUser = userRepository.save(user);\n        User foundUser = userRepository.findById(savedUser.getId()).orElse(null);\n\n        \/\/ Assert\n        assertNotNull(foundUser);\n        assertEquals(user.getEmail(), foundUser.getEmail());\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30c6\u30b9\u30c8\u3067\u306f\u3001\u5b9f\u969b\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3057\u3066\u30e6\u30fc\u30b6\u30fc\u306e\u4fdd\u5b58\u3068\u53d6\u5f97\u3092\u30c6\u30b9\u30c8\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-41\">7.3 \u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u7ba1\u7406<\/h2>\n\n\n\n<p>\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u9069\u5207\u306a\u7ba1\u7406\u306f\u3001\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-42\">\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u7ba1\u7406\u306e\u65b9\u6cd5\uff1a<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c6\u30b9\u30c8\u30d5\u30a3\u30af\u30b9\u30c1\u30e3\u306e\u4f7f\u7528\uff1a<\/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=\"\">   @BeforeEach\n   void setUp() {\n       User user1 = new User(null, \"user1@example.com\");\n       User user2 = new User(null, \"user2@example.com\");\n       userRepository.saveAll(Arrays.asList(user1, user2));\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>@SQL\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306b\u3088\u308b\u30c7\u30fc\u30bf\u6295\u5165\uff1a<\/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=\"\">   @Test\n   @Sql(\"\/test-data.sql\")\n   void testFindAllUsers() {\n       List&lt;User&gt; users = userRepository.findAll();\n       assertEquals(2, users.size());\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30c6\u30b9\u30c8\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u8a2d\u5b9a\uff1a<\/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=\"\">   # application-test.yml\n   spring:\n     datasource:\n       url: jdbc:h2:mem:testdb\n       driver-class-name: org.h2.Driver<\/pre>\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=\"\">   @ActiveProfiles(\"test\")\n   @SpringBootTest\n   public class ApplicationIntegrationTest {\n       \/\/ \u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-43\">\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c6\u30b9\u30c8\u3054\u3068\u306b\u30c7\u30fc\u30bf\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u3001\u30c6\u30b9\u30c8\u9593\u306e\u72ec\u7acb\u6027\u3092\u78ba\u4fdd\u3059\u308b<\/li>\n\n\n\n<li>\u5b9f\u969b\u306e\u30c7\u30fc\u30bf\u306b\u8fd1\u3044\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3001\u73fe\u5b9f\u7684\u306a\u30b7\u30ca\u30ea\u30aa\u3092\u30c6\u30b9\u30c8\u3059\u308b<\/li>\n\n\n\n<li>\u30bb\u30f3\u30b7\u30c6\u30a3\u30d6\u306a\u30c7\u30fc\u30bf\u3092\u533f\u540d\u5316\u3057\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u3092\u56de\u907f\u3059\u308b<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-44\">\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u6e2c\u5b9a<\/h2>\n\n\n\n<p>\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306f\u3001\u30b3\u30fc\u30c9\u304c\u30c6\u30b9\u30c8\u306b\u3088\u3063\u3066\u3069\u306e\u7a0b\u5ea6\u30ab\u30d0\u30fc\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u793a\u3059\u6307\u6a19\u3067\u3059\u3002JaCoCo\u306a\u3069\u306e\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066\u6e2c\u5b9a\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=\"\">&lt;plugin&gt;\n    &lt;groupId&gt;org.jacoco&lt;\/groupId&gt;\n    &lt;artifactId&gt;jacoco-maven-plugin&lt;\/artifactId&gt;\n    &lt;version&gt;0.8.7&lt;\/version&gt;\n    &lt;executions&gt;\n        &lt;execution&gt;\n            &lt;goals&gt;\n                &lt;goal&gt;prepare-agent&lt;\/goal&gt;\n            &lt;\/goals&gt;\n        &lt;\/execution&gt;\n        &lt;execution&gt;\n            &lt;id&gt;report&lt;\/id&gt;\n            &lt;phase&gt;prepare-package&lt;\/phase&gt;\n            &lt;goals&gt;\n                &lt;goal&gt;report&lt;\/goal&gt;\n            &lt;\/goals&gt;\n        &lt;\/execution&gt;\n    &lt;\/executions&gt;\n&lt;\/plugin&gt;<\/pre>\n\n\n\n<p>\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u3092\u5b9a\u671f\u7684\u306b\u6e2c\u5b9a\u3057\u3001\u4e0d\u8db3\u3057\u3066\u3044\u308b\u90e8\u5206\u3092\u88dc\u5b8c\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u54c1\u8cea\u3092\u7d99\u7d9a\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/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\">\u307e\u3068\u3081<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<p>Spring Boot with JPA\u306e\u30c6\u30b9\u30c8\u6226\u7565\u306f\u3001\u5358\u4f53\u30c6\u30b9\u30c8\u3001\u7d71\u5408\u30c6\u30b9\u30c8\u3001\u9069\u5207\u306a\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u7ba1\u7406\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u69cb\u7bc9\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30c6\u30b9\u30c8\u624b\u6cd5\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3057\u3001\u7d99\u7d9a\u7684\u306b\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u3092\u6e2c\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u9ad8\u54c1\u8cea\u3067\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/div><\/div>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30c6\u30b9\u30c8\u6226\u7565\u3092\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u7528\u3059\u308b\u969b\u306e\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"i-45\">8. \u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/h1>\n\n\n\n<p>Spring Boot with JPA\u306e\u7406\u8ad6\u7684\u306a\u7406\u89e3\u3092\u5b9f\u8df5\u306b\u79fb\u3059\u305f\u3081\u3001\u4ee5\u4e0b\u306e\u5b9f\u969b\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3092\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u4f8b\u3092\u901a\u3058\u3066\u3001Spring Boot\u3068JPA\u306e\u5f37\u529b\u306a\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3073\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-46\">8.1 RESTful API\u306e\u69cb\u7bc9<\/h2>\n\n\n\n<p>RESTful API\u306f\u73fe\u4ee3\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u4e0d\u53ef\u6b20\u3067\u3059\u3002Spring Boot\u3068JPA\u3092\u4f7f\u7528\u3057\u3066\u3001\u52b9\u7387\u7684\u304b\u3064\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306aAPI\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-47\">\u5b9f\u88c5\u4f8b\uff1a<\/h3>\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=\"\">@RestController\n@RequestMapping(\"\/api\/users\")\npublic class UserController {\n\n    private final UserService userService;\n\n    @Autowired\n    public UserController(UserService userService) {\n        this.userService = userService;\n    }\n\n    @GetMapping(\"\/{id}\")\n    public ResponseEntity&lt;UserDTO&gt; getUser(@PathVariable Long id) {\n        UserDTO user = userService.getUserById(id);\n        return ResponseEntity.ok(user);\n    }\n\n    @PostMapping\n    public ResponseEntity&lt;UserDTO&gt; createUser(@Valid @RequestBody UserDTO userDTO) {\n        UserDTO createdUser = userService.createUser(userDTO);\n        return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);\n    }\n\n    @PutMapping(\"\/{id}\")\n    public ResponseEntity&lt;UserDTO&gt; updateUser(@PathVariable Long id, @Valid @RequestBody UserDTO userDTO) {\n        UserDTO updatedUser = userService.updateUser(id, userDTO);\n        return ResponseEntity.ok(updatedUser);\n    }\n\n    @DeleteMapping(\"\/{id}\")\n    public ResponseEntity&lt;Void&gt; deleteUser(@PathVariable Long id) {\n        userService.deleteUser(id);\n        return ResponseEntity.noContent().build();\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u306e\u305f\u3081\u306e\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<code>@Valid<\/code>\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u884c\u3044\u3001DTO\u3092\u4f7f\u7528\u3057\u3066\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068API\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u5206\u96e2\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-48\">\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u9069\u5207\u306aHTTP\u30e1\u30bd\u30c3\u30c9\u3068\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u3092\u4f7f\u7528\u3059\u308b<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u5b9f\u88c5\u3057\u3001\u660e\u78ba\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8fd4\u3059<\/li>\n\n\n\n<li>\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u3092\u8003\u616e\u3059\u308b\uff08\u4f8b\uff1a<code>\/api\/v1\/users<\/code>\uff09<\/li>\n\n\n\n<li>\u30ec\u30fc\u30c8\u5236\u9650\u3084API\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\uff08Swagger\u7b49\uff09\u3092\u5b9f\u88c5\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-49\">8.2 \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/h2>\n\n\n\n<p>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u5834\u5408\u3001\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306f\u4e0d\u53ef\u6b20\u3067\u3059\u3002Spring Data JPA\u306f\u3001\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u3092\u7c21\u5358\u306b\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-50\">\u5b9f\u88c5\u4f8b\uff1a<\/h3>\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=\"\">@GetMapping\npublic ResponseEntity&lt;Page&lt;UserDTO&gt;&gt; getUsers(\n        @RequestParam(defaultValue = \"0\") int page,\n        @RequestParam(defaultValue = \"10\") int size,\n        @RequestParam(defaultValue = \"id,desc\") String[] sort) {\n\n    List&lt;Sort.Order&gt; orders = new ArrayList&lt;&gt;();\n    if (sort[0].contains(\",\")) {\n        for (String sortOrder : sort) {\n            String[] _sort = sortOrder.split(\",\");\n            orders.add(new Sort.Order(getSortDirection(_sort[1]), _sort[0]));\n        }\n    } else {\n        orders.add(new Sort.Order(getSortDirection(sort[1]), sort[0]));\n    }\n\n    Pageable pageable = PageRequest.of(page, size, Sort.by(orders));\n\n    Page&lt;UserDTO&gt; userPage = userService.getAllUsers(pageable);\n    return ResponseEntity.ok(userPage);\n}\n\nprivate Sort.Direction getSortDirection(String direction) {\n    if (direction.equals(\"asc\")) {\n        return Sort.Direction.ASC;\n    } else if (direction.equals(\"desc\")) {\n        return Sort.Direction.DESC;\n    }\n    return Sort.Direction.ASC;\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u30da\u30fc\u30b8\u756a\u53f7\u3001\u30da\u30fc\u30b8\u30b5\u30a4\u30ba\u3001\u30bd\u30fc\u30c8\u6761\u4ef6\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u53d7\u3051\u53d6\u308a\u3001\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u3055\u308c\u305f\u30e6\u30fc\u30b6\u30fc\u30ea\u30b9\u30c8\u3092\u8fd4\u3057\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:#ffebeb;color:#f88080\"><div class=\"memo_ttl dfont\"><span class=\"sng-box-msg__icon\" style=\"background:#f88080\"><i class=\"fas fa-exclamation\"><\/i><\/span><div class=\"sng-box-msg__title\">\u6ce8\u610f\u70b9<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30da\u30fc\u30b8\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3057\u3001\u904e\u5ea6\u306b\u5927\u304d\u306a\u30da\u30fc\u30b8\u30b5\u30a4\u30ba\u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4f4e\u4e0b\u3092\u9632\u3050<\/li>\n\n\n\n<li>\u30bd\u30fc\u30c8\u6761\u4ef6\u306b\u3088\u3063\u3066\u306f\u6027\u80fd\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u9069\u5207\u306a\u8a2d\u5b9a\u304c\u91cd\u8981<\/li>\n<\/ul>\n<\/div><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-51\">8.3 \u8907\u96d1\u306a\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/h2>\n\n\n\n<p>\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u5b9f\u88c5\u3059\u308b\u969b\u3001\u52b9\u7387\u7684\u306a\u30af\u30a8\u30ea\u306e\u4f5c\u6210\u304c\u91cd\u8981\u306b\u306a\u308a\u307e\u3059\u3002JPQL\u3084Criteria API\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3092\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-52\">JPQL\u5b9f\u88c5\u4f8b\uff1a<\/h3>\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=\"\">@Query(\"SELECT u FROM User u JOIN u.roles r WHERE u.active = true AND r.name = :roleName\")\nList&lt;User&gt; findActiveUsersByRole(@Param(\"roleName\") String roleName);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-53\">Criteria API\u5b9f\u88c5\u4f8b\uff1a<\/h3>\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 List&lt;User&gt; findUsersByCriteria(String email, Boolean active, String roleName) {\n    CriteriaBuilder cb = entityManager.getCriteriaBuilder();\n    CriteriaQuery&lt;User&gt; query = cb.createQuery(User.class);\n    Root&lt;User&gt; user = query.from(User.class);\n\n    List&lt;Predicate&gt; predicates = new ArrayList&lt;&gt;();\n\n    if (email != null) {\n        predicates.add(cb.like(user.get(\"email\"), \"%\" + email + \"%\"));\n    }\n    if (active != null) {\n        predicates.add(cb.equal(user.get(\"active\"), active));\n    }\n    if (roleName != null) {\n        Join&lt;User, Role&gt; role = user.join(\"roles\");\n        predicates.add(cb.equal(role.get(\"name\"), roleName));\n    }\n\n    query.where(predicates.toArray(new Predicate[0]));\n\n    return entityManager.createQuery(query).getResultList();\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u4f8b\u3067\u306f\u3001\u52d5\u7684\u306b\u6761\u4ef6\u3092\u7d44\u307f\u7acb\u3066\u3066\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3092\u751f\u6210\u3057\u3066\u3044\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\">\u6700\u9069\u5316\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/div><\/div><div class=\"sng-box-msg__contents\">\n<ol class=\"wp-block-list\">\n<li>\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u306e\u307f\u3092\u53d6\u5f97\u3059\u308b\uff08SELECT\u3059\u308b\u5217\u3092\u6700\u5c0f\u9650\u306b\uff09<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a2d\u5b9a\u3059\u308b<\/li>\n\n\n\n<li>N+1\u554f\u984c\u3092\u56de\u907f\u3059\u308b\u305f\u3081\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066JOIN FETCH\u3092\u4f7f\u7528\u3059\u308b<\/li>\n\n\n\n<li>\u5927\u91cf\u30c7\u30fc\u30bf\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u51e6\u7406\u3084\u30d0\u30c3\u30c1\u51e6\u7406\u3092\u691c\u8a0e\u3059\u308b<\/li>\n<\/ol>\n<\/div><\/div><\/div>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3092\u901a\u3058\u3066\u3001Spring Boot\u3068JPA\u306e\u5f37\u529b\u306a\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u3001\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3092\u5b9f\u88c5\u3059\u308b\u969b\u306b\u76f4\u9762\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u8ab2\u984c\u3068\u305d\u306e\u89e3\u6c7a\u7b56\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"i-54\">9. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0<\/h1>\n\n\n\n<p>Spring Boot with JPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3084\u904b\u7528\u4e2d\u306b\u767a\u751f\u3059\u308b\u554f\u984c\u3092\u52b9\u679c\u7684\u306b\u89e3\u6c7a\u3059\u308b\u306b\u306f\u3001\u9069\u5207\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u6280\u8853\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u7b56\u3001\u30ed\u30b0\u306e\u6d3b\u7528\u65b9\u6cd5\u3001\u305d\u3057\u3066\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\u306e\u4f7f\u7528\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-55\">9.1 \u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u7b56<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-56\">LazyInitializationException<\/h3>\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\">\u539f\u56e0<\/div><\/div><div class=\"sng-box-msg__contents\">\n<p>\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u9589\u3058\u305f\u5f8c\u306b\u9045\u5ef6\u30ed\u30fc\u30c9\u3092\u8a66\u307f\u308b\u969b\u306b\u767a\u751f\u3057\u307e\u3059\u3002<\/p>\n<\/div><\/div><\/div>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>@Transactional<\/code> \u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u3001\u30e1\u30bd\u30c3\u30c9\u5b9f\u884c\u4e2d\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u958b\u3044\u305f\u307e\u307e\u306b\u3059\u308b<\/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=\"\">   @Transactional\n   public UserDTO getUserWithRoles(Long userId) {\n       User user = userRepository.findById(userId).orElseThrow();\n       \/\/ \u3053\u306e\u6642\u70b9\u3067 roles \u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3082 LazyInitializationException \u306f\u767a\u751f\u3057\u306a\u3044\n       Set&lt;Role&gt; roles = user.getRoles();\n       \/\/ ...\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30d5\u30a7\u30c3\u30c1\u30bf\u30a4\u30d7\u3092 EAGER \u306b\u5909\u66f4\uff08\u6ce8\u610f\uff1a\u904e\u5270\u306a\u30c7\u30fc\u30bf\u53d6\u5f97\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff09<\/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=\"\">   @OneToMany(fetch = FetchType.EAGER)\n   private Set&lt;Role&gt; roles;<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Open Session in View \u30d1\u30bf\u30fc\u30f3\u306e\u9069\u7528\uff08\u6ce8\u610f\uff1a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff\u3092\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff09<\/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=\"\">   spring.jpa.open-in-view=true<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-57\">DataIntegrityViolationException<\/h3>\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\">\u539f\u56e0<\/div><\/div><div class=\"sng-box-msg__contents\">\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6574\u5408\u6027\u5236\u7d04\u9055\u53cd\uff08\u4e00\u610f\u5236\u7d04\u3001\u5916\u90e8\u30ad\u30fc\u5236\u7d04\u306a\u3069\uff09<\/p>\n<\/div><\/div><\/div>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5165\u529b\u30c7\u30fc\u30bf\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/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=\"\">   @Entity\n   public class User {\n       @Column(unique = true)\n       @Email\n       private String email;\n       \/\/ ...\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u4e00\u610f\u5236\u7d04\u306e\u78ba\u8a8d\u3068\u9069\u5207\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/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=\"\">   @PostMapping(\"\/users\")\n   public ResponseEntity&lt;?&gt; createUser(@Valid @RequestBody UserDTO userDTO) {\n       try {\n           UserDTO createdUser = userService.createUser(userDTO);\n           return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);\n       } catch (DataIntegrityViolationException e) {\n           return ResponseEntity.badRequest().body(\"\u30e6\u30fc\u30b6\u30fc\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\");\n       }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30b1\u30fc\u30c9\u8a2d\u5b9a\u306e\u898b\u76f4\u3057<\/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=\"\">   @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})\n   private Set&lt;Address&gt; addresses;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-58\">StackOverflowError<\/h3>\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\">\u539f\u56e0<\/div><\/div><div class=\"sng-box-msg__contents\">\n<p>\u7121\u9650\u518d\u5e30\u3084\u5faa\u74b0\u53c2\u7167<\/p>\n<\/div><\/div><\/div>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>@JsonManagedReference<\/code> \u3068 <code>@JsonBackReference<\/code> \u306e\u4f7f\u7528<\/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 class User {\n       @JsonManagedReference\n       @OneToMany(mappedBy = \"user\")\n       private Set&lt;Order&gt; orders;\n   }\n\n   public class Order {\n       @JsonBackReference\n       @ManyToOne\n       private User user;\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>DTO\uff08Data Transfer Object\uff09\u306e\u4f7f\u7528<\/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 class UserDTO {\n       private Long id;\n       private String name;\n       private List&lt;Long&gt; orderIds;\n       \/\/ getters and setters\n   }<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-59\">9.2 \u30ed\u30b0\u306e\u6d3b\u7528\u65b9\u6cd5<\/h2>\n\n\n\n<p>\u9069\u5207\u306a\u30ed\u30b0\u8a2d\u5b9a\u306f\u3001\u554f\u984c\u306e\u8fc5\u901f\u306a\u7279\u5b9a\u3068\u89e3\u6c7a\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-60\">Spring Boot\u306e\u30ed\u30b0\u8a2d\u5b9a<\/h3>\n\n\n\n<p><code>application.properties<\/code> \u307e\u305f\u306f <code>application.yml<\/code> \u3067\u30ed\u30b0\u30ec\u30d9\u30eb\u3092\u8a2d\u5b9a\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=\"\"># \u30eb\u30fc\u30c8\u30ed\u30ac\u30fc\u306e\u30ec\u30d9\u30eb\u3092INFO\u306b\u8a2d\u5b9a\nlogging.level.root=INFO\n\n# \u7279\u5b9a\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30ed\u30b0\u30ec\u30d9\u30eb\u3092\u8a2d\u5b9a\nlogging.level.com.example.myapp=DEBUG\n\n# \u30d5\u30a1\u30a4\u30eb\u306b\u30ed\u30b0\u3092\u51fa\u529b\nlogging.file.name=myapp.log<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-61\">Logback\u306e\u4f7f\u7528\u4f8b<\/h3>\n\n\n\n<p><code>logback-spring.xml<\/code> \u3092\u4f7f\u7528\u3057\u3066\u3088\u308a\u8a73\u7d30\u306a\u8a2d\u5b9a\u304c\u53ef\u80fd\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;configuration&gt;\n    &lt;appender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\"&gt;\n        &lt;encoder&gt;\n            &lt;pattern&gt;%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n&lt;\/pattern&gt;\n        &lt;\/encoder&gt;\n    &lt;\/appender&gt;\n\n    &lt;appender name=\"FILE\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\"&gt;\n        &lt;file&gt;logs\/myapp.log&lt;\/file&gt;\n        &lt;rollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\"&gt;\n            &lt;fileNamePattern&gt;logs\/myapp-%d{yyyy-MM-dd}.log&lt;\/fileNamePattern&gt;\n        &lt;\/rollingPolicy&gt;\n        &lt;encoder&gt;\n            &lt;pattern&gt;%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n&lt;\/pattern&gt;\n        &lt;\/encoder&gt;\n    &lt;\/appender&gt;\n\n    &lt;root level=\"INFO\"&gt;\n        &lt;appender-ref ref=\"CONSOLE\" \/&gt;\n        &lt;appender-ref ref=\"FILE\" \/&gt;\n    &lt;\/root&gt;\n&lt;\/configuration&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-62\">9.3 \u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\u306e\u4f7f\u7528<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-63\">Java Flight Recorder (JFR)<\/h3>\n\n\n\n<p>JFR\u306f\u3001Java \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a73\u7d30\u306a\u5b9f\u884c\u6642\u60c5\u5831\u3092\u53ce\u96c6\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u4f7f\u7528\u4f8b\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=\"\">java -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr -jar myapp.jar<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-64\">Spring Boot Actuator<\/h3>\n\n\n\n<p>Spring Boot Actuator\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5065\u5168\u6027\u3001\u30e1\u30c8\u30ea\u30af\u30b9\u3001\u305d\u306e\u4ed6\u306e\u904b\u7528\u30c7\u30fc\u30bf\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u8a2d\u5b9a\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.springframework.boot&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-boot-starter-actuator&lt;\/artifactId&gt;\n&lt;\/dependency&gt;<\/pre>\n\n\n\n<p><code>application.properties<\/code>:<\/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=\"\">management.endpoints.web.exposure.include=*\nmanagement.endpoint.health.show-details=always<\/pre>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001<code>\/actuator\/health<\/code>, <code>\/actuator\/metrics<\/code> \u306a\u3069\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u304c\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-65\">\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u6642\u306e\u6ce8\u610f\u70b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u672c\u756a\u74b0\u5883\u3067\u306e\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u306f\u614e\u91cd\u306b\u884c\u3046\uff08\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff\u3092\u8003\u616e\uff09<\/li>\n\n\n\n<li>\u30bb\u30f3\u30b7\u30c6\u30a3\u30d6\u306a\u60c5\u5831\u304c\u9732\u51fa\u3057\u306a\u3044\u3088\u3046\u3001\u9069\u5207\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a\u3092\u884c\u3046<\/li>\n\n\n\n<li>\u5b9a\u671f\u7684\u306a\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u3092\u5b9f\u65bd\u3057\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5909\u5316\u3092\u76e3\u8996\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<p>\u9069\u5207\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u6280\u8853\u3092\u8eab\u306b\u3064\u3051\u308b\u3053\u3068\u3067\u3001Spring Boot with JPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u52b9\u7387\u3068\u54c1\u8cea\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\u3053\u308c\u307e\u3067\u306b\u5b66\u3093\u3060\u5185\u5bb9\u3092\u7dcf\u62ec\u3057\u3001\u3055\u3089\u306a\u308b\u5b66\u7fd2\u306e\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"i-66\">10. \u307e\u3068\u3081\u3068\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h1>\n\n\n\n<p>Spring Boot with JPA\u306f\u3001\u73fe\u4ee3\u306eJava\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u5f37\u529b\u304b\u3064\u52b9\u7387\u7684\u306a\u30c4\u30fc\u30eb\u30bb\u30c3\u30c8\u3067\u3059\u3002\u3053\u306e\u8a18\u4e8b\u3092\u901a\u3058\u3066\u3001\u305d\u306e\u57fa\u672c\u304b\u3089\u5fdc\u7528\u307e\u3067\u5e45\u5e83\u304f\u30ab\u30d0\u30fc\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u3053\u3053\u3067\u306f\u3001\u5b66\u3093\u3060\u5185\u5bb9\u3092\u632f\u308a\u8fd4\u308a\u3001\u3055\u3089\u306a\u308b\u5b66\u7fd2\u306e\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u7d39\u4ecb\u3057\u3001Spring Boot with JPA\u306e\u672a\u6765\u306b\u3064\u3044\u3066\u5c55\u671b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-67\">10.1 \u5b66\u7fd2\u3057\u305f\u30dd\u30a4\u30f3\u30c8\u306e\u632f\u308a\u8fd4\u308a<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Spring Boot\u3068JPA\u306e\u57fa\u672c\u6982\u5ff5<\/strong>: \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7279\u5fb4\u3068\u5229\u70b9\u3092\u7406\u89e3\u3057\u307e\u3057\u305f\u3002<\/li>\n\n\n\n<li><strong>\u74b0\u5883\u8a2d\u5b9a\u3068\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/strong>: \u52b9\u7387\u7684\u306a\u958b\u767a\u74b0\u5883\u306e\u69cb\u7bc9\u65b9\u6cd5\u3092\u5b66\u3073\u307e\u3057\u305f\u3002<\/li>\n\n\n\n<li><strong>\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u8a2d\u8a08<\/strong>: \u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\u3068\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u5c64\u306e\u5b9f\u88c5\u6280\u8853\u3092\u7fd2\u5f97\u3057\u307e\u3057\u305f\u3002<\/li>\n\n\n\n<li><strong>CRUD\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/strong>: \u57fa\u672c\u7684\u306a\u30c7\u30fc\u30bf\u64cd\u4f5c\u306e\u65b9\u6cd5\u3092\u7406\u89e3\u3057\u307e\u3057\u305f\u3002<\/li>\n\n\n\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/strong>: \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u65b9\u6cd5\u3092\u5b66\u3073\u307e\u3057\u305f\u3002<\/li>\n\n\n\n<li><strong>\u30c6\u30b9\u30c8\u6226\u7565<\/strong>: \u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u305f\u3081\u306e\u624b\u6cd5\u3092\u7fd2\u5f97\u3057\u307e\u3057\u305f\u3002<\/li>\n\n\n\n<li><strong>\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/strong>: \u5b9f\u969b\u306e\u30b7\u30ca\u30ea\u30aa\u3067\u306e\u9069\u7528\u65b9\u6cd5\u3092\u7406\u89e3\u3057\u307e\u3057\u305f\u3002<\/li>\n\n\n\n<li><strong>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0<\/strong>: \u554f\u984c\u89e3\u6c7a\u306e\u305f\u3081\u306e\u52b9\u679c\u7684\u306a\u624b\u6cd5\u3092\u5b66\u3073\u307e\u3057\u305f\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u77e5\u8b58\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5805\u7262\u3067\u52b9\u7387\u7684\u306aSpring Boot with JPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u57fa\u76e4\u304c\u6574\u3044\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-68\">10.2 \u3055\u3089\u306a\u308b\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u306e\u7d39\u4ecb<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u66f8\u7c4d:\n<ul class=\"wp-block-list\">\n<li>\u201cSpring Boot in Action\u201d by Craig Walls<\/li>\n\n\n\n<li>\u201cPro Spring 5\u201d by Iuliana Cosmina, et al.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u30aa\u30f3\u30e9\u30a4\u30f3\u30b3\u30fc\u30b9:\n<ul class=\"wp-block-list\">\n<li>Udemy: \u201cSpring &amp; Hibernate for Beginners\u201d<\/li>\n\n\n\n<li>Coursera: \u201cBuilding Cloud Services with the Java Spring Framework\u201d<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/htmlsingle\/\">Spring Boot Reference Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.spring.io\/spring-data\/jpa\/docs\/current\/reference\/html\/\">Spring Data JPA \u2013 Reference Documentation<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30ea\u30bd\u30fc\u30b9:\n<ul class=\"wp-block-list\">\n<li>Stack Overflow: Spring Boot and JPA tags<\/li>\n\n\n\n<li>Spring Framework Forum<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u30d6\u30ed\u30b0:\n<ul class=\"wp-block-list\">\n<li>Baeldung (https:\/\/www.baeldung.com\/)<\/li>\n\n\n\n<li>DZone\u2019s Java Zone<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001Spring Boot with JPA\u306e\u77e5\u8b58\u3092\u3055\u3089\u306b\u6df1\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-69\">10.3 Spring Boot with JPA\u306e\u672a\u6765\u5c55\u671b<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u958b\u767a<\/strong>: Spring Boot with JPA\u306f\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u306b\u304a\u3044\u3066\u307e\u3059\u307e\u3059\u91cd\u8981\u306b\u306a\u308b\u3068\u4e88\u60f3\u3055\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0<\/strong>: Spring WebFlux\u3068\u306e\u7d71\u5408\u304c\u9032\u307f\u3001\u3088\u308a\u9ad8\u6027\u80fd\u3067\u62e1\u5f35\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002<\/li>\n\n\n\n<li><strong>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/strong>: Spring Boot with JPA\u306f\u3001\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u5b9f\u88c5\u306b\u304a\u3044\u3066\u4e2d\u5fc3\u7684\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u7d9a\u3051\u308b\u3068\u8003\u3048\u3089\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>AI\/ML\u7d71\u5408<\/strong>: \u30c7\u30fc\u30bf\u51e6\u7406\u3084\u30e2\u30c7\u30eb\u7d71\u5408\u306b\u304a\u3044\u3066Spring Boot with JPA\u306e\u6d3b\u7528\u304c\u5897\u3048\u308b\u3068\u4e88\u60f3\u3055\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u5f37\u5316<\/strong>: \u3088\u308a\u30b7\u30fc\u30e0\u30ec\u30b9\u3067\u5f37\u56fa\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u7d71\u5408\u304c\u9032\u3080\u3067\u3057\u3087\u3046\u3002<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-70\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9f\u8df5<\/strong>: \u5b66\u3093\u3060\u5185\u5bb9\u3092\u5c0f\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5b9f\u8df5\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/li>\n\n\n\n<li><strong>\u6df1\u6398\u308a<\/strong>: \u7279\u306b\u8208\u5473\u3092\u6301\u3063\u305f\u9818\u57df\uff08\u6027\u80fd\u6700\u9069\u5316\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306a\u3069\uff09\u3092\u3055\u3089\u306b\u6df1\u304f\u5b66\u7fd2\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n\n\n\n<li><strong>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u53c2\u52a0<\/strong>: Spring Boot community forum\u3084\u5730\u57df\u306eJava\u30e6\u30fc\u30b6\u30fc\u30b0\u30eb\u30fc\u30d7\u306b\u53c2\u52a0\u3057\u3001\u77e5\u8b58\u3092\u5171\u6709\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n\n\n\n<li><strong>\u6700\u65b0\u60c5\u5831\u306e\u30ad\u30e3\u30c3\u30c1\u30a2\u30c3\u30d7<\/strong>: Spring Boot\u3068JPA\u306e\u6700\u65b0\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3084\u65b0\u6a5f\u80fd\u3092\u5b9a\u671f\u7684\u306b\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n\n\n\n<li><strong>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3078\u306e\u8ca2\u732e<\/strong>: Spring Boot\u3084\u305d\u306e\u95a2\u9023\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u8ca2\u732e\u3092\u691c\u8a0e\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n<\/ol>\n\n\n\n<p>Spring Boot with JPA\u306e\u4e16\u754c\u306f\u5e83\u5927\u3067\u3001\u5e38\u306b\u9032\u5316\u3057\u7d9a\u3051\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u8a18\u4e8b\u3067\u5b66\u3093\u3060\u57fa\u790e\u3092\u571f\u53f0\u306b\u3001\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u3068\u5b9f\u8df5\u3092\u901a\u3058\u3066\u3001\u3088\u308a\u6df1\u3044\u7406\u89e3\u3068\u9ad8\u5ea6\u306a\u30b9\u30ad\u30eb\u3092\u7372\u5f97\u3057\u3066\u3044\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u7686\u3055\u3093\u306e\u958b\u767a\u8005\u3068\u3057\u3066\u306e\u6210\u9577\u3068\u3001\u9769\u65b0\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5275\u9020\u3092\u5fc3\u304b\u3089\u5fdc\u63f4\u3057\u3066\u3044\u307e\u3059\uff01<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. \u306f\u3058\u3081\u306b\uff1aSpring Boot with JPA\u306e\u6982\u8981 \u73fe\u4ee3\u306eJava\u958b\u767a\u306b\u304a\u3044\u3066\u3001Spring Boot\u3068JPA\uff08Java Persistence API\uff09\u306f\u975e\u5e38\u306b\u91cd\u8981\u306a\u6280\u8853\u30b9\u30bf\u30c3\u30af\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u7d44\u307f\u5408\u308f &#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-355","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\/355","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=355"}],"version-history":[{"count":4,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/355\/revisions"}],"predecessor-version":[{"id":369,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/355\/revisions\/369"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}