{"id":40148,"date":"2023-10-15T20:16:00","date_gmt":"2024-01-23T02:05:47","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/"},"modified":"2024-05-04T04:23:25","modified_gmt":"2024-05-03T20:23:25","slug":"%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Spring Boot\u548cPostgreSQL\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09"},"content":{"rendered":"<h2>\u9996\u5148<\/h2>\n<p>\u8f9b\u82e6\u4e86\uff01\u6211\u662f@Keichan_15\uff01<\/p>\n<p>\u6211\u60f3\u4f7f\u7528Spring Boot\u548cPostgreSQL\u5f00\u53d1\u4e00\u4e2a\u529f\u80fd\uff0c\u53ef\u4ee5\u5c06\u8868\u5355\u4e2d\u8f93\u5165\u7684\u503c\u5b58\u5165\u6570\u636e\u5e93\u5e76\u663e\u793a\u6ce8\u518c\u7684\u6570\u636e\u3002<\/p>\n<p>\u56e0\u4e3a\u66fe\u7ecf\u63a5\u89e6\u8fc7Rails\uff0c\u6240\u4ee5\u5bf9\u4e8e\u5f00\u53d1\u7ecf\u9a8c\u8f83\u597d\u7684Spring Boot\u4e5f\u76f8\u5f53\u559c\u6b22\u3002<\/p>\n<p>\u6211\u4eec\u5f00\u59cb\u5427\uff01<\/p>\n<h2>\u73af\u5883 &#8211;<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Windows11(Windows10\u3067\u3082\u307b\u307c\u540c\u3058)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Eclipse 2022-12 (4.26.0)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Spring Boot<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">PostgreSQL v15.3<\/ul>\n<h2>\u521b\u5efa\u9879\u76ee<\/h2>\n<p>\u6211\u5011\u5c07\u5f9e\u5275\u5efaSpring Boot\u9805\u76ee\u958b\u59cb\u3002\u96d6\u7136\u6709\u591a\u7a2e\u5b89\u88dd\u65b9\u6cd5\uff0c\u4f46\u672c\u6b21\u6211\u5011\u5c07\u4f7f\u7528Spring\u5b98\u65b9\u63d0\u4f9b\u7684\u6559\u7a0b\u300aSpring Initializr\u300b\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u70b9\u51fb\u6587\u4ef6 &gt; \u65b0\u5efa &gt; \u9009\u62e9Spring Starter\u9879\u76ee (Spring Initializr)\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/11-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u7279\u5b9a\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002\u6b21\u306b\u9032\u3080\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/13-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u5c06\u4f9d\u8d56\u5173\u7cfb\u6dfb\u52a0\u8fdb\u53bb\u3002\u9664\u4e86\u9ed8\u8ba4\u6dfb\u52a0\u7684\u4e4b\u5916\uff0c\u8fd8\u4f1a\u6dfb\u52a0\u4ee5\u4e0b\u4e09\u79cd\u4f9d\u8d56\u5173\u7cfb\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Thymeleaf<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">PostgreSQL Driver<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Spring Data JPA<\/ul>\n<p>\u4e3a\u4e86\u786e\u4fdd\u4e0d\u4f1a\u9057\u6f0f\u4efb\u4f55\u9009\u62e9\uff0c\u5c24\u5176\u8981\u786e\u4fddPostgreSQL\u9a71\u52a8\u7a0b\u5e8f\u548cSpring Data JPA\uff0c\u56e0\u4e3a\u5b83\u4eec\u5bf9\u4e8e\u8fde\u63a5PostgreSQL\u662f\u5fc5\u9700\u7684\u3002<\/p>\n<p>\u987a\u4fbf\u63d0\u4e00\u53e5\uff0c\u5173\u4e8e\u6784\u5efa\u5de5\u5177\uff0c\u662f\u9009\u62e9Gradle\u8fd8\u662fMaven\u597d\u5462\uff1f\u5b9e\u9645\u4e0a\u6211\u53ea\u7528\u8fc7Gradle\uff0c\u6240\u4ee5\u65e0\u6cd5\u8bc4\u5224&#8230;<\/p>\n<p>&nbsp;<\/p>\n<p>\u6211\u5011\u7a0d\u5fae\u504f\u96e2\u4e86\u4e00\u4e0b&#8230;(-_-;) \u8b93\u6211\u5011\u91cd\u65b0\u96c6\u4e2d\u6ce8\u610f\u529b\u3002<\/p>\n<p>\u9879\u76ee\u521b\u5efa\u540e\u7684\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code>demo\r\n\u2502  .classpath\r\n\u2502  .gitignore\r\n\u2502  .project\r\n\u2502  build.gradle\r\n\u2502  gradlew\r\n\u2502  gradlew.bat\r\n\u2502  HELP.md\r\n\u2502  settings.gradle\r\n\u2502\r\n\u251c\u2500.gradle\r\n\u2502  \u251c\u25007.6.1\r\n\u2502  \u2502  \u2502  gc.properties\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500checksums\r\n\u2502  \u2502  \u2502      checksums.lock\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500dependencies-accessors\r\n\u2502  \u2502  \u2502      dependencies-accessors.lock\r\n\u2502  \u2502  \u2502      gc.properties\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500executionHistory\r\n\u2502  \u2502  \u2502      executionHistory.lock\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500fileChanges\r\n\u2502  \u2502  \u2502      last-build.bin\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500fileHashes\r\n\u2502  \u2502  \u2502      fileHashes.lock\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u2514\u2500vcsMetadata\r\n\u2502  \u251c\u2500buildOutputCleanup\r\n\u2502  \u2502      buildOutputCleanup.lock\r\n\u2502  \u2502      cache.properties\r\n\u2502  \u2502\r\n\u2502  \u2514\u2500vcs-1\r\n\u2502          gc.properties\r\n\u2502\r\n\u251c\u2500.settings\r\n\u2502      org.eclipse.buildship.core.prefs\r\n\u2502\r\n\u251c\u2500bin\r\n\u2502  \u251c\u2500main\r\n\u2502  \u2502  \u2502  application.properties\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500com\r\n\u2502  \u2502  \u2502  \u2514\u2500example\r\n\u2502  \u2502  \u2502      \u2514\u2500demo\r\n\u2502  \u2502  \u2502              DemoApplication.class\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u2514\u2500templates\r\n\u2502  \u2514\u2500test\r\n\u2502      \u2514\u2500com\r\n\u2502          \u2514\u2500example\r\n\u2502              \u2514\u2500demo\r\n\u2502                      DemoApplicationTests.class\r\n\u2502\r\n\u251c\u2500gradle\r\n\u2502  \u2514\u2500wrapper\r\n\u2502          gradle-wrapper.jar\r\n\u2502          gradle-wrapper.properties\r\n\u2502\r\n\u2514\u2500src\r\n    \u251c\u2500main\r\n    \u2502  \u251c\u2500java\r\n    \u2502  \u2502  \u2514\u2500com\r\n    \u2502  \u2502      \u2514\u2500example\r\n    \u2502  \u2502          \u2514\u2500demo\r\n    \u2502  \u2502                  DemoApplication.java\r\n    \u2502  \u2502\r\n    \u2502  \u2514\u2500resources\r\n    \u2502      \u2502  application.properties\r\n    \u2502      \u2502\r\n    \u2502      \u251c\u2500static\r\n    \u2502      \u2514\u2500templates\r\n    \u2514\u2500test\r\n        \u2514\u2500java\r\n            \u2514\u2500com\r\n                \u2514\u2500example\r\n                    \u2514\u2500demo\r\n                            DemoApplicationTests.java\r\n<\/code><\/pre>\n<p>\u53e6\u5916\uff0c\u5728build.gradle\u4e2d\u786e\u4fdd\u4f9d\u8d56\u5173\u7cfb\u5df2\u7ecf\u6b63\u786e\u6dfb\u52a0\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">dependencies<\/span> <span class=\"o\">{<\/span>\r\n\t<span class=\"n\">implementation<\/span> <span class=\"s1\">'org.springframework.boot:spring-boot-starter-data-jpa'<\/span>\r\n\t<span class=\"n\">implementation<\/span> <span class=\"s1\">'org.springframework.boot:spring-boot-starter-thymeleaf'<\/span>\r\n\t<span class=\"n\">implementation<\/span> <span class=\"s1\">'org.springframework.boot:spring-boot-starter-web'<\/span>\r\n\t<span class=\"n\">compileOnly<\/span> <span class=\"s1\">'org.projectlombok:lombok'<\/span>\r\n\t<span class=\"n\">developmentOnly<\/span> <span class=\"s1\">'org.springframework.boot:spring-boot-devtools'<\/span>\r\n\t<span class=\"n\">runtimeOnly<\/span> <span class=\"s1\">'org.postgresql:postgresql'<\/span>\r\n\t<span class=\"n\">annotationProcessor<\/span> <span class=\"s1\">'org.projectlombok:lombok'<\/span>\r\n\t<span class=\"n\">testImplementation<\/span> <span class=\"s1\">'org.springframework.boot:spring-boot-starter-test'<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6309\u7167\u4e0a\u8ff0\u65b9\u5f0f\u505a\u4e86\uff0c\u5c31\u610f\u5473\u7740Spring Boot\u7684\u5f15\u5165\u5df2\u7ecf\u5b8c\u6210\u4e86\u3002\u8f9b\u82e6\u4f60\u4e86\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4f1a\u8fdb\u884cPostgreSQL\u7684\u51c6\u5907\u5de5\u4f5c\u3002<\/p>\n<h2>\u5b89\u88c5PostgreSQL<\/h2>\n<p>\u5982\u679c\u60a8\u8fd8\u6ca1\u6709\u4e0b\u8f7dPostgreSQL\uff0c\u53ef\u4ee5\u4eceEDB\u4e0b\u8f7d\u3002<\/p>\n<p>&nbsp;<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/29-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u6211\u5df2\u7ecf\u4e0b\u8f7d\u4e86 Windows x86-64 \u6700\u65b0\u7248\u672c\u7684 v15.3\u3002\u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e0d\u540c\uff0c\u53ef\u80fd\u5b58\u5728\u4e0d\u652f\u6301\u6216\u8005\u4e0b\u8f7d\u94fe\u63a5\u5728\u53e6\u4e00\u4e2a\u9875\u9762\u4e2d\u7684\u60c5\u51b5\uff0c\u8bf7\u4ed4\u7ec6\u786e\u8ba4\u3002<\/p>\n<p>\u7531\u4e8e\u6d89\u53ca\u5230PostgreSQL\u7684\u4e0b\u8f7d\u65b9\u6cd5\u8dd1\u9898\u4e86\uff0c\u56e0\u6b64\u6211\u4eec\u5c06\u7701\u7565\u4e0d\u63d0\u3002<\/p>\n<p>\u4ee5\u4e0b\u662f\u4e00\u4e9b\u53c2\u8003\u8d44\u6599\uff0c\u53ef\u4f9b\u60a8\u53c2\u8003\uff0c\u5305\u62ec\u65e5\u672cPostgreSQL\u7528\u6237\u7ec4\u4ecb\u7ecd\u7684\u5b89\u88c5\u6307\u5357\u548c\u4e0b\u9762\u7684\u6587\u7ae0\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>PostgreSQL\u4e0b\u8f7d\u5b8c\u6210\u540e\uff0c\u6211\u4eec\u7acb\u5373\u51c6\u5907\u7528\u4e8eCRUD\u64cd\u4f5c\u7684\u6570\u636e\u6ce8\u518c\u7528\u6570\u636e\u5e93\u5427\uff01<\/p>\n<h2>\u6570\u636e\u5e93\u51c6\u5907<\/h2>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u5c06\u6784\u5efa\u9002\u7528\u4e8e\u672c\u7bc7\u6587\u7ae0\u7684\u6570\u636e\u5e93\u3002<\/p>\n<p>\u4e2a\u4eba\u89c9\u5f97\uff0c\u6700\u5f00\u59cb\u4f7f\u7528\u547d\u4ee4\u884c\u754c\u9762\u5e76\u7d27\u76ef\u7740\u9ed1\u5c4f\u8fdb\u5c55\uff0c\u4f1a\u66f4\u6709\u52a9\u4e8e\u5b66\u4e60\u3002\u4ee5\u4e0b\u6587\u7ae0\u7b49\u90fd\u662f\u5982\u6b64\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u4e3a\u4e86\u5feb\u901f\u6784\u5efa\uff0c\u6211\u4eec\u5c06\u4f7f\u7528\u65b9\u4fbf\u7684GUI\u5de5\u5177pgAdmin4\u3002\u540e\u9762\u4f60\u5c31\u4f1a\u77e5\u9053\u4e3a\u4ec0\u4e48\u9009\u62e9pgAdmin4\u4e86\u3002\uff08\u7b11\uff09<\/p>\n<p>\u5982\u679c\u5728\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4e0b\u8f7d\u4e86 PostgreSQL\uff0c\u90a3\u4e48 PGAdmin4 \u7684 exe \u6587\u4ef6\u5c06\u4f4d\u4e8e C:\\Program Files\\PostgreSQL\\15\\pgAdmin4\\runtime \u76ee\u5f55\u4e0b\u3002<\/p>\n<p>\u6267\u884cexe\u6587\u4ef6\uff0c\u6253\u5f00pgAdmin4\u65f6\u4f1a\u63d0\u793a\u8f93\u5165\u5bc6\u7801\uff0c\u8bf7\u5728\u6b64\u5904\u8f93\u5165\u60a8\u5728\u5b89\u88c5\u65f6\u8bbe\u7f6e\u7684\u5bc6\u7801\u3002<\/p>\n<p>\u5982\u679c\u5c4f\u5e55\u4e0a\u663e\u793a\u51fa\u5982\u4e0b\u5185\u5bb9\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/43-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u8fd9\u6837\u4e00\u6765\uff0c\u7531\u4e8e\u53ef\u4ee5\u4ee5\u89c6\u89c9\u65b9\u5f0f\u64cd\u4f5c\u6570\u636e\u5e93\u548c\u5177\u6709\u6f02\u4eae\u7684\u7528\u6237\u754c\u9762\uff0c\u6240\u4ee5\u6211\u4e2a\u4eba\u63a8\u8350\u5b83\u3002<br \/>\n\u9664\u975e\u7279\u522b\u6ce8\u91cd\u547d\u4ee4\u884c\u754c\u9762\uff0c\u6216\u8005\u5e0c\u671b\u901a\u8fc7\u8f93\u5165\u547d\u4ee4\u6765\u5b66\u4e60\u7684\u4eba\uff0c\u5426\u5219\u6211\u8ba4\u4e3a\u5e94\u8be5\u4f7f\u7528\u5b83\u3002<\/p>\n<p>\u4e0b\u4e00\u6b65\u662f\u521b\u5efa\u6570\u636e\u5e93\u3002\u8fd9\u6b21\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2a\u540d\u4e3atestdb\u7684\u6570\u636e\u5e93\u3002<\/p>\n<p>\u8bf7\u70b9\u51fb\u5de6\u4fa7\u7684\u5bf9\u8c61\u8d44\u6e90\u7ba1\u7406\u5668\uff0c\u9009\u62e9\u6570\u636e\u5e93\uff0c\u7136\u540e\u53f3\u952e\u5355\u51fb &gt; \u521b\u5efa &gt; \u6570\u636e\u5e93&#8230; \u7ee7\u7eed\u64cd\u4f5c\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/47-0.png\" alt=\"image.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/48-0.png\" alt=\"image.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/49-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u5728\u6ca1\u6709\u4efb\u4f55\u95ee\u9898\u7684\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u786e\u8ba4\u5728Object Explorer\u7684\u6570\u636e\u5e93\u5185\u5df2\u7ecf\u6dfb\u52a0\u4e86testdb\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/51-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u6570\u636e\u5e93\u5df2\u7ecf\u521b\u5efa\u5b8c\u6210\u4e86\uff01\u8f9b\u82e6\u4e86\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5f00\u59cb\u521b\u5efa\u8868\u548c\u5217\u5427\uff01<\/p>\n<h2>\u521b\u5efa\u8868\u683c\u548c\u5217\u3002<\/h2>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u521b\u5efa\u4e00\u4e2a\u7528\u4e8e\u5b58\u50a8\u5df2\u6ce8\u518c\u6570\u636e\u7684forums\u8868\u4ee5\u53ca\u7528\u4e8e\u5b58\u50a8\u6bcf\u4e2a\u6570\u636e\u7684\u5217\u3002<br \/>\n\u53f3\u952e\u70b9\u51fbObject Explorer\u4e2d\u7684testdb\uff0c\u7136\u540e\u9009\u62e9Query Tool\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/55-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u8bf7\u8fd0\u884c\u4ee5\u4e0b\u7684SQL\u8bed\u53e5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">create<\/span> <span class=\"k\">TABLE<\/span> <span class=\"n\">forums<\/span> <span class=\"p\">(<\/span>\r\n  <span class=\"n\">id<\/span> <span class=\"nb\">serial<\/span> <span class=\"k\">primary<\/span> <span class=\"k\">key<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"n\">title<\/span> <span class=\"nb\">varchar<\/span><span class=\"p\">(<\/span><span class=\"mi\">20<\/span><span class=\"p\">),<\/span>\r\n  <span class=\"n\">body<\/span> <span class=\"nb\">varchar<\/span><span class=\"p\">(<\/span><span class=\"mi\">100<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">);<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/58-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u5982\u679c\u51fa\u73b0\u8fd9\u6837\u7684\u8868\u793a\uff0c\u8bf4\u660e\u8868\u683c\u5df2\u7ecf\u521b\u5efa\u6210\u529f\u3002<\/p>\n<p>\u4e3a\u4e86\u5c06\u753b\u9762\u53cd\u6620\u51fa\u6765, \u9009\u62e9&#8221;\u5237\u65b0&#8230;&#8221;. \u8fd9\u4e2a\u9009\u9879\u4e5f\u4f1a\u5728\u53f3\u952e\u70b9\u51fbtestdb\u65f6\u51fa\u73b0.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/61-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u4ee5\u4e0b\u662f\u6dfb\u52a0\u7684\u8868\u683c\u7684\u663e\u793a\u7ed3\u679c\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/63-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u6211\u5c06\u7b80\u8981\u603b\u7ed3\u6211\u4eec\u5728\u8fd9\u4e2a\u5730\u65b9\u6dfb\u52a0\u7684\u6bcf\u4e2a\u680f\u76ee\u3002<\/p>\n<p>id : AUTO INCREMENT\u306b\u3088\u308b\u81ea\u52d5\u63a1\u756a<\/p>\n<p>title : \u6295\u7a3f\u306e\u300c\u30bf\u30a4\u30c8\u30eb\u300d\u3092\u4fdd\u6301\u3059\u308b\u30ab\u30e9\u30e0\u3002\u6587\u5b57\u6570\u4e0a\u9650\u306f20\u6587\u5b57\u3002<\/p>\n<p>body : \u6295\u7a3f\u306e\u300c\u672c\u6587\u300d\u3092\u4fdd\u6301\u3059\u308b\u30ab\u30e9\u30e0\u3002\u6587\u5b57\u6570\u4e0a\u9650\u306f100\u6587\u5b57\u3002<\/p>\n<p>\u6211\u4eec\u6765\u786e\u8ba4\u4e00\u4e0b\u662f\u5426\u5df2\u7ecf\u6dfb\u52a0\u4e86\u65b0\u7684\u5217\u3002<\/p>\n<p>\u5f53\u4f60\u5728Lists\u4e0a\u70b9\u51fb\u53f3\u952e\uff0c\u9009\u62e9View\/Edit Data &gt; All Rows\uff0c\u4f60\u53ef\u4ee5\u67e5\u770b\u8868\u683c\u4e2d\u7684\u6240\u6709\u6570\u636e\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/68-0.png\" alt=\"image.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/69-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u76ee\u524d\u53ea\u5b9a\u4e49\u4e86\u8868\u683c\u548c\u5217\uff0c\u6240\u4ee5\u73b0\u5728\u5904\u4e8e\u7c7b\u4f3c\u4e8e\u7a7a\u767d\u753b\u9762\u7684\u72b6\u6001\u3002<br \/>\n\u5728\u8fd9\u4e2a\u8868\u683c\u7684\u6bcf\u4e2a\u5217\u4e0a\uff0c\u5c06\u4f1a\u5b58\u50a8\u7531Spring Boot\u7aef\u7684\u8868\u5355\u8f93\u5165\u7684\u503c\u3002<\/p>\n<p>\u8fd9\u4e2a\u8868\u548c\u5217\u7684\u521b\u5efa\u5de5\u4f5c\u5df2\u7ecf\u5b8c\u6210\u4e86\u3002<\/p>\n<p>\u6700\u540e\uff0c\u6211\u4eec\u8981\u4fee\u6539Spring Boot\u7684application.properties\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"py\">spring.datasource.driver-class-name<\/span><span class=\"p\">=<\/span><span class=\"s\">org.postgresql.Driver<\/span>\r\n<span class=\"py\">spring.datasource.url<\/span><span class=\"p\">=<\/span><span class=\"s\">jdbc:postgresql:\/\/localhost:5432\/testdb<\/span>\r\n<span class=\"py\">spring.datasource.username<\/span><span class=\"p\">=<\/span><span class=\"s\">postgres<\/span>\r\n<span class=\"py\">spring.datasource.password<\/span><span class=\"p\">=<\/span><span class=\"s\">\"\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b\u6c7a\u3081\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\"<\/span>\r\n<span class=\"py\">spring.jpa.open-in-view<\/span><span class=\"p\">=<\/span><span class=\"s\">True<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u4e0d\u8fdb\u884c\u8fd9\u4e2a\u8bbe\u7f6e\uff0cSpring Boot\u548cpostgreSQL\u5c06\u65e0\u6cd5\u8fde\u63a5\uff0c\u56e0\u6b64\u8bf7\u786e\u4fdd\u6ca1\u6709\u9057\u6f0f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"py\">spring.datasource.password<\/span><span class=\"p\">=<\/span><span class=\"s\">\"\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b\u6c7a\u3081\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\"<\/span>\r\n<\/code><\/pre>\n<p>\u8bf7\u60a8\u5c06\u5bc6\u7801\u66f4\u6539\u4e3a\u60a8\u81ea\u5df1\u8bbe\u5b9a\u7684\u5bc6\u7801\u3002<\/p>\n<h2>\u6267\u884c<\/h2>\n<p>\u6211\u4eec\u7ec8\u4e8e\u5f00\u59cb\u8fdb\u884cSpring Boot\u7684\u5b9e\u73b0\u3002<br \/>\n\u5173\u4e8eSpring Boot\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u6211\u4eec\u5c06\u5728\u4ee5\u540e\u7684\u6587\u7ae0\u4e2d\u603b\u7ed3\uff0c\u4f46\u4e3a\u4e86\u521d\u6b21\u63a5\u89e6\u7684\u4eba\uff0c\u6211\u4eec\u4f1a\u9002\u65f6\u5730\u63d2\u5165\u89e3\u91ca\uff0c\u5982\u679c\u6709\u4efb\u4f55\u4e0d\u6e05\u695a\u7684\u5730\u65b9\uff0c\u8bf7\u5728\u8bc4\u8bba\u4e2d\u544a\u77e5\uff0c\u5c06\u4e0d\u80dc\u611f\u6fc0\u3002<\/p>\n<p>\u672c\u6b21\u5c06\u8bf4\u660e\u5173\u4e8e\u4f7f\u7528\u540c\u6b65\u901a\u4fe1\u8fdb\u884c\u6570\u636e\u767b\u8bb0\u7684\u6280\u5de7\u3002\u5173\u4e8e\u4f7f\u7528\u5f02\u6b65\u901a\u4fe1\uff08Ajax \u00d7 jQuery\uff09\u8fdb\u884c\u6570\u636e\u767b\u8bb0\u7684\u5185\u5bb9\u5c06\u5728\u4ee5\u540e\u7684\u6587\u7ae0\u4e2d\u6574\u7406\u3002<\/p>\n<h3>\uff08\u4ec0\u4e48\u662f\u5bc4\u308a\u9053\uff09MVC\u6a21\u578b\uff1f<\/h3>\n<p>\u9996\u5148\uff0cSpring Boot\u5904\u7406\u7684\u91cd\u8981\u6982\u5ff5\u4e4b\u4e00\u662fMVC\u6a21\u578b\u3002\u5bf9\u4e8e\u90a3\u4e9b\u66fe\u7ecf\u4f7f\u7528\u8fc7Ruby on Rails\u7b49Web\u6846\u67b6\u7684\u4eba\u6765\u8bf4\uff0c\u8fd9\u662f\u4e00\u4e2a\u719f\u6089\u7684\u6982\u5ff5\u3002<\/p>\n<p>MVC\u6a21\u578b\u5c06\u4ee3\u7801\u5206\u4e3aM(Model)\u3001V(View)\u548cC(Controller)\u4e09\u4e2a\u90e8\u5206\uff0c\u5206\u522b\u4ee3\u8868\u6a21\u578b\u3001\u89c6\u56fe\u548c\u63a7\u5236\u5668\u3002<\/p>\n<p>Model : \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u3084\u308a\u3068\u308a\u3084\u30b7\u30b9\u30c6\u30e0\u5185\u306e\u30c7\u30fc\u30bf\u51e6\u7406\u3092\u62c5\u5f53<\/p>\n<p>View : \u753b\u9762\u8868\u793a\u3092\u62c5\u5f53<\/p>\n<p>Controller : View\u3068Model\u306e\u52d5\u4f5c\u5236\u5fa1\u3092\u62c5\u5f53(\u3044\u308f\u3070\u4ef2\u4ecb\u5f79)<\/p>\n<p>\u901a\u8fc7\u91c7\u7528MVC\u6a21\u578b\uff0c\u6587\u4ef6\u53ef\u4ee5\u6839\u636e\u89d2\u8272\u72ec\u7acb\u5b58\u5728\uff0c\u8fd9\u53ef\u4ee5\u63d0\u9ad8\u53ef\u7ef4\u62a4\u6027\u548c\u5f00\u53d1\u6548\u7387\uff0c\u8fd9\u662f\u4e00\u4e2a\u4f18\u70b9\u3002<\/p>\n<h3>\u25ce\u5efa\u7acb\u6a21\u578b<\/h3>\n<p>\u8ba9\u6211\u4eec\u4ece\u6700\u521d\u7684\u7cfb\u7edf\u6838\u5fc3\u6a21\u578b\u5f00\u59cb\u521b\u5efa\u3002<\/p>\n<p>\u8fd9\u6b21\u8981\u521b\u5efa\u7684\u6a21\u578b\u662fForum.java\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example.demo.model<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.Column<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.Entity<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.GeneratedValue<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.GenerationType<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.Id<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.Table<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">lombok.Data<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Data<\/span>\r\n<span class=\"nd\">@Entity<\/span>\r\n<span class=\"nd\">@Table<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"forums\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Forum<\/span> <span class=\"o\">{<\/span>\r\n\t<span class=\"nd\">@Id<\/span>\r\n\t<span class=\"nd\">@GeneratedValue<\/span><span class=\"o\">(<\/span><span class=\"n\">strategy<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">GenerationType<\/span><span class=\"o\">.<\/span><span class=\"na\">IDENTITY<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"nd\">@Column<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"id\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">private<\/span> <span class=\"nc\">Integer<\/span> <span class=\"n\">id<\/span><span class=\"o\">;<\/span>\r\n\t<span class=\"nd\">@Column<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"title\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">title<\/span><span class=\"o\">;<\/span>\r\n\t<span class=\"nd\">@Column<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"body\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">body<\/span><span class=\"o\">;<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h4>\u89e3\u91ca<\/h4>\n<p>\u5982\u679c\u4f60\u6ca1\u6709\u4f7f\u7528Java\u8fdb\u884c\u5b9e\u73b0\u8fc7\uff0c\u53ef\u80fd\u4f1a\u5bf9\u4ee5\u4e0b\u7684\u8868\u8fbe\u611f\u5230\u56f0\u60d1\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">@Data<\/span>\r\n<span class=\"nd\">@Entity<\/span>\r\n<span class=\"nd\">@Table<\/span>\r\n<span class=\"nd\">@Id<\/span>\r\n<span class=\"nd\">@GeneratedValue<\/span>\r\n<span class=\"nd\">@Column<\/span>\r\n<\/code><\/pre>\n<p>\u8fd9\u88ab\u79f0\u4e3a\u6ce8\u91ca\u3002\u6ce8\u91ca\u76f4\u8bd1\u4e3a&#8221;\u6ce8\u89e3&#8221;\uff0c\u901a\u8fc7\u5728\u6e90\u4ee3\u7801\u4e2d\u6dfb\u52a0\u6ce8\u91ca\uff0c\u53ef\u4ee5\u4fee\u6539\u7a0b\u5e8f\u7684\u884c\u4e3a\uff0c\u8fd8\u53ef\u4ee5\u6307\u793aSpring Boot\u7b49\u6846\u67b6\u8fdb\u884c\u5904\u7406\u3002<\/p>\n<p>\u4f8b\u5982\uff0c\u5bf9\u4e8e@Data\u6ce8\u89e3\u800c\u8a00\uff0c\u6b64\u6ce8\u89e3\u4f1a\u5728\u7f16\u8bd1\u65f6\u81ea\u52a8\u751f\u6210\u4ee5\u4e0b\u65b9\u6cd5\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">setter()<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">getter()<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">toString()<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">equals()<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">hashCode()<\/ul>\n<p>\u53ea\u9700\u4e00\u4e2a\u9009\u9879\uff1a\u7279\u522b\u662f\u4e0d\u9700\u8981\u7f16\u5199\u524d\u4e24\u4e2agetter\u548csetter\u65b9\u6cd5\u7684\u4f18\u70b9\u662f\uff0c<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u958b\u767a\u8005\u5074\u3082\u5b9f\u88c5\u8ca0\u62c5\u304c\u6e1b\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u5411\u4e0a<\/ul>\n<p>\u7531\u4e8e\u8fd9\u4f1a\u4ea7\u751f\u8fde\u9501\u53cd\u5e94\uff0c\u53ef\u4ee5\u8bf4\u6ca1\u6709\u4e0d\u4f7f\u7528\u6ce8\u91ca\u7684\u9009\u62e9\u3002<\/p>\n<p>\u4e3a\u4e86\u907f\u514d\u504f\u79bb\u672c\u6587\u7684\u4e3b\u9898\uff0c\u6211\u4eec\u5c06\u7701\u7565\u5bf9\u6bcf\u4e2a\u6ce8\u91ca\u8fdb\u884c\u8be6\u7ec6\u89e3\u91ca\u3002<br \/>\n\u4ee5\u4e0b\u7f51\u7ad9\u4e0a\u6982\u62ec\u4e86\u6ce8\u91ca\u7684\u5217\u8868\u3002\u975e\u5e38\u65b9\u4fbf\u2026\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u8bf7\u770b\u4e0b\u9762\u7684\u6ce8\u91ca\u548c\u5b9e\u73b0\u7ec6\u8282\uff0c\u5e0c\u671b\u5bf9\u60a8\u7684\u5b66\u4e60\u6709\u6240\u5e2e\u52a9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example.demo.model<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.Column<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.Entity<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.GeneratedValue<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.GenerationType<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.Id<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.persistence.Table<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">lombok.Data<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ getter(), setter()\u3092\u81ea\u52d5\u751f\u6210\u3059\u308b\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/span>\r\n<span class=\"nd\">@Data<\/span>\r\n<span class=\"c1\">\/\/ JPA\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3059\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/span>\r\n<span class=\"nd\">@Entity<\/span>\r\n<span class=\"c1\">\/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306b\u5bfe\u5fdc\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u540d\u3092\u6307\u5b9a\u3002 \"forums\"\u90e8\u5206\u306fPostgreSQL\u3067\u4f5c\u6210\u3057\u305f\u30c6\u30fc\u30d6\u30eb\u540d<\/span>\r\n<span class=\"nd\">@Table<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"forums\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Forum<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"c1\">\/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u4e3b\u30ad\u30fc\u3092\u6307\u5b9a\u3002\u4eca\u56de\u3067\u3042\u308c\u3070 \"id\" \u30ab\u30e9\u30e0\u306b\u306a\u308b<\/span>\r\n\t<span class=\"nd\">@Id<\/span>\r\n    <span class=\"c1\">\/\/ \u30aa\u30fc\u30c8\u30a4\u30f3\u30af\u30ea\u30e1\u30f3\u30c8\u3002\u4e3b\u30ad\u30fc \"id\" \u306e\u5024\u3092\u81ea\u52d5\u63a1\u756a\u3059\u308b<\/span>\r\n\t<span class=\"nd\">@GeneratedValue<\/span><span class=\"o\">(<\/span><span class=\"n\">strategy<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">GenerationType<\/span><span class=\"o\">.<\/span><span class=\"na\">IDENTITY<\/span><span class=\"o\">)<\/span>\r\n\r\n    <span class=\"c1\">\/\/ \u30ab\u30e9\u30e0\u306b\u540d\u524d\u3092\u4ed8\u4e0e<\/span>\r\n\t<span class=\"nd\">@Column<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"id\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">private<\/span> <span class=\"nc\">Integer<\/span> <span class=\"n\">id<\/span><span class=\"o\">;<\/span>\r\n\r\n\t<span class=\"nd\">@Column<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"title\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">title<\/span><span class=\"o\">;<\/span>\r\n\r\n\t<span class=\"nd\">@Column<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"body\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">body<\/span><span class=\"o\">;<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u8fd9\u6837\uff0c\u6a21\u578b\u7684\u5b9e\u73b0\u5c31\u5b8c\u6210\u4e86\uff01<\/p>\n<h3>\u25ce\u521b\u5efa\u63a7\u5236\u5668<\/h3>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u521b\u5efaController\u3002<\/p>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2aForumController\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example.demo.controller<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.beans.factory.annotation.Autowired<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.stereotype.Controller<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.ui.Model<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.GetMapping<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.ModelAttribute<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.PostMapping<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.demo.model.Forum<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.demo.service.ForumService<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Controller<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">ForumController<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"c1\">\/\/ \u7279\u5b9a\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4ed8\u4e0e\u3057\u305f\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f7f\u7528\u53ef\u80fd\u306b\u3059\u308b(\u4f9d\u5b58\u6027\u6ce8\u5165\u30fbDI) <\/span>\r\n\t<span class=\"nd\">@Autowired<\/span>\r\n\t<span class=\"nc\">ForumService<\/span> <span class=\"n\">service<\/span><span class=\"o\">;<\/span>\r\n\r\n\t<span class=\"c1\">\/\/ \u30c8\u30c3\u30d7\u30da\u30fc\u30b8(\u30d5\u30a9\u30fc\u30e0\u304c\u3042\u308b\u753b\u9762)<\/span>\r\n    <span class=\"c1\">\/\/ HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u306e\"GET\"\u3092\u53d7\u3051\u4ed8\u3051\u308b\u30e1\u30bd\u30c3\u30c9\u306b\u4ed8\u4e0e\u3059\u308b\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/span>\r\n\t<span class=\"nd\">@GetMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">top<\/span><span class=\"o\">(<\/span><span class=\"nc\">Model<\/span> <span class=\"n\">model<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n\t\t<span class=\"n\">model<\/span><span class=\"o\">.<\/span><span class=\"na\">addAttribute<\/span><span class=\"o\">(<\/span><span class=\"s\">\"forum\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Forum<\/span><span class=\"o\">());<\/span>\r\n\t\t<span class=\"k\">return<\/span> <span class=\"s\">\"top\"<\/span><span class=\"o\">;<\/span>\r\n\t<span class=\"o\">}<\/span>\r\n\r\n\t<span class=\"c1\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u767b\u9332<\/span>\r\n    <span class=\"c1\">\/\/ HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u306e\"POST\"\u3092\u53d7\u3051\u4ed8\u3051\u308b\u30e1\u30bd\u30c3\u30c9\u306b\u4ed8\u4e0e\u3059\u308b\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3<\/span>\r\n\t<span class=\"nd\">@PostMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/create\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">saveForum<\/span><span class=\"o\">(<\/span><span class=\"nd\">@ModelAttribute<\/span> <span class=\"nc\">Forum<\/span> <span class=\"n\">forum<\/span><span class=\"o\">,<\/span> <span class=\"nc\">Model<\/span> <span class=\"n\">model<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n\r\n        <span class=\"c1\">\/\/ service\u30af\u30e9\u30b9\u306einsert\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3057\u3001DB\u306b\u5165\u529b\u5024\u3092\u767b\u9332<\/span>\r\n\t\t<span class=\"n\">service<\/span><span class=\"o\">.<\/span><span class=\"na\">insert<\/span><span class=\"o\">(<\/span><span class=\"n\">forum<\/span><span class=\"o\">);<\/span>\r\n\t\t<span class=\"k\">return<\/span> <span class=\"s\">\"result\"<\/span><span class=\"o\">;<\/span>\r\n\t<span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h4>\u8bf4\u660e<\/h4>\n<p>\u672c\u6b21\u4eae\u76f8\u7684\u6ce8\u89e3\u5305\u62ec @Autowired\u3001@GetMapping\u3001@PostMapping\u3002<\/p>\n<p>\u5c24\u5176\u662f@Autowired\u8fd9\u4e00\u70b9\uff0c\u5b83\u662f\u4f7f\u7528DI\uff08\u4f9d\u8d56\u6ce8\u5165\uff09\u8fdb\u884c\u7684\u3002\u901a\u8fc7\u7ed9\u7279\u5b9a\u6ce8\u89e3\uff08\u6bd4\u5982@Service\u548c\u540e\u9762\u63d0\u5230\u7684@Repository\uff09\u6807\u8bb0\u7684\u7c7b\u7684\u5b9e\u4f8b\uff0c\u53ef\u4ee5\u901a\u8fc7\u5e26\u6709@Autowired\u6ce8\u89e3\u7684\u5b57\u6bb5\u53d8\u91cf\u7b49\u6765\u83b7\u53d6\u3002<\/p>\n<p>\u8ba9\u6211\u4eec\u6765\u770b\u4e00\u4e0b\u7528\u4e8e\u663e\u793a\u9996\u9875\u7684top\u65b9\u6cd5\u3002<\/p>\n<pre class=\"post-pre\"><code>\t<span class=\"nd\">@GetMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">top<\/span><span class=\"o\">(<\/span><span class=\"nc\">Model<\/span> <span class=\"n\">model<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n\t\t<span class=\"n\">model<\/span><span class=\"o\">.<\/span><span class=\"na\">addAttribute<\/span><span class=\"o\">(<\/span><span class=\"s\">\"forum\"<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Forum<\/span><span class=\"o\">());<\/span>\r\n\t\t<span class=\"k\">return<\/span> <span class=\"s\">\"top\"<\/span><span class=\"o\">;<\/span>\r\n\t<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5f53\u901a\u8fc7@GetMapping\u6ce8\u89e3\u6307\u5b9a\u7684URL\u6536\u5230GET\u8bf7\u6c42\u65f6\uff0c\u8be5\u65b9\u6cd5\u4f1a\u88ab\u6267\u884c\u3002\u4f8b\u5982\uff1a\u8bbf\u95eelocalhost:8080\/\u3002<\/p>\n<p>model.addAttribute(&#8220;forum&#8221;, new Forum());\u7528\u4e8e\u5728\u89c6\u56fe\u4e2d\u4f20\u9012\u503c\u3002<br \/>\naddAttribute\u65b9\u6cd5\u7684\u53c2\u6570\u8bbe\u7f6e\u65b9\u5f0f\u662f\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u8bbe\u7f6e\u5728\u89c6\u56fe\u4e2d\u4f7f\u7528\u7684\u53d8\u91cf\u540d\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u8bbe\u7f6e\u8981\u4f20\u9012\u7ed9\u89c6\u56fe\u7684\u503c\u3002<\/p>\n<p>\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u53d8\u91cfforum\u4e2d\u5b58\u50a8\u4e86\u4e00\u4e2aForum\u7c7b\u7684\u7a7a\u5b9e\u4f8b\uff0c\u5e76\u5c06\u5176\u8bbe\u7f6e\u4e3a\u89c6\u56fe\u5bf9\u8c61\u90e8\u5206\uff08\u5728\u4e0b\u6587\u4e2d\u4ecb\u7ecd\u7684View\uff09\uff0c\u4ece\u800c\u53ef\u4ee5\u5b58\u50a8\u8868\u5355\u7684\u503c\u3002<\/p>\n<p>\u7136\u540e\u5728\u8fd4\u56de\u503c\u4e2d\u6307\u5b9a\u4e86top\uff0c\u8fd9\u4e2a\u8fd4\u56de\u503c\u7684\u540d\u79f0\u5c06\u6210\u4e3aView\u6587\u4ef6\u7684\u6587\u4ef6\u540d\u3002\u8fd9\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u70b9\u3002<\/p>\n<p>\u603b\u7ed3\u6d41\u7684\u5f62\u8c61\uff0c<\/p>\n<pre class=\"post-pre\"><code>1. \u30eb\u30fc\u30c8\u30d1\u30b9\u306bHTTP\u30ea\u30af\u30a8\u30b9\u30c8(GET)\u304c\u9001\u3089\u308c\u308b\r\n2. model.addAttribute\u3067View\u306b\u30d5\u30a9\u30fc\u30e0\u306e\u7a7a\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u6e21\u3059\r\n3. top.html\u3092\u8868\u793a\u3059\u308b\r\n<\/code><\/pre>\n<p>\u8fd9\u6837\u5c31\u53ef\u4ee5\u5728top.html\u4e2d\u521b\u5efa\u8868\u5355\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u770b\u4e00\u4e0b\u5fc5\u987b\u8fdb\u884c\u6570\u636e\u5e93\u6ce8\u518c\u7684\u65b9\u6cd5saveForum\u3002<\/p>\n<pre class=\"post-pre\"><code>\t<span class=\"nd\">@PostMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/create\"<\/span><span class=\"o\">)<\/span>\r\n\t<span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">saveForum<\/span><span class=\"o\">(<\/span><span class=\"nd\">@ModelAttribute<\/span> <span class=\"nc\">Forum<\/span> <span class=\"n\">forum<\/span><span class=\"o\">,<\/span> <span class=\"nc\">Model<\/span> <span class=\"n\">model<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n\r\n\t\t<span class=\"n\">service<\/span><span class=\"o\">.<\/span><span class=\"na\">insert<\/span><span class=\"o\">(<\/span><span class=\"n\">forum<\/span><span class=\"o\">);<\/span>\r\n\t\t<span class=\"k\">return<\/span> <span class=\"s\">\"result\"<\/span><span class=\"o\">;<\/span>\r\n\t<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5927\u90e8\u5206\u4e0e\u4e4b\u524d\u6240\u63d0\u5230\u7684top\u65b9\u6cd5\u6ca1\u6709\u4ec0\u4e48\u4e0d\u540c\u3002\u53ea\u4ecb\u7ecd\u65b0\u51fa\u73b0\u7684\u5185\u5bb9\u3002<\/p>\n<p>@ModelAttribute<br \/>\nsaveForum\u30e1\u30bd\u30c3\u30c9\u306e\u5f15\u6570\u306b@ModelAttribute\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u304c\u4ed8\u4e0e\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\n\u3053\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u304c\u4ed8\u4e0e\u3055\u308c\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u30d5\u30a9\u30fc\u30e0\u3067\u5165\u529b\u3057\u305f\u5024\u3092\u53d7\u3051\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n\u5f15\u6570\u306eforum\u306f\u3001\u5f8c\u8ff0\u306etop.html\u306eView\u3067\u4f5c\u6210\u3057\u305f\u30d5\u30a9\u30fc\u30e0\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u90e8\u5206\u306b\u5165\u3063\u3066\u3044\u308b\u30c7\u30fc\u30bf\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u5728\u4ee5\u4e0b\u7684<\/p>\n<form>\u6807\u7b7e\u4e2d\uff0cth:object\u7684\u503c\u662fforum\u3002<br \/>\n\u5173\u4e8eView\u7684\u89e3\u91ca\u7a0d\u540e\u4f1a\u8be6\u7ec6\u8bf4\u660e\uff0c\u6240\u4ee5\u53ea\u9700\u77e5\u9053\u5b83\u63a5\u6536\u4e86\u8868\u5355\u4e2d\u8f93\u5165\u7684\u503c\u5373\u53ef\uff0c\u4e0d\u4f1a\u6709\u95ee\u9898\uff01<\/p>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;form<\/span> <span class=\"na\">th:action=<\/span><span class=\"s\">\"@{\/create}\"<\/span> <span class=\"na\">th:object=<\/span><span class=\"s\">\"${forum}\"<\/span> <span class=\"na\">method=<\/span><span class=\"s\">\"post\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<\/code><\/pre>\n<p>service.insert(forum);<br \/>\n\u3053\u3053\u3067\u306fService\u30af\u30e9\u30b9\u306einsert\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3057\u3066\u3044\u307e\u3059\u3002\u524d\u8ff0\u306eDI(\u4f9d\u5b58\u6027\u6ce8\u5165)\u306b\u3088\u3063\u3066\u547c\u3073\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002<br \/>\ninsert()\u306e\u5f15\u6570\u306b\u30d5\u30a9\u30fc\u30e0\u306b\u5165\u529b\u3055\u308c\u305f\u5024\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001DB\u3078\u767b\u9332\u51e6\u7406\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br \/>\ninsert()\u30e1\u30bd\u30c3\u30c9\u306e\u8a73\u3057\u3044\u5185\u5bb9\u306b\u3064\u3044\u3066\u3082\u3001\u5f8c\u307b\u3069Service\u30af\u30e9\u30b9\u306e\u7ae0\u3067\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<p>\u5f53\u5b8c\u6210\u5411\u6570\u636e\u5e93\u7684\u6ce8\u518c\u5904\u7406\u540e\uff0c\u6211\u4eec\u8bbe\u7f6e\u5c06\u8f6c\u5230result.html\u9875\u9762\u3002<\/p>\n<p>\u63a7\u5236\u5668\u7684\u8bf4\u660e\u5c31\u662f\u8fd9\u6837\u4e86\u3002\u771f\u96be\u554a&#8230;<\/p>\n<h3>\u25ce\u521b\u5efa\u89c6\u56fe<\/h3>\n<p>\u63a5\u4e0b\u6765\u6211\u4eec\u4f1a\u521b\u5efa\u4e00\u4e2a\u89c6\u56fe\u3002<\/p>\n<p>\u901a\u8fc7\u5728Spring Boot\u4e2d\u5c06\u89c6\u56fe\u6587\u4ef6\u653e\u7f6e\u5728src\/resources\/templates\u76ee\u5f55\u4e0b\uff0c\u53ef\u4ee5\u5b9e\u73b0\u9875\u9762\u7684\u663e\u793a\u3002<\/p>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u521b\u5efa\u4e00\u4e2a\u9876\u5c42\u9875\u9762\u6765\u5c55\u793a\u8868\u5355\u754c\u9762\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;!DOCTYPE HTML&gt;<\/span>\r\n<span class=\"nt\">&lt;html<\/span> <span class=\"na\">xmlns:th=<\/span><span class=\"s\">\"http:\/\/www.thymeleaf.org\"<\/span><span class=\"nt\">&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;head&gt;<\/span>\r\n\t<span class=\"nt\">&lt;title&gt;<\/span>Index<span class=\"nt\">&lt;\/title&gt;<\/span>\r\n\t<span class=\"nt\">&lt;meta<\/span> <span class=\"na\">http-equiv=<\/span><span class=\"s\">\"Content-Type\"<\/span> <span class=\"na\">content=<\/span><span class=\"s\">\"text\/html; charset=UTF-8\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n<span class=\"nt\">&lt;\/head&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;body&gt;<\/span>\r\n\t<span class=\"nt\">&lt;h2&gt;<\/span>\u3010New Post\u3011<span class=\"nt\">&lt;\/h2&gt;<\/span>\r\n\t<span class=\"nt\">&lt;form<\/span> <span class=\"na\">th:action=<\/span><span class=\"s\">\"@{\/create}\"<\/span> <span class=\"na\">th:object=<\/span><span class=\"s\">\"${forum}\"<\/span> <span class=\"na\">method=<\/span><span class=\"s\">\"post\"<\/span><span class=\"nt\">&gt;<\/span>\r\n\r\n\t\t<span class=\"nt\">&lt;label&gt;<\/span>Title<span class=\"nt\">&lt;\/label&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;p&gt;&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">th:field=<\/span><span class=\"s\">\"*{title}\"<\/span> <span class=\"nt\">\/&gt;&lt;\/p&gt;<\/span>\r\n\r\n\t\t<span class=\"nt\">&lt;label&gt;<\/span>Body<span class=\"nt\">&lt;\/label&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;p&gt;&lt;textarea<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"form\"<\/span> <span class=\"na\">th:field=<\/span><span class=\"s\">\"*{body}\"<\/span><span class=\"nt\">&gt;&lt;\/textarea&gt;&lt;\/p&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;p&gt;&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"submit\"<\/span> <span class=\"na\">value=<\/span><span class=\"s\">\"\u9001\u4fe1\"<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"button\"<\/span> <span class=\"nt\">\/&gt;&lt;\/p&gt;<\/span>\r\n\t<span class=\"nt\">&lt;\/form&gt;<\/span>\r\n<span class=\"nt\">&lt;\/body&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;\/html&gt;<\/span>\r\n<\/code><\/pre>\n<p>\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u4f1a\u8bbe\u8ba1\u4e00\u4e2a\u7528\u4e8e\u663e\u793a\u53d1\u5e03\u5185\u5bb9\u7684\u754c\u9762\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;!DOCTYPE HTML&gt;<\/span>\r\n<span class=\"nt\">&lt;html&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;head&gt;<\/span>\r\n\t<span class=\"nt\">&lt;title&gt;<\/span>Result View<span class=\"nt\">&lt;\/title&gt;<\/span>\r\n\t<span class=\"nt\">&lt;meta<\/span> <span class=\"na\">http-equiv=<\/span><span class=\"s\">\"Content-Type\"<\/span> <span class=\"na\">content=<\/span><span class=\"s\">\"text\/html; charset=UTF-8\"<\/span> <span class=\"nt\">\/&gt;<\/span>\r\n<span class=\"nt\">&lt;\/head&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;body&gt;<\/span>\r\n\t<span class=\"nt\">&lt;div&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;p&gt;<\/span>[[${forum.title}]]<span class=\"nt\">&lt;\/p&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;p&gt;<\/span>[[${forum.body}]]<span class=\"nt\">&lt;\/p&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;p&gt;&lt;a<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"http:\/\/localhost:8080\/\"<\/span><span class=\"nt\">&gt;<\/span>\u4e00\u89a7\u753b\u9762\u3078<span class=\"nt\">&lt;\/a&gt;&lt;\/p&gt;<\/span>\r\n\t<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;\/body&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;\/html&gt;<\/span>\r\n<\/code><\/pre>\n<h4>\u89e3\u8aaa &#8211;&gt; \u8bf4\u660e<\/h4>\n<p>\u9996\u5148\u6211\u4eec\u4ece\u9996\u9875\u5f00\u59cb\u770b\u3002<\/p>\n<p>\u672c\u6b21\u4f7f\u7528thymeleaf\u4f5c\u4e3a\u6a21\u677f\u5f15\u64ce\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;html<\/span> <span class=\"na\">xmlns:th=<\/span><span class=\"s\">\"http:\/\/www.thymeleaf.org\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u91cc\uff0c\u5c06thymeleaf\u7684\u5c5e\u6027\u547d\u540d\u4e3ath\uff0c\u5e76\u58f0\u660e\u548c\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u3002<\/p>\n<p>\u501f\u52a9thymeleaf\uff0c\u6211\u4eec\u53ef\u4ee5\u7b80\u6d01\u5730\u5b9e\u73b0\u4e0e\u8868\u5355\u76f8\u5173\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;form<\/span> <span class=\"na\">th:action=<\/span><span class=\"s\">\"@{\/create}\"<\/span> <span class=\"na\">th:object=<\/span><span class=\"s\">\"${forum}\"<\/span> <span class=\"na\">method=<\/span><span class=\"s\">\"post\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<\/code><\/pre>\n<div>\n<div class=\"post-table\">th:actionth:objectmethod\u30d5\u30a9\u30fc\u30e0\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a(Controller\u5074\u3067\u4f7f\u7528)${}\u5185\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u30d5\u30a9\u30fc\u30e0\u5165\u529b\u5024\u304c\u683c\u7d0dHTTP\u30e1\u30bd\u30c3\u30c9\u3092\u6307\u5b9a<\/div>\n<\/div>\n<p>\u6b64\u5916\uff0c\u901a\u8fc7\u4f7f\u7528th:field\u6765\u5b8c\u6210\u8868\u5355\u8f93\u5165\u90e8\u5206\uff0c\u53ef\u4ee5\u5c06\u503c\u5b58\u50a8\u5728\u5bf9\u8c61\u7684\u5b57\u6bb5\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;p&gt;&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">th:field=<\/span><span class=\"s\">\"*{title}\"<\/span> <span class=\"nt\">\/&gt;&lt;\/p&gt;<\/span>\r\n<span class=\"nt\">&lt;p&gt;&lt;textarea<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"form\"<\/span> <span class=\"na\">th:field=<\/span><span class=\"s\">\"*{body}\"<\/span><span class=\"nt\">&gt;&lt;\/textarea&gt;&lt;\/p&gt;<\/span>\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u91cc\u63d0\u5230\u7684&#8221;\u5b57\u6bb5&#8221;\u662f\u6307\u5728\u6a21\u578bForum.java\u4e2d\u7684\u5b57\u6bb5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ \u30d5\u30a3\u30fc\u30eb\u30c9<\/span>\r\n<span class=\"nd\">@Column<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"id\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"kd\">private<\/span> <span class=\"nc\">Integer<\/span> <span class=\"n\">id<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Column<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"title\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">title<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Column<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"body\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">body<\/span><span class=\"o\">;<\/span>\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0a\u5c31\u662f\u9996\u9875\u7684\u5b9e\u73b0\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u8981\u770b\u7684\u662f\u7ed3\u679c\u663e\u793a\u5c4f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;p&gt;<\/span>[[${forum.title}]]<span class=\"nt\">&lt;\/p&gt;<\/span>\r\n<span class=\"nt\">&lt;p&gt;<\/span>[[${forum.body}]]<span class=\"nt\">&lt;\/p&gt;<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u89c9\u5f97\u4f60\u53ef\u80fd\u5df2\u7ecf\u7565\u6709\u5bdf\u89c9\uff0c\u4e0a\u9762\u7684\u90e8\u5206\u5c55\u793a\u4e86\u4f60\u5728\u8f93\u5165\u6846\u4e2d\u8f93\u5165\u7684\u5185\u5bb9\u3002<\/p>\n<p>\u4ee5\u4e0a\u662f\u89c6\u56fe\u7684\u5b9e\u73b0\u3002\u610f\u5916\u5730\u5f88\u7b80\u5355\u3002<\/p>\n<h3>\u25ce\u5efa\u7acb\u4ed3\u5e93<\/h3>\n<p>\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2a\u4ed3\u5e93\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example.demo.repository<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.data.jpa.repository.JpaRepository<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.stereotype.Repository<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.demo.model.Forum<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Repository<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">interface<\/span> <span class=\"nc\">ForumRepository<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">JpaRepository<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Forum<\/span><span class=\"o\">,<\/span> <span class=\"nc\">Integer<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u521b\u5efa\u4e00\u4e2a\u7ee7\u627fJpaRepository\u7684\u63a5\u53e3\uff0c\u7528\u4e8e\u64cd\u4f5c\u6570\u636e\u5e93\u3002<br \/>\n\u901a\u8fc7\u7ee7\u627fJpaRepository\uff0c\u53ef\u4ee5\u81ea\u52a8\u751f\u6210\u4e0e\u6570\u636e\u64cd\u4f5c\u76f8\u5173\u7684CRUD\uff08\u521b\u5efa\u3001\u83b7\u53d6\u3001\u66f4\u65b0\u3001\u5220\u9664\uff09\u65b9\u6cd5\u3002\u975e\u5e38\u65b9\u4fbf\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\u521b\u5efa\u4e00\u4e2aService\u3002<\/p>\n<h3>\u25ce\u670d\u52a1\u5236\u4f5c<\/h3>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example.demo.service<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.List<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.beans.factory.annotation.Autowired<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.stereotype.Service<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.demo.model.Forum<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.demo.repository.ForumRepository<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">jakarta.transaction.Transactional<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Service<\/span>\r\n<span class=\"nd\">@Transactional<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">ForumService<\/span> <span class=\"o\">{<\/span>\r\n\r\n\t<span class=\"nd\">@Autowired<\/span>\r\n\t<span class=\"nc\">ForumRepository<\/span> <span class=\"n\">repository<\/span><span class=\"o\">;<\/span>\r\n\r\n\t<span class=\"c1\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3088\u308a\u30d5\u30a9\u30fc\u30e9\u30e0(\u63b2\u793a\u677f)\u306e\u4e00\u89a7\u3092\u53d6\u5f97<\/span>\r\n\t<span class=\"kd\">public<\/span> <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Forum<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">findAll<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n\t\t<span class=\"k\">return<\/span> <span class=\"n\">repository<\/span><span class=\"o\">.<\/span><span class=\"na\">findAll<\/span><span class=\"o\">();<\/span>\r\n\t<span class=\"o\">}<\/span>\r\n\r\n\t<span class=\"c1\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5024\u3092\u767b\u9332<\/span>\r\n\t<span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">insert<\/span><span class=\"o\">(<\/span><span class=\"nc\">Forum<\/span> <span class=\"n\">forum<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n\t\t<span class=\"n\">repository<\/span><span class=\"o\">.<\/span><span class=\"na\">save<\/span><span class=\"o\">(<\/span><span class=\"n\">forum<\/span><span class=\"o\">);<\/span>\r\n\t<span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<\/code><\/pre>\n<h4>\u89e3\u91ca<\/h4>\n<p>\u8ba9\u6211\u4eec\u901a\u8fc7\u8fd9\u6b21\u65b0\u589e\u7684\u6ce8\u91ca\u6765\u770b\u4e00\u770b\u3002<\/p>\n<p>@Service \u6ce8\u89e3\u8868\u793a\u8be5\u7c7b\u662f\u4e00\u4e2a\u670d\u52a1\u7c7b\u3002<br \/>\n\u6b64\u5916\uff0c\u901a\u8fc7\u6dfb\u52a0 @Transactional \u6ce8\u89e3\u53ef\u4ee5\u8fdb\u884c\u6570\u636e\u5e93\u7684\u4e8b\u52a1\u63a7\u5236\uff08\u5728\u8fd9\u79cd\u5c0f\u89c4\u6a21\u5e94\u7528\u4e2d\u6beb\u65e0\u5fc5\u8981\u6027\uff09\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\u662f\u5173\u4e8e\u6570\u636e\u5e93\u64cd\u4f5c\u65b9\u6cd5\u7684\u90e8\u5206\u3002<br \/>\n\u5728`repository.findAll()`\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u901a\u8fc7`@Autowired`\u521b\u5efa\u7684ForumRepository\u5b9e\u4f8b\u6765\u8fdb\u884c\u68c0\u7d22\u6240\u6709\u8bb0\u5f55\u7684\u64cd\u4f5c\u3002\u8fd9\u53ef\u4ee5\u7528\u4e8e\u5728\u9700\u8981\u663e\u793a\u5df2\u6ce8\u518c\u6570\u636e\u7684\u60c5\u51b5\u4e0b\u3002\u4f46\u5728\u672c\u6b21\u60c5\u666f\u4e2d\u6211\u4eec\u4e0d\u4f1a\u4f7f\u7528\u5b83\u3002<\/p>\n<p>\u4f7f\u7528repository.save(forum)\u65b9\u6cd5\uff0c\u5c06\u5305\u542b\u8868\u5355\u8f93\u5165\u503c\u7684\u5bf9\u8c61\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\uff0c\u5e76\u5c06\u5176\u5b58\u50a8\u5230\u6570\u636e\u5e93\u4e2d\u3002<\/p>\n<p>\u670d\u52a1\u7684\u5b9e\u73b0\u548c\u89e3\u91ca\u5c31\u5230\u8fd9\u91cc\u3002\u73b0\u5728\u6240\u6709\u7684\u5b9e\u73b0\u90fd\u5df2\u7ecf\u5b8c\u6210\u4e86\u3002<\/p>\n<p>\u6700\u540e\u7684\u6811\u5f62\u7ed3\u6784\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code>demo\r\n\u2502  .classpath\r\n\u2502  .gitignore\r\n\u2502  .project\r\n\u2502  build.gradle\r\n\u2502  gradlew\r\n\u2502  gradlew.bat\r\n\u2502  HELP.md\r\n\u2502  settings.gradle\r\n\u2502\r\n\u251c\u2500.gradle\r\n\u2502  \u251c\u25007.6.1\r\n\u2502  \u2502  \u2502  gc.properties\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500checksums\r\n\u2502  \u2502  \u2502      checksums.lock\r\n\u2502  \u2502  \u2502      md5-checksums.bin\r\n\u2502  \u2502  \u2502      sha1-checksums.bin\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500dependencies-accessors\r\n\u2502  \u2502  \u2502      dependencies-accessors.lock\r\n\u2502  \u2502  \u2502      gc.properties\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500executionHistory\r\n\u2502  \u2502  \u2502      executionHistory.lock\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500fileChanges\r\n\u2502  \u2502  \u2502      last-build.bin\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500fileHashes\r\n\u2502  \u2502  \u2502      fileHashes.lock\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u2514\u2500vcsMetadata\r\n\u2502  \u251c\u2500buildOutputCleanup\r\n\u2502  \u2502      buildOutputCleanup.lock\r\n\u2502  \u2502      cache.properties\r\n\u2502  \u2502\r\n\u2502  \u2514\u2500vcs-1\r\n\u2502          gc.properties\r\n\u2502\r\n\u251c\u2500.settings\r\n\u2502      org.eclipse.buildship.core.prefs\r\n\u2502\r\n\u251c\u2500bin\r\n\u2502  \u251c\u2500main\r\n\u2502  \u2502  \u2502  application.properties\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500com\r\n\u2502  \u2502  \u2502  \u2514\u2500example\r\n\u2502  \u2502  \u2502      \u2514\u2500demo\r\n\u2502  \u2502  \u2502          \u2502  DemoApplication.class\r\n\u2502  \u2502  \u2502          \u2502\r\n\u2502  \u2502  \u2502          \u251c\u2500controller\r\n\u2502  \u2502  \u2502          \u2502      ForumController.class\r\n\u2502  \u2502  \u2502          \u2502\r\n\u2502  \u2502  \u2502          \u251c\u2500model\r\n\u2502  \u2502  \u2502          \u2502      Forum.class\r\n\u2502  \u2502  \u2502          \u2502\r\n\u2502  \u2502  \u2502          \u251c\u2500repository\r\n\u2502  \u2502  \u2502          \u2502      ForumRepository.class\r\n\u2502  \u2502  \u2502          \u2502\r\n\u2502  \u2502  \u2502          \u2514\u2500service\r\n\u2502  \u2502  \u2502                  ForumService.class\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u2514\u2500templates\r\n\u2502  \u2502          result.html\r\n\u2502  \u2502          top.html\r\n\u2502  \u2502\r\n\u2502  \u2514\u2500test\r\n\u2502      \u2514\u2500com\r\n\u2502          \u2514\u2500example\r\n\u2502              \u2514\u2500demo\r\n\u2502                      DemoApplicationTests.class\r\n\u2502\r\n\u251c\u2500gradle\r\n\u2502  \u2514\u2500wrapper\r\n\u2502          gradle-wrapper.jar\r\n\u2502          gradle-wrapper.properties\r\n\u2502\r\n\u2514\u2500src\r\n    \u251c\u2500main\r\n    \u2502  \u251c\u2500java\r\n    \u2502  \u2502  \u2514\u2500com\r\n    \u2502  \u2502      \u2514\u2500example\r\n    \u2502  \u2502          \u2514\u2500demo\r\n    \u2502  \u2502              \u2502  DemoApplication.java\r\n    \u2502  \u2502              \u2502\r\n    \u2502  \u2502              \u251c\u2500controller\r\n    \u2502  \u2502              \u2502      ForumController.java\r\n    \u2502  \u2502              \u2502\r\n    \u2502  \u2502              \u251c\u2500model\r\n    \u2502  \u2502              \u2502      Forum.java\r\n    \u2502  \u2502              \u2502\r\n    \u2502  \u2502              \u251c\u2500repository\r\n    \u2502  \u2502              \u2502      ForumRepository.java\r\n    \u2502  \u2502              \u2502\r\n    \u2502  \u2502              \u2514\u2500service\r\n    \u2502  \u2502                      ForumService.java\r\n    \u2502  \u2502\r\n    \u2502  \u2514\u2500resources\r\n    \u2502      \u2502  application.properties\r\n    \u2502      \u2502\r\n    \u2502      \u251c\u2500static\r\n    \u2502      \u2514\u2500templates\r\n    \u2502              result.html\r\n    \u2502              top.html\r\n    \u2502\r\n    \u2514\u2500test\r\n        \u2514\u2500java\r\n            \u2514\u2500com\r\n                \u2514\u2500example\r\n                    \u2514\u2500demo\r\n                            DemoApplicationTests.java\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u6700\u540e\u6765\u786e\u8ba4\u4e00\u4e0b\u662f\u5426\u6709\u52a8\u4f5c\u4e0a\u7684\u95ee\u9898\uff01<\/p>\n<h2>\u786e\u8ba4\u64cd\u4f5c<\/h2>\n<p>\u9996\u5148\u542f\u52a8\u670d\u52a1\u5668\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u5f15\u5bfc\u4eea\u8868\u677f\u6267\u884c\u670d\u52a1\u5668\u542f\u52a8\u64cd\u4f5c\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/170-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u5982\u679c\u5728\u63a7\u5236\u53f0\u4e0a\u51fa\u73b0\u4ee5\u4e0b\u8fd9\u6837\u7684\u63d0\u793a\uff0c\u8bf4\u660e\u542f\u52a8\u5df2\u5b8c\u6210\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/172-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u6211\u5c06\u8bbf\u95eelocalhost:8080\u3002\u6211\u8ba4\u4e3a\u4f1a\u663e\u793a\u5982\u4e0b\u9875\u9762\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/174-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u5728\u8868\u5355\u4e2d\u8f93\u5165\u503c\uff0c\u5e76\u70b9\u51fb\u63d0\u4ea4\u6309\u94ae\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/176-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u5982\u679c\u51fa\u73b0\u4ee5\u4e0b\u7684\u753b\u9762\uff0c\u5c31\u4ee3\u8868\u6ca1\u95ee\u9898\uff01<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/178-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u6211\u4eec\u6765\u786e\u8ba4\u4e00\u4e0b\u6570\u636e\u5e93\u4e2d\u662f\u5426\u6210\u529f\u6ce8\u518c\u4e86\u6570\u636e\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/180-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u95ee\u9898\u770b\u8d77\u6765\u6ca1\u6709\u3002<\/p>\n<p>\u4ee5\u4e0a\u5c31\u5b8c\u6210\u4e86\u4f7f\u7528Spring Boot \u00d7 PostgreSQL\u8fdb\u884c\u6ce8\u518c\u529f\u80fd\u3002\u8f9b\u82e6\u4e86\uff01<\/p>\n<h2>\u8bf7\u63d0\u4f9b\u66f4\u591a\u76f8\u5173\u4fe1\u606f.<\/h2>\n<p>&nbsp;<\/p>\n<h2>\u7ed3\u675f\u4e86<\/h2>\n<p>\u8fd9\u4e00\u6b21\u4f7f\u7528\u4e86Spring Boot\u548cPostgreSQL\uff0c\u5b9e\u73b0\u4e86\u6700\u57fa\u672c\u7684\u6570\u636e\u6ce8\u518c\u529f\u80fd\uff0c\u60a8\u89c9\u5f97\u5982\u4f55\uff1f<\/p>\n<p>\u5b9e\u9645\u4e0a\uff0c\u6211\u7b2c\u4e00\u6b21\u63a5\u89e6Spring Boot\u65f6\uff0c\u6b63\u5982\u524d\u9762\u6240\u8ff0\uff0c\u5b83\u4e0eRails\u7b49Web\u6846\u67b6\u975e\u5e38\u76f8\u4f3c\uff0c\u56e0\u6b64\u6211\u76f8\u5bf9\u5bb9\u6613\u7406\u89e3\u3002<br \/>\n\u4f46\u662f\u6700\u8fd1\u6211\u4e3b\u8981\u5728\u4f7f\u7528Next.js\u3001Go\u548cDocker\uff0c\u6240\u4ee5\u53ef\u80fd\u6682\u65f6\u4e0d\u9700\u8981\u518d\u78b0Spring Boot\u4e86\u5462\u3002<\/p>\n<p>\u5927\u5bb6\u4e00\u8d77\u6765\u7528Spring Boot\u5427\uff01<\/p>\n<\/form>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u8f9b\u82e6\u4e86\uff01\u6211\u662f@Keichan_15\uff01 \u6211\u60f3\u4f7f\u7528Spring Boot\u548cPostgreSQL\u5f00\u53d1\u4e00\u4e2a\u529f\u80fd\uff0c [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-40148","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Spring Boot\u548cPostgreSQL\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot\u548cpostgresql\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Spring Boot\u548cPostgreSQL\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u8f9b\u82e6\u4e86\uff01\u6211\u662f@Keichan_15\uff01 \u6211\u60f3\u4f7f\u7528Spring Boot\u548cPostgreSQL\u5f00\u53d1\u4e00\u4e2a\u529f\u80fd\uff0c [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot\u548cpostgresql\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-23T02:05:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-03T20:23:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/11-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/\",\"name\":\"\u4f7f\u7528Spring Boot\u548cPostgreSQL\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-01-23T02:05:47+00:00\",\"dateModified\":\"2024-05-03T20:23:25+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Spring Boot\u548cPostgreSQL\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Spring Boot\u548cPostgreSQL\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot\u548cpostgresql\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Spring Boot\u548cPostgreSQL\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09","og_description":"\u9996\u5148 \u8f9b\u82e6\u4e86\uff01\u6211\u662f@Keichan_15\uff01 \u6211\u60f3\u4f7f\u7528Spring Boot\u548cPostgreSQL\u5f00\u53d1\u4e00\u4e2a\u529f\u80fd\uff0c [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot\u548cpostgresql\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-01-23T02:05:47+00:00","article_modified_time":"2024-05-03T20:23:25+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3eb837434c4406c8bc98\/11-0.png"}],"author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"6 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/","name":"\u4f7f\u7528Spring Boot\u548cPostgreSQL\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-01-23T02:05:47+00:00","dateModified":"2024-05-03T20:23:25+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Spring Boot\u548cPostgreSQL\u8fdb\u884c\u6570\u636e\u6ce8\u518c\u7684\u6280\u5de7\uff08\u9644\u6709\u89e3\u91ca\uff09"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot%e5%92%8cpostgresql%e8%bf%9b%e8%a1%8c%e6%95%b0%e6%8d%ae%e6%b3%a8%e5%86%8c%e7%9a%84%e6%8a%80%e5%b7%a7%ef%bc%88%e9%99%84%e6%9c%89%e8%a7%a3%e9%87%8a%ef%bc%89%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=40148"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40148\/revisions"}],"predecessor-version":[{"id":96093,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40148\/revisions\/96093"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=40148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=40148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=40148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}