{"id":40326,"date":"2023-03-01T13:53:14","date_gmt":"2022-12-30T02:08:20","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/"},"modified":"2024-04-29T16:52:18","modified_gmt":"2024-04-29T08:52:18","slug":"%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/","title":{"rendered":"\u4f7f\u7528Spring Boot + Doma2\u8fdb\u884c2WaySQL\u7684\u6b65\u9aa4"},"content":{"rendered":"<h1>\u80cc\u666f<\/h1>\n<p>\u6700\u8fd1\uff0c\u7531\u4e8e\u6570\u636e\u8bbf\u95ee\u4f7f\u7528\u4e86S2JDBC\uff082WaySQL\uff09\u8fdb\u884c\u5f00\u53d1\uff0c\u6240\u4ee5\u5bf9\u4e8e\u50cfSpring Data JPA\u90a3\u6837\u5728\u7c7b\u6587\u4ef6\u4e2d\u4ee5\u5b57\u7b26\u4e32\u5f62\u5f0f&#8221;select column1,column2 from table&#8230;&#8221;\u7684\u5199\u6cd5\u611f\u5230\u6709\u4e9b\u4e0d\u81ea\u7136\u3002\u6b63\u597d\u5728\u8fd9\u4e2a\u65f6\u5019\u6709\u673a\u4f1a\u4e86\u89e3\u5230\u4e86Doma2\u7684\u5b58\u5728\uff0c\u4e8e\u662f\u60f3\u8bd5\u7740\u53bb\u5c1d\u8bd5\u4e00\u4e0b\u3002<br \/>\n\u987a\u4fbf\u8bf4\u4e00\u4e0b\uff0c\u76ee\u524d\u6211\u4eec\u7684\u73b0\u573a\u73af\u5883\u662f\u4f7f\u7528Spring Boot + MyBatis\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d1\u30c3\u3068\u898b\u305f\u611f\u3058xml\u3067\u30de\u30c3\u30d4\u30f3\u30b0\u66f8\u304f\u306e\u304c\u3081\u3093\u3069\u304f\u3055\u305d\u3046<\/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\">xml\u304cjava\u30af\u30e9\u30b9\u3078\u306e\u4f9d\u5b58\u3092\u6301\u3063\u3066\u3057\u307e\u3063\u3066\u3044\u308b(resultMap\u3068\u304b)\u3001etc<\/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\">java\u3068SQL\u3092\u5206\u96e2\u3057\u305f\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u305d\u3082\u305d\u3082\u3042\u307e\u308a\u8a73\u3057\u304f\u306a\u3044<\/ul>\n<p>\u6709\u8fd9\u4e2a\u539f\u56e0\uff0c\u6211\u8fd8\u662f\u89c9\u5f97\u4e60\u60ef\u4e86\u76842WaySQL\u6bd4\u8f83\u597d\u3002<br \/>\n\u203b\u5982\u679c\u5bf9\u5176\u4ed6O\/R\u6620\u5c04\u5668\u6709\u66f4\u6df1\u5165\u7684\u4e86\u89e3\u53ef\u80fd\u4f1a\u6539\u53d8\u601d\u8003\u65b9\u5f0f\u3002<\/p>\n<p>\u6b64\u5916\uff0c\u672c\u6b21\u5c06\u4f7f\u7528\u9ebb\u751f\u3055\u3093\u4ecb\u7ecd\u7684doma-spring-boot-starter\u81ea\u52a8\u914d\u7f6e\uff0c\u53ef\u5728Spring Boot\u4e2d\u4f7f\u7528Doma\u3002<br \/>\nhttps:\/\/github.com\/domaframework\/doma-spring-boot<br \/>\n\u901a\u8fc7\u6b64\u65b9\u5f0f\uff0c\u65e0\u9700\u8fdb\u884c\u4efb\u4f55\u914d\u7f6e\u5373\u53ef\u5728Spring Boot\u4e2d\u4f7f\u7528Doma\u3002<\/p>\n<h1>Doma\u662f\u4ec0\u4e48\u610f\u601d\uff1f<\/h1>\n<p>\u5b83\u662f\u4e00\u79cdO\/R\u6620\u5c04\u5668\uff0c\u7b80\u5355\u6765\u8bf4\u5c31\u662fO\/R Mapper\u3002\u7531\u4e8e\u4e0d\u4f9d\u8d56\u4e8eSeasar2\uff0c\u56e0\u6b64\u53ef\u4ee5\u4eceSpring\u6216\u5176\u4ed6\u6846\u67b6\u4e2d\u4f7f\u7528\u3002\u5f53\u7136\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u75282WaySQL\u3002<\/p>\n<p>Doma\u6709\u4e24\u4e2a\u4e3b\u8981\u7248\u672c\uff0c\u5206\u522b\u662f1\u548c2\u3002<br \/>\n\u7248\u672c1\u662f\u5728Java6\u4e0a\u7f16\u8bd1\u7684\uff0c\u53ef\u4ee5\u5728Java6\u3001Java7\u548cJava8\u4e0a\u8fd0\u884c\u3002<br \/>\n\u203bhttp:\/\/doma.seasar.org\/index.html<br \/>\n\u7248\u672c2\u662f\u5728Java8\u4e0a\u7f16\u8bd1\u7684\uff0c\u53ef\u4ee5\u5728Java8\u4e0a\u8fd0\u884c\u3002<br \/>\n\u203bhttp:\/\/doma.readthedocs.org\/ja\/stable\/<\/p>\n<h1>\u73af\u5883<\/h1>\n<p>Windows 10 &#8211; Windows \u5341<br \/>\nJDK 8 &#8211; JDK \u516b<br \/>\nSpring Boot 1.3.0 &#8211; Spring Boot \u4e00\u70b9\u4e09\u70b9\u96f6<br \/>\nSTS 3.7.2 &#8211; STS \u4e09\u70b9\u4e03\u70b9\u4e8c<br \/>\ndoma 2.5.1 &#8211; doma \u4e8c\u70b9\u4e94\u70b9\u4e00<br \/>\nH2DB 1.4.190 &#8211; H2DB \u4e00\u70b9\u56db\u70b9\u4e00\u4e5d\u96f6<br \/>\nMaven 3.3.3 &#8211; Maven \u4e09\u70b9\u4e09\u70b9\u4e09<\/p>\n<h1>\u6211\u6240\u53c2\u8003\u7684\u8d44\u6599<\/h1>\n<p>https:\/\/github.com\/domaframework\/spring-boot-sample \u53ef\u5728\u6b64\u5904\u627e\u5230domaframework\u7684spring-boot-sample\u9879\u76ee\u3002<br \/>\nhttp:\/\/doma.seasar.org\/ \u60a8\u53ef\u4ee5\u5728\u8fd9\u91cc\u8bbf\u95eedoma.seasar.org\u7f51\u7ad9\u3002<br \/>\nhttp:\/\/doma.readthedocs.org\/ja\/stable\/ \u4f60\u53ef\u4ee5\u5728\u8fd9\u91cc\u8bbf\u95eedoma\u7684readthedocs.org\u7f51\u7ad9\u7684\u65e5\u6587\u7248\u672c\uff0c\u8be5\u7248\u672c\u4e3a\u7a33\u5b9a\u7248\u672c\u3002<\/p>\n<h1>\u5236\u4f5c\u7684\u4e1c\u897f<\/h1>\n<p>\u6211\u5011\u5c07\u6839\u64da\u66f8\u7c4d\u300a\u521d\u3081\u3066\u306eSpring Boot\u300b\u5275\u5efa\u4e00\u500b\u7c21\u55ae\u7684RestAPI\u3002\u53e6\u5916\uff0c\u6211\u5011\u7684\u793a\u4f8b\u539f\u59cb\u78bc\u5df2\u7d93\u653e\u5728\u4ee5\u4e0b\u4f4d\u7f6e\uff1ahttps:\/\/github.com\/kenichi-nagaoka\/Doma2-SpringBoot<\/p>\n<h1>\u7ec4\u6210<\/h1>\n<p>\u6211\u5011\u6703\u6309\u7167\u4ee5\u4e0b\u7684\u7d50\u69cb\u5b89\u6392\u3002<\/p>\n<pre class=\"post-pre\"><code>\u2502  pom.xml\r\n\u251c\u2500src\r\n\u2502  \u251c\u2500main\r\n\u2502  \u2502  \u251c\u2500java\r\n\u2502  \u2502  \u2502  \u2514\u2500com\r\n\u2502  \u2502  \u2502      \u2514\u2500example\r\n\u2502  \u2502  \u2502          \u2502  Application.java\r\n\u2502  \u2502  \u2502          \u2502\r\n\u2502  \u2502  \u2502          \u251c\u2500controller\r\n\u2502  \u2502  \u2502          \u2502      CustomerController.java\r\n\u2502  \u2502  \u2502          \u2502\r\n\u2502  \u2502  \u2502          \u251c\u2500model\r\n\u2502  \u2502  \u2502          \u2502      Customer.java\r\n\u2502  \u2502  \u2502          \u2502\r\n\u2502  \u2502  \u2502          \u251c\u2500repository\r\n\u2502  \u2502  \u2502          \u2502      CustomerRepository.java\r\n\u2502  \u2502  \u2502          \u2502\r\n\u2502  \u2502  \u2502          \u2514\u2500service\r\n\u2502  \u2502  \u2502                  CustomerService.java\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u251c\u2500resources\r\n\u2502  \u2502  \u2502  \u2502  application.properties\r\n\u2502  \u2502  \u2502  \u2502  data.sql\r\n\u2502  \u2502  \u2502  \u2502  schema.sql\r\n\u2502  \u2502  \u2502  \u2502\r\n\u2502  \u2502  \u2502  \u2514\u2500META-INF\r\n\u2502  \u2502  \u2502      \u2514\u2500com\r\n\u2502  \u2502  \u2502          \u2514\u2500example\r\n\u2502  \u2502  \u2502              \u2514\u2500repository\r\n\u2502  \u2502  \u2502                  \u2514\u2500CustomerRepository\r\n\u2502  \u2502  \u2502                          selectAll.sql\r\n\u2502  \u2502  \u2502\r\n\u2502  \u2502  \u2514\u2500webapp\r\n\u2502  \u2514\u2500test\r\n\u2502      \u2514\u2500java\r\n\u2502          \u2514\u2500com\r\n\u2502              \u2514\u2500example\r\n\u2502                      ApplicationTests.java\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n    xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"&gt;\r\n    &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\r\n\r\n    &lt;groupId&gt;com.example&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;doma-cooperation&lt;\/artifactId&gt;\r\n    &lt;version&gt;1.0.0-SNAPSHOT&lt;\/version&gt;\r\n    &lt;packaging&gt;jar&lt;\/packaging&gt;\r\n    &lt;description&gt;Demo project for Spring Boot - Doma&lt;\/description&gt;\r\n\r\n    &lt;parent&gt;\r\n        &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;spring-boot-starter-parent&lt;\/artifactId&gt;\r\n        &lt;version&gt;1.3.0.RELEASE&lt;\/version&gt;\r\n    &lt;\/parent&gt;\r\n\r\n    &lt;repositories&gt;\r\n        &lt;repository&gt;\r\n            &lt;id&gt;sonatype-snapshots&lt;\/id&gt;\r\n            &lt;name&gt;Sonatype Snapshots&lt;\/name&gt;\r\n            &lt;url&gt;https:\/\/oss.sonatype.org\/content\/repositories\/snapshots&lt;\/url&gt;\r\n            &lt;snapshots&gt;\r\n                &lt;enabled&gt;true&lt;\/enabled&gt;\r\n            &lt;\/snapshots&gt;\r\n        &lt;\/repository&gt;\r\n    &lt;\/repositories&gt;\r\n\r\n    &lt;properties&gt;\r\n        &lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\r\n        &lt;java.version&gt;1.8&lt;\/java.version&gt;\r\n    &lt;\/properties&gt;\r\n\r\n    &lt;dependencies&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-boot-starter-tomcat&lt;\/artifactId&gt;\r\n            &lt;scope&gt;provided&lt;\/scope&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;spring-boot-starter-test&lt;\/artifactId&gt;\r\n            &lt;scope&gt;test&lt;\/scope&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;!-- \u5192\u982d\u3067\u3082\u8ff0\u3079\u305f\u901a\u308a\u4eca\u56deDoma\u3068\u306e\u9023\u643a\u306f\u4ee5\u4e0b\u3092\u5229\u7528\u3057\u307e\u3057\u305f\u3001\u3053\u308c\u3092\u4f9d\u5b58\u95a2\u4fc2\u306b\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u63a8\u79fb\u7684\u4f9d\u5b58\u3067Doma\u3082\u4f7f\u3048\u307e\u3059 --&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.seasar.doma.boot&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;doma-spring-boot-starter&lt;\/artifactId&gt;\r\n            &lt;version&gt;1.0.0-SNAPSHOT&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;com.h2database&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;h2&lt;\/artifactId&gt;\r\n            &lt;scope&gt;runtime&lt;\/scope&gt;\r\n        &lt;\/dependency&gt;\r\n    &lt;\/dependencies&gt;\r\n&lt;\/project&gt;\r\n<\/code><\/pre>\n<h1>\u6570\u636e\u8868\u5b9a\u4e49<\/h1>\n<p>\u5f53\u4f7f\u7528Spring Boot\u65f6\uff0c\u5982\u679c\u5728\u7c7b\u8def\u5f84\u4e0b\uff08src\/main\/resources\u4e0b\uff09\u5b58\u5728\u4ee5\u4e0b\u6587\u4ef6\uff0c\u5b83\u5c06\u5728\u542f\u52a8\u65f6\u81ea\u52a8\u6267\u884c\uff1a<br \/>\n1. \u6267\u884cschema-(platform).sql\u6587\u4ef6<br \/>\n2. \u6267\u884cschema.sql\u6587\u4ef6<br \/>\n3. \u6267\u884cdata-(platform).sql\u6587\u4ef6<br \/>\n4. \u6267\u884cdata.sql\u6587\u4ef6<br \/>\n\u672c\u6b21\u5c06\u4f7f\u7528H2\u6570\u636e\u5e93\u8fdb\u884c\u5185\u5b58\u4e2d\u7684\u6570\u636e\u64cd\u4f5c\u3002\u56e0\u6b64\uff0c\u5728\u542f\u52a8\u65f6\u5c06\u521b\u5efa\u8868\u683c\u5e76\u63d2\u5165\u6570\u636e\u3002<\/p>\n<pre class=\"post-pre\"><code>CREATE table IF NOT EXISTS customers(id int primary key, name varchar(30));\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>INSERT INTO customers(id, name) VALUES(1, 'JAY-Z');\r\nINSERT INTO customers(id, name) VALUES(2, 'NAS');\r\nINSERT INTO customers(id, name) VALUES(3, 'DMX');\r\nINSERT INTO customers(id, name) VALUES(4, '2PAC');\r\n<\/code><\/pre>\n<h1>Application.java \u7684\u6c49\u8bed\u91ca\u4e49\u53ef\u4ee5\u662f &#8220;\u5e94\u7528\u7a0b\u5e8f.java&#8221;\u3002<\/h1>\n<p>\u8fd9\u662f\u4e00\u4e2a\u4f5c\u4e3a\u5165\u53e3\u70b9\u7684\u7c7b\u3002\u4f3c\u4e4e\u6ca1\u6709\u4ec0\u4e48\u7279\u522b\u503c\u5f97\u6ce8\u610f\u7684\u5730\u65b9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.boot.SpringApplication<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.boot.autoconfigure.SpringBootApplication<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@SpringBootApplication<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Application<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">args<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"nc\">SpringApplication<\/span><span class=\"o\">.<\/span><span class=\"na\">run<\/span><span class=\"o\">(<\/span><span class=\"nc\">Application<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">,<\/span> <span class=\"n\">args<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u987e\u5ba2\u63a7\u5236\u5668.java<\/h1>\n<p>\u8fd9\u662f\u4e00\u4e2a\u63a7\u5236\u5668\u7c7b\u3002\u5b83\u5c06URL\u201c\/customers\u201d\u548c\u65b9\u6cd5\u201cgetCustomers\u201d\u8fdb\u884c\u4e86\u6620\u5c04\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example.controller<\/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.web.bind.annotation.RequestMapping<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RequestMethod<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RestController<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.model.Customer<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.service.CustomerService<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@RestController<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">CustomerController<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"nd\">@Autowired<\/span>\r\n    <span class=\"nc\">CustomerService<\/span> <span class=\"n\">customerService<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"n\">value<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"customers\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">method<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">RequestMethod<\/span><span class=\"o\">.<\/span><span class=\"na\">GET<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Customer<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">getCustomers<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">customerService<\/span><span class=\"o\">.<\/span><span class=\"na\">getCustomers<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u5ba2\u6237\u670d\u52a1.java<\/h1>\n<p>\u8fd9\u662f\u4e0e\u9886\u57df\u5c42\u670d\u52a1\u76f8\u5173\u7684\u5185\u5bb9\u3002\u53ea\u662f\u8c03\u7528DAO\u7684CustomerRepository\u7684selectAll\u65b9\u6cd5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example.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<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.transaction.annotation.Transactional<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.model.Customer<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.repository.CustomerRepository<\/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\">CustomerService<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"nd\">@Autowired<\/span>\r\n    <span class=\"nc\">CustomerRepository<\/span> <span class=\"n\">customerRepository<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Customer<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">getCustomers<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">customerRepository<\/span><span class=\"o\">.<\/span><span class=\"na\">selectAll<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u987e\u5ba2.java<\/h1>\n<p>\u8fd9\u662f\u4e00\u4e2a\u5b9e\u4f53\u7c7b\uff08\u67e5\u8be2\u7ed3\u679c\u96c6\u7c7b\uff09\u3002<br \/>\n\u5fc5\u987b\u4f7f\u7528@Entity\u6ce8\u89e3\uff0c\u9700\u8981\u6ce8\u610f\u7684\u662f\u8981\u4f7f\u7528&#8221;org.seasar.doma.Entity&#8221;\u6ce8\u89e3\u3002\u8bf7\u6ce8\u610f\uff0c@Entity\u6709\u591a\u4e2a\uff0c\u9700\u8981\u6ce8\u610f\u3002\u53e6\u5916\uff0c\u5982\u679c\u5728\u5185\u5b58\u4e2d\u4f7f\u7528\u6570\u636e\u5e93\uff08\u5982H2\u6216HSQL\u7b49\uff09\uff0c\u4f7f\u7528@Entity\u6ce8\u89e3\u5e76\u5728\u542f\u52a8\u65f6\u4f1a\u81ea\u52a8\u5220\u9664\/\u521b\u5efa\u4e0e\u5b9e\u4f53\u5bf9\u5e94\u7684\u8868\u3002\u56e0\u6b64\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4e0a\u8ff0\u7684schema.sql\u6587\u4ef6\u662f\u4e0d\u5fc5\u8981\u7684\u3002<br \/>\n@Table\u6ce8\u89e3\u7528\u4e8e\u660e\u786e\u6307\u5b9a\u8868\u540d\u3002\u5982\u679c\u6ca1\u6709\u8fd9\u4e2a\u6ce8\u89e3\uff0c\u8868\u540d\u5c06\u4f7f\u7528\u5b9e\u4f53\u7c7b\u7684\u7b80\u5355\u540d\u79f0\uff0c\u5217\u540d\u5c06\u4f7f\u7528\u5c5e\u6027\u540d\u79f0\u3002<br \/>\n\u66f4\u8be6\u7ec6\u7684\u4fe1\u606f\u5982\u4e0b\uff1a<br \/>\nhttp:\/\/doma.seasar.org\/reference\/entity.html<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example.model<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.seasar.doma.Entity<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.seasar.doma.Id<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.seasar.doma.Table<\/span><span class=\"o\">;<\/span>\r\n\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\">\"customers\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Customer<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"nd\">@Id<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">Integer<\/span> <span class=\"n\">id<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">name<\/span><span class=\"o\">;<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u987e\u5ba2\u4ed3\u5e93.java<\/h1>\n<p>\u6211\u8ba4\u4e3a\u5173\u952e\u70b9\u53ef\u80fd\u662f\u5728\u8fd9\u91cc\uff0c\u5373DAO\u3002<br \/>\n\u5728Doma\u4e2d\uff0cDAO\u7684\u5b9e\u73b0\u7c7b\u901a\u5e38\u662f\u901a\u8fc7apt\u81ea\u52a8\u751f\u6210\u7684\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u8981\u7ed9\u5b83\u52a0\u4e0a@Dao\u6ce8\u89e3\u4f5c\u4e3a\u6ce8\u91ca\u3002\u5b9e\u73b0\u7c7b\u4f1a\u5728\u7f16\u8bd1\u65f6\u81ea\u52a8\u751f\u6210\u3002<br \/>\n\u63a5\u4e0b\u6765\u7684@ConfigAutowireable\u662f\u4f7f\u7528\u4e86\u524d\u9762\u63d0\u5230\u7684doma-spring-boot-starter\u7684\u81ea\u52a8\u914d\u7f6e\u3002\u8fd9\u662f\u4e3a\u4e86\u5c06\u81ea\u52a8\u751f\u6210\u7684DAO\u5b9e\u73b0\u7c7b\u7eb3\u5165\u5bb9\u5668\u7ba1\u7406\u6240\u5fc5\u9700\u7684\u3002<br \/>\n\u8be6\u7ec6\u4fe1\u606f\u8bf7\u53c2\u89c1\u4ee5\u4e0b\u94fe\u63a5\uff1a<br \/>\nhttp:\/\/doma.seasar.org\/reference\/dao.html<br \/>\n\u7528\u8fd9\u4e2a\u65b9\u6cd5\u51e0\u4e4e\u5df2\u7ecf\u5b8c\u6210\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example.repository<\/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.seasar.doma.Dao<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.seasar.doma.Select<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.seasar.doma.boot.ConfigAutowireable<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.example.model.Customer<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Dao<\/span>\r\n<span class=\"nd\">@ConfigAutowireable<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">interface<\/span> <span class=\"nc\">CustomerRepository<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"nd\">@Select<\/span>\r\n    <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Customer<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">selectAll<\/span><span class=\"o\">();<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u521b\u5efa\u4e00\u4e2aSQL\u6587\u4ef6<\/h1>\n<p>\u53ea\u9700\u521b\u5efaSQL\u6587\u4ef6\u3002SQL\u6587\u4ef6\u5fc5\u987b\u653e\u7f6e\u5728\u5df2\u7ecf\u914d\u7f6e\u4e86\u7c7b\u8def\u5f84\u7684 META-INF \u76ee\u5f55\u4e0b\u3002<br \/>\n\u89c4\u5219\u5982\u4e0b\uff1a<br \/>\nMeta-INF\/Dao \u4e0b\u7684\u7c7b\u7684\u5b8c\u5168\u9650\u5b9a\u540d\u8f6c\u6362\u4e3a\u76ee\u5f55\u540d\/Dao \u7684\u65b9\u6cd5\u540d.sql<br \/>\n\u4e5f\u5c31\u662f\u8bf4\uff0c\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c<br \/>\nMETA-INF\/com\/example\/repository\/CustomerRepository\/selectAll.sql<\/p>\n<pre class=\"post-pre\"><code>select id, name from customers order by id;\r\n<\/code><\/pre>\n<h1>\u7f16\u8bd1<\/h1>\n<p>\u7531\u4e8e\u8fd9\u6b21\u4f7f\u7528\u4e86Maven\uff0c\u56e0\u6b64\u6211\u4eec\u5c06\u5c1d\u8bd5\u7528\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u7f16\u8bd1\u3002<br \/>\nmvn compile<br \/>\n\u7ed3\u679c\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code>[INFO] Scanning for projects...\r\n[INFO]\r\n[INFO] ------------------------------------------------------------------------\r\n[INFO] Building doma-cooperation 1.0.0-SNAPSHOT\r\n[INFO] ------------------------------------------------------------------------\r\n[INFO]\r\n[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ doma-cooperation ---\r\n[INFO] Using 'UTF-8' encoding to copy filtered resources.\r\n[INFO] Copying 1 resource\r\n[INFO] Copying 3 resources\r\n[INFO]\r\n[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ doma-cooperation ---\r\n[INFO] Changes detected - recompiling the module!\r\n[INFO] Compiling 5 source files to C:\\Development\\sts-bundle\\workspace\\doma-cooperation\\target\\classes\r\n[INFO] ------------------------------------------------------------------------\r\n[INFO] BUILD SUCCESS\r\n[INFO] ------------------------------------------------------------------------\r\n[INFO] Total time: 22.281 s\r\n[INFO] Finished at: 2015-12-13T21:28:22+09:00\r\n[INFO] Final Memory: 21M\/93M\r\n<\/code><\/pre>\n<p>maven-resources-plugin\u4f1a\u5c06SQL\u6587\u4ef6\u4ecesrc\/main\/resources\/META-INF\u590d\u5236\u5230target\/classes\u4e2d\u3002\u8fd9\u662f\u56e0\u4e3a\u5982\u679c\u4e0d\u5148\u590d\u5236\uff0c\u7f16\u8bd1\u65f6\u4f1a\u627e\u4e0d\u5230SQL\u6587\u4ef6\u5e76\u62a5\u9519\u3002<br \/>\n\u63a5\u4e0b\u6765\uff0cmaven-compiler-plugin\u4f1a\u4f7f\u7528apt\u751f\u6210DAO\u5b9e\u73b0\u7c7b\uff0c\u5e76\u8fdb\u884c\u7f16\u8bd1\u3002<br \/>\n\u6709\u5173Maven\u6784\u5efa\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1\u4ee5\u4e0b\u94fe\u63a5\uff1a<br \/>\nhttp:\/\/doma.seasar.org\/reference\/app_build.html#Maven%E3%81%AB%E3%82%88%E3%82%8B%E3%83%93%E3%83%AB%E3%83%89<br \/>\n\u8bf7\u6ce8\u610f\uff0c\u5c3d\u7ba1maven-resources-plugin\u548cmaven-compiler-plugin\u6ca1\u6709\u5728\u8fd9\u4e2apom.xml\u4e2d\u5b9a\u4e49\uff0c\u4f46\u53ef\u4ee5\u901a\u8fc7\u7236\u7ea7\u7684\u7236\u7ea7pom\uff08\u5947\u602a\u7684\u8868\u8fbe\u65b9\u5f0f\uff09\u5373Spring Boot Dependencies.pom\u6765\u4f7f\u7528\u5b83\u4eec\u3002<\/p>\n<h1>\u5c1d\u8bd5\u6267\u884c<\/h1>\n<p>\u6211\u4f1a\u7acb\u5373\u6267\u884c\u3002\u6211\u5c06\u542f\u52a8Spring Boot\u5e76\u5728\u6d4f\u89c8\u5668\u4e0a\u8bbf\u95ee\u4ee5\u4e0b\u7f51\u5740\uff1a<br \/>\nhttp:\/\/localhost:8080\/customers<br \/>\n\u7ed3\u679c\u5982\u4e0b\u6240\u793a\u3002\u6b63\u5982\u671f\u671b\u7684\u90a3\u6837\u3002<br \/>\n[{&#8220;id&#8221;:1,&#8221;name&#8221;:&#8221;JAY-Z&#8221;},{&#8220;id&#8221;:2,&#8221;name&#8221;:&#8221;NAS&#8221;},{&#8220;id&#8221;:3,&#8221;name&#8221;:&#8221;DMX&#8221;},{&#8220;id&#8221;:4,&#8221;name&#8221;:&#8221;2PAC&#8221;}]<\/p>\n<p>STS\u7684\u63a7\u5236\u53f0\u5982\u4e0b\u6240\u793a\uff08\u7531\u4e8e\u6ca1\u6709\u8fdb\u884c\u65e5\u5fd7\u8bbe\u7f6e\uff0c\u6240\u4ee5\u6587\u5b57\u4f1a\u4e71\u7801\uff0c\u4f46\u662f\u53ef\u4ee5\u770b\u5230\u6b63\u5728\u8bfb\u53d6SQL\u6587\u4ef6\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code>2015-12-13 21:57:52.519  INFO 8620 --- [nio-8080-exec-4] o.s.doma.jdbc.UtilLoggingJdbcLogger      : [DOMA2220] ENTER  : \u7e67\uff6f\u7e5d\uff69\u7e67\uff79=[com.example.repository.CustomerRepositoryImpl], \u7e5d\uff61\u7e67\uff7d\u7e5d?\u7e5d?=[selectAll]\r\n2015-12-13 21:57:52.531  INFO 8620 --- [nio-8080-exec-4] o.s.doma.jdbc.UtilLoggingJdbcLogger      : [DOMA2076] SQL\u7e5d\uff6d\u7e67\uff70 : SQL\u7e5d\u8f14\u3043\u7e67\uff64\u7e5d\uff6b=[META-INF\/com\/example\/repository\/CustomerRepository\/selectAll.sql],\r\nselect id, name from customers order by id\r\n2015-12-13 21:57:52.534  INFO 8620 --- [nio-8080-exec-4] o.s.doma.jdbc.UtilLoggingJdbcLogger      : [DOMA2221] EXIT   : \u7e67\uff6f\u7e5d\uff69\u7e67\uff79=[com.example.repository.CustomerRepositoryImpl], \u7e5d\uff61\u7e67\uff7d\u7e5d?\u7e5d?=[selectAll]\r\n<\/code><\/pre>\n<p>\u901a\u8fc7\u8fd9\u4e2a\uff0c\u6211\u4eec\u53ef\u4ee5\u8bf4Spring Boot\u548cDoma2\u5df2\u6210\u529f\u5730\u5b9e\u73b0\u4e86\u96c6\u6210\u3002<\/p>\n<h1>\u6458\u8981\/\u6211\u6c89\u8ff7\u8fc7\u7684\u4e8b\u60c5<\/h1>\n<p>\u66ab\u6642\u800c\u8a00\uff0c\u901a\u904eSpring Boot + Doma2\u7684\u6574\u5408\uff0c\u73fe\u5728\u53ef\u4ee5\u4f7f\u75282WaySQL\uff0c\u4f46\u5728\u5be6\u969b\u61c9\u7528\u4e2d\u4f3c\u4e4e\u9700\u8981\u9032\u4e00\u6b65\u9a57\u8b49\u3002\u4f8b\u5982\uff0c\u9019\u6b21\u7684\u4f8b\u5b50\u4e2d\u53ea\u4f7f\u7528\u4e86SELECT\u8a9e\u53e5\uff0c\u90a3\u9ebc\u5728INSERT\u3001UPDATE\u3001DELETE\u7b49\u8a9e\u53e5\u4e2d\u5982\u4f55\u8655\u7406\u56de\u6efe\u548c\u7570\u5e38\u8655\u7406\u7b49\u76f8\u95dc\u90e8\u5206\u5c31\u6210\u70ba\u4e86\u9a57\u8b49\u7684\u91cd\u9ede\u3002\u6b64\u5916\uff0c\u56e0\u70ba\u672c\u8eab\u5c0dDoma\u4e0d\u662f\u5f88\u4e86\u89e3\uff0c\u6240\u4ee5\u7406\u89e3\u9019\u90e8\u5206\u82b1\u4e86\u4e00\u4e9b\u6642\u9593\u3002\u4e0d\u904e\uff0c\u7121\u8ad6\u662fDoma1\u9084\u662fDoma2\uff0c\u7531\u65bc\u6709\u8c50\u5bcc\u7684\u65e5\u6587\u6587\u6a94\uff0c\u6240\u4ee5\u5165\u9580\u6bd4\u8f03\u5bb9\u6613\u3002\u9019\u6b21\u4e26\u6c92\u6709\u9032\u884cEclipse\u7684Annotation Processing\u8a2d\u5b9a\uff0c\u56e0\u70ba\u9019\u6a23\u505a\u6703\u548cmvn compile\u7684\u8a2d\u5b9a\u7522\u751f\u885d\u7a81\uff0c\u8b93\u4eba\u611f\u5230\u56f0\u60d1\u3002<\/p>\n<p>\u6700\u540e\uff0c\u4f3c\u4e4e\u6709Spring Boot + Doma2\u7684\u5b9e\u8df5\u8bb0\u5f55\u3002<\/p>\n<p>\u4e0b\u4e00\u6b65\uff0c\u6211\u6253\u7b97\u5c1d\u8bd5\u5199\u4e00\u4e9b\u5173\u4e8eINSERT\u3001UPDATE\u548cDELETE\u7684\u5185\u5bb9\u3002<\/p>\n<p>\u8fd9\u5c31\u662f\u4ee5\u4e0a\u7684\u5185\u5bb9\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u80cc\u666f \u6700\u8fd1\uff0c\u7531\u4e8e\u6570\u636e\u8bbf\u95ee\u4f7f\u7528\u4e86S2JDBC\uff082WaySQL\uff09\u8fdb\u884c\u5f00\u53d1\uff0c\u6240\u4ee5\u5bf9\u4e8e\u50cfSpring Data JPA [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-40326","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 + Doma2\u8fdb\u884c2WaySQL\u7684\u6b65\u9aa4 - 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-doma2\u8fdb\u884c2waysql\u7684\u6b65\u9aa4\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Spring Boot + Doma2\u8fdb\u884c2WaySQL\u7684\u6b65\u9aa4\" \/>\n<meta property=\"og:description\" content=\"\u80cc\u666f \u6700\u8fd1\uff0c\u7531\u4e8e\u6570\u636e\u8bbf\u95ee\u4f7f\u7528\u4e86S2JDBC\uff082WaySQL\uff09\u8fdb\u884c\u5f00\u53d1\uff0c\u6240\u4ee5\u5bf9\u4e8e\u50cfSpring Data JPA [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot-doma2\u8fdb\u884c2waysql\u7684\u6b65\u9aa4\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-30T02:08:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T08:52:18+00:00\" \/>\n<meta name=\"author\" content=\"\u79d1, \u96c5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u96c5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \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-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/\",\"name\":\"\u4f7f\u7528Spring Boot + Doma2\u8fdb\u884c2WaySQL\u7684\u6b65\u9aa4 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-12-30T02:08:20+00:00\",\"dateModified\":\"2024-04-29T08:52:18+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Spring Boot + Doma2\u8fdb\u884c2WaySQL\u7684\u6b65\u9aa4\"}]},{\"@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\/41e222757cdd2a3365361328bd79970a\",\"name\":\"\u79d1, \u96c5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u96c5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Spring Boot + Doma2\u8fdb\u884c2WaySQL\u7684\u6b65\u9aa4 - 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-doma2\u8fdb\u884c2waysql\u7684\u6b65\u9aa4\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Spring Boot + Doma2\u8fdb\u884c2WaySQL\u7684\u6b65\u9aa4","og_description":"\u80cc\u666f \u6700\u8fd1\uff0c\u7531\u4e8e\u6570\u636e\u8bbf\u95ee\u4f7f\u7528\u4e86S2JDBC\uff082WaySQL\uff09\u8fdb\u884c\u5f00\u53d1\uff0c\u6240\u4ee5\u5bf9\u4e8e\u50cfSpring Data JPA [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528spring-boot-doma2\u8fdb\u884c2waysql\u7684\u6b65\u9aa4\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-12-30T02:08:20+00:00","article_modified_time":"2024-04-29T08:52:18+00:00","author":"\u79d1, \u96c5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u96c5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/","name":"\u4f7f\u7528Spring Boot + Doma2\u8fdb\u884c2WaySQL\u7684\u6b65\u9aa4 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-12-30T02:08:20+00:00","dateModified":"2024-04-29T08:52:18+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Spring Boot + Doma2\u8fdb\u884c2WaySQL\u7684\u6b65\u9aa4"}]},{"@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\/41e222757cdd2a3365361328bd79970a","name":"\u79d1, \u96c5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","caption":"\u79d1, \u96c5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8spring-boot-doma2%e8%bf%9b%e8%a1%8c2waysql%e7%9a%84%e6%ad%a5%e9%aa%a4\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40326","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\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=40326"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40326\/revisions"}],"predecessor-version":[{"id":86471,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40326\/revisions\/86471"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=40326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=40326"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=40326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}