{"id":2229,"date":"2021-07-17T12:19:02","date_gmt":"2021-07-17T03:19:02","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=2229"},"modified":"2021-07-17T13:00:35","modified_gmt":"2021-07-17T04:00:35","slug":"jpa-%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-%eb%8d%b0%ec%9d%b4%ed%83%80-%ec%97%91%ec%84%b8%ec%8a%a4","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=2229","title":{"rendered":"JPA \ub97c \uc774\uc6a9\ud55c \ub370\uc774\ud0c0 \uc5d1\uc138\uc2a4"},"content":{"rendered":"<h1>JPA \ub97c \uc774\uc6a9\ud55c \ub370\uc774\ud0c0 \uc5d1\uc138\uc2a4<\/h1>\n<h2>\ubaa9\ud45c<\/h2>\n<p>H2 \ub370\uc774\ud0c0\ubca0\uc774\uc2a4\ub97c \uc774\uc6a9\ud574, \ub370\uc774\ud0c0\ub97c insert\/update\/select \ub97c \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p>H2 \ub294 \ub514\ud3f4\ud2b8\ub85c \uba54\ubaa8\ub9ac\uc5d0 \ub370\uc774\ud0c0\ub97c \uc800\uc7a5\ud558\ubbc0\ub85c, \ud504\ub85c\uc81d\ud2b8\ub97c \uc7ac\uc2e4\ud589\ud558\uba74 \uc785\ub825\ub418\uc5c8\ub358 \ub370\uc774\ud0c0\ub294 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4.<\/p>\n<h2>\ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131<\/h2>\n<p>\uc2e0\uaddc \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc758\uc874\uc131\uc740 DevTools, Lombok, Spring Web, Thymeleaf, Spring Data JPA, H2 \ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.<\/p>\n<h2>\ud30c\uc77c \ucd94\uac00<\/h2>\n<h3>Entity \uc0dd\uc131<\/h3>\n<p>Customer.java \ud30c\uc77c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<p><code>@Entity<\/code> \ub97c \ubd99\uc5ec\uc90c\uc73c\ub85c \ud574\uc11c, \uc774 \ud074\ub798\uc2a4\uac00 Entity \ud074\ub798\uc2a4\uc784\uc744 \ud45c\uc2dc\ud569\ub2c8\ub2e4.<br \/>\n<code>@Id<\/code> \ub97c \ubd99\uc5ec\uc11c, \uc774 \ubcc0\uc218\uac00 PK \uc784\uc744 \ud45c\uc2dc\ud569\ub2c8\ub2e4.<br \/>\n<code>@GeneratedValue(strategy= GenerationType.AUTO)<\/code> \ub97c \uc9c0\uc815\ud574\uc11c,<br \/>\nPK \uc758 \uac12\uc740 \uc790\ub3d9\uc99d\uac00\uc784\uc744 \ud45c\uc2dc\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-java\">@Entity\npublic class Customer {\n\n    @Id\n    @GeneratedValue(strategy= GenerationType.AUTO)\n    private Long id;\n    private String firstName;\n    private String lastName;\n\n    protected Customer() {}\n\n    public Customer(String firstName, String lastName) {\n        this.firstName = firstName;\n        this.lastName = lastName;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\n                &quot;Customer[id=%d, firstName=&#039;%s&#039;, lastName=&#039;%s&#039;]&quot;,\n                id, firstName, lastName);\n    }\n\n    public Long getId() {\n        return id;\n    }\n\n    public String getFirstName() {\n        return firstName;\n    }\n\n    public String getLastName() {\n        return lastName;\n    }\n}<\/code><\/pre>\n<h3>Repository \uc0dd\uc131<\/h3>\n<p>CustomerRepository.java \ud30c\uc77c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<p><code>interface<\/code> \ub9cc \uc0dd\uc131\ud574 \uc8fc\uba74, \uad6c\ud604 \ud074\ub798\uc2a4\ub294 Spring \uc5d0 \uc758\ud574 \uc790\ub3d9\uc0dd\uc131\ub429\ub2c8\ub2e4.<br \/>\n<code>CrudRepository<\/code> \uc5d0 \uc774\ubbf8 insert\/update\/delete\/select \uad00\ub828 \uba54\uc18c\ub4dc\uac00 \uad6c\ud604\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>CrudRepository&lt;Customer, Long&gt;<\/code> \uc5d0\uc11c, <code>Customer<\/code> \ub294 Entity, <code>Long<\/code> \uc740 PK \uc758 \ud0c0\uc785\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n<p><code>findByLastName<\/code> \uc740 \ud2b9\uc815 \ud544\ub4dc\uba85\uc73c\ub85c \uac80\uc0c9\ud558\ub294 \uba54\uc18c\ub4dc\ub97c,<br \/>\n<code>findBy\ud544\ub4dc\uba85<\/code> \ud615\uc2dd\uc73c\ub85c \uba54\uc18c\ub4dc\ub9cc \uc0dd\uc131\ud558\uba74,<br \/>\nSpring \uc774 \uc2e4\uc81c \uba54\uc18c\ub4dc\ub97c \uc790\ub3d9\uc0dd\uc131\ud574 \uc90d\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-java\">public interface CustomerRepository extends CrudRepository&lt;Customer, Long&gt; {\n\n    List&lt;Customer&gt; findByLastName(String lastName);\n\n    Customer findById(long id);\n}<\/code><\/pre>\n<h3>Application \uc218\uc815<\/h3>\n<pre><code class=\"language-java\">@SpringBootApplication\npublic class JpaApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(JpaApplication.class, args);\n    }\n\n    private static final Logger log = LoggerFactory.getLogger(JpaApplication.class);\n\n    @Bean\n    public CommandLineRunner demo(CustomerRepository repository) {\n        return (args) -&gt; {\n            \/\/ save a few customers\n            repository.save(new Customer(&quot;Jack&quot;, &quot;Bauer&quot;));\n            repository.save(new Customer(&quot;Chloe&quot;, &quot;O&#039;Brian&quot;));\n            repository.save(new Customer(&quot;Kim&quot;, &quot;Bauer&quot;));\n            repository.save(new Customer(&quot;David&quot;, &quot;Palmer&quot;));\n            repository.save(new Customer(&quot;Michelle&quot;, &quot;Dessler&quot;));\n\n            \/\/ fetch all customers\n            log.info(&quot;Customers found with findAll():&quot;);\n            log.info(&quot;-------------------------------&quot;);\n            for (Customer customer : repository.findAll()) {\n                log.info(customer.toString());\n            }\n            log.info(&quot;&quot;);\n\n            \/\/ fetch an individual customer by ID\n            Customer customer = repository.findById(1L);\n            log.info(&quot;Customer found with findById(1L):&quot;);\n            log.info(&quot;--------------------------------&quot;);\n            log.info(customer.toString());\n            log.info(&quot;&quot;);\n\n            \/\/ fetch customers by last name\n            log.info(&quot;Customer found with findByLastName(&#039;Bauer&#039;):&quot;);\n            log.info(&quot;--------------------------------------------&quot;);\n            repository.findByLastName(&quot;Bauer&quot;).forEach(bauer -&gt; {\n                log.info(bauer.toString());\n            });\n            \/\/ for (Customer bauer : repository.findByLastName(&quot;Bauer&quot;)) {\n            \/\/  log.info(bauer.toString());\n            \/\/ }\n            log.info(&quot;&quot;);\n        };\n    }\n}<\/code><\/pre>\n<h2>\ud504\ub85c\uc81d\ud2b8 \uc2e4\ud589<\/h2>\n<p>\ud504\ub85c\uc81d\ud2b8\ub97c \uc2e4\ud589\ud558\uba74, \ub85c\uadf8\uc5d0 \uc785\ub825\ud55c \ub370\uc774\ud0c0\uac00 \ud45c\uc2dc\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JPA \ub97c \uc774\uc6a9\ud55c \ub370\uc774\ud0c0 \uc5d1\uc138\uc2a4 \ubaa9\ud45c H2 \ub370\uc774\ud0c0\ubca0\uc774\uc2a4\ub97c \uc774\uc6a9\ud574, \ub370\uc774\ud0c0\ub97c insert\/update\/select \ub97c \uc218\ud589\ud569\ub2c8\ub2e4. H2 \ub294 \ub514\ud3f4\ud2b8\ub85c \uba54\ubaa8\ub9ac\uc5d0 \ub370\uc774\ud0c0\ub97c \uc800\uc7a5\ud558\ubbc0\ub85c, \ud504\ub85c\uc81d\ud2b8\ub97c \uc7ac\uc2e4\ud589\ud558\uba74 \uc785\ub825\ub418\uc5c8\ub358 \ub370\uc774\ud0c0\ub294 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \uc2e0\uaddc \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc758\uc874\uc131\uc740 DevTools, Lombok, Spring Web, Thymeleaf, Spring Data JPA, H2 \ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4. \ud30c\uc77c \ucd94\uac00 Entity \uc0dd\uc131 Customer.java \ud30c\uc77c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4. @Entity \ub97c \ubd99\uc5ec\uc90c\uc73c\ub85c \ud574\uc11c, \uc774 \ud074\ub798\uc2a4\uac00 Entity\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=2229\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[],"class_list":["post-2229","post","type-post","status-publish","format-standard","hentry","category-spring-boot-2-5"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2229"}],"version-history":[{"count":6,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2229\/revisions"}],"predecessor-version":[{"id":2236,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2229\/revisions\/2236"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}