{"id":820,"date":"2018-01-21T15:10:44","date_gmt":"2018-01-21T12:10:44","guid":{"rendered":"http:\/\/leodev.ru\/blog\/?p=820"},"modified":"2018-02-08T20:56:10","modified_gmt":"2018-02-08T17:56:10","slug":"spring-boot-spring-data-jpa-mysql","status":"publish","type":"post","link":"https:\/\/leodev.ru\/blog\/spring-boot\/spring-boot-spring-data-jpa-mysql\/","title":{"rendered":"Spring Boot + Spring Data JPA + MySQL(Hikari Connection Pool)"},"content":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0<strong>Spring Boot + Spring Data JPA + MySQL + \u043f\u0443\u043b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 HikariCP<\/strong><br \/>\n\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438:<\/p>\n<ol>\n<li>Spring Boot 1.5.9.RELEASE<\/li>\n<li>Spring Data 1.11.9.RELEASE<\/li>\n<li>Hibernate 5.0.12 Final<\/li>\n<li>MySQL Server 5.7.19-17<\/li>\n<li>MySQL JDBC driver 5.1.44<\/li>\n<li>Hikari Connection Pool 2.7.6<\/li>\n<li>Maven<\/li>\n<li>Java 8<\/li>\n<\/ol>\n<h2>1. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432<\/h2>\n<p><a href=\"http:\/\/leodev.ru\/blog\/wp-content\/uploads\/2018\/01\/c005e-clip-24kb1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-827\" src=\"http:\/\/leodev.ru\/blog\/wp-content\/uploads\/2018\/01\/c005e-clip-24kb1-290x300.png\" alt=\"\" width=\"290\" height=\"300\" srcset=\"https:\/\/leodev.ru\/blog\/wp-content\/uploads\/2018\/01\/c005e-clip-24kb1-290x300.png 290w, https:\/\/leodev.ru\/blog\/wp-content\/uploads\/2018\/01\/c005e-clip-24kb1.png 425w\" sizes=\"auto, (max-width: 290px) 85vw, 290px\" \/><\/a><!--more--><\/p>\n<h2>2. \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438<\/h2>\n<p>\u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c <strong>spring-boot-starter-data-jpa<\/strong>, \u043e\u043d \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 <strong>Spring Data<\/strong>, <strong>Hibernate<\/strong> \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e <strong>JPA<\/strong>.<\/p>\n<pre><em><strong>Hibernate<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438\u00a0<strong>JPA.\r\n<\/strong><\/em><\/pre>\n<pre class=\"lang:java decode:true \" title=\"pom.xml\">&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\txsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"&gt;\r\n\t&lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\r\n\r\n\t&lt;groupId&gt;ru.leodev.examples.springboot&lt;\/groupId&gt;\r\n\t&lt;artifactId&gt;springboot-jpa-mysql&lt;\/artifactId&gt;\r\n\t&lt;version&gt;0.0.1&lt;\/version&gt;\r\n\t&lt;packaging&gt;jar&lt;\/packaging&gt;\r\n\r\n\t&lt;name&gt;springboot-jpa-mysql&lt;\/name&gt;\r\n\t&lt;description&gt;Demo Spring Boot + Spring Data JPA + MySQL&lt;\/description&gt;\r\n\t&lt;url&gt;http:\/\/leodev.ru\/blog\/spring-boot\/spring-boot-spring-data-jpa-mysql\/&lt;\/url&gt;\r\n\r\n\t&lt;parent&gt;\r\n\t\t&lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n\t\t&lt;artifactId&gt;spring-boot-starter-parent&lt;\/artifactId&gt;\r\n\t\t&lt;version&gt;1.5.9.RELEASE&lt;\/version&gt;\r\n\t\t&lt;relativePath\/&gt; &lt;!-- lookup parent from repository --&gt;\r\n\t&lt;\/parent&gt;\r\n\r\n\t&lt;properties&gt;\r\n\t\t&lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\r\n\t\t&lt;project.reporting.outputEncoding&gt;UTF-8&lt;\/project.reporting.outputEncoding&gt;\r\n\t\t&lt;java.version&gt;1.8&lt;\/java.version&gt;\r\n\t&lt;\/properties&gt;\r\n\r\n\t&lt;dependencies&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t\t&lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n\t\t\t&lt;artifactId&gt;spring-boot-starter-data-jpa&lt;\/artifactId&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\r\n\t\t&lt;dependency&gt;\r\n\t\t\t&lt;groupId&gt;mysql&lt;\/groupId&gt;\r\n\t\t\t&lt;artifactId&gt;mysql-connector-java&lt;\/artifactId&gt;\r\n\t\t\t&lt;scope&gt;runtime&lt;\/scope&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\t\t&lt;!-- HikariCP connection pool --&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t\t&lt;groupId&gt;com.zaxxer&lt;\/groupId&gt;\r\n\t\t\t&lt;artifactId&gt;HikariCP&lt;\/artifactId&gt;\r\n\t\t\t&lt;version&gt;2.7.6&lt;\/version&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\t&lt;\/dependencies&gt;\r\n\r\n\t&lt;build&gt;\r\n\t\t&lt;plugins&gt;\r\n\t\t\t&lt;plugin&gt;\r\n\t\t\t\t&lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\r\n\t\t\t\t&lt;artifactId&gt;spring-boot-maven-plugin&lt;\/artifactId&gt;\r\n\t\t\t&lt;\/plugin&gt;\r\n\t\t&lt;\/plugins&gt;\r\n\t&lt;\/build&gt;\r\n\r\n\r\n&lt;\/project&gt;\r\n<\/pre>\n<h2>3. Java Persistence API \u2013 JPA<\/h2>\n<p>3.1 \u041c\u043e\u0434\u0435\u043b\u044c User JPA<\/p>\n<p>[stextbox id=&#8217;alert&#8217; caption=&#8217;\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a Entity \u043a\u043b\u0430\u0441\u0441\u0430\u043c&#8217;]<\/p>\n<p style=\"padding-left: 30px;\">\u0414\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 (<strong>public<\/strong> \u0438\u043b\u0438 <strong>protected<\/strong>);<\/p>\n<p style=\"padding-left: 30px;\">\u041d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0438\u043b\u0438 enum;<\/p>\n<p style=\"padding-left: 30px;\">\u041d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c <strong>final<\/strong> \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c <strong>final<\/strong>-\u043f\u043e\u043b\u0435\u0439\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432;<\/p>\n<p style=\"padding-left: 30px;\">\u0414\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e <strong>@Id<\/strong>-\u043f\u043e\u043b\u0435.<\/p>\n<p>[\/stextbox]<\/p>\n<pre class=\"lang:java decode:true\" title=\"User.java\">package ru.leodev.examples.springboot.springbootjpamysql.model;\r\n\r\n\r\nimport javax.persistence.Column;\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.GeneratedValue;\r\nimport javax.persistence.GenerationType;\r\nimport javax.persistence.Id;\r\nimport java.util.Date;\r\n\r\n@Entity\r\npublic class User {\r\n    @Id\r\n    @GeneratedValue(strategy = GenerationType.AUTO)\r\n    private Long id;\r\n    private String name;\r\n    private String email;\r\n\r\n    @Column(name = \"CREATED_DATE\")\r\n    private Date date;\r\n\r\n    \/\/ \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 JPA\r\n    public User() {\r\n    }\r\n\r\n    public User(String name, String email, Date date) {\r\n        this.name = name;\r\n        this.email = email;\r\n        this.date = date;\r\n    }\r\n\r\n    public Long getId() {\r\n        return id;\r\n    }\r\n\r\n    public void setId(Long id) {\r\n        this.id = id;\r\n    }\r\n\r\n    public String getName() {\r\n        return name;\r\n    }\r\n\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    public String getEmail() {\r\n        return email;\r\n    }\r\n\r\n    public void setEmail(String email) {\r\n        this.email = email;\r\n    }\r\n\r\n    public Date getDate() {\r\n        return date;\r\n    }\r\n\r\n    public void setDate(Date date) {\r\n        this.date = date;\r\n    }\r\n\r\n    @Override\r\n    public String toString() {\r\n        return \"User{\" +\r\n                \"id=\" + id +\r\n                \", name='\" + name + '\\'' +\r\n                \", email='\" + email + '\\'' +\r\n                \", date=\" + date +\r\n                '}';\r\n    }\r\n}\r\n<\/pre>\n<h2>4. Configuration + Database Initialization<\/h2>\n<p>4.1 Configure Oracle data source, HikariCP settings and show Hibernate query.<\/p>\n<pre class=\"lang:java decode:true\" title=\"application.properties\">spring.main.banner-mode=off\r\n\r\n# \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0431\u0430\u0437\u0435 \u0447\u0435\u0440\u0435\u0437 MySQL\r\nspring.datasource.url=jdbc:mysql:\/\/leodev.ru\/leodes_spring?useSSL=false\r\nspring.datasource.username=leodes_spring\r\nspring.datasource.password=spring\r\nspring.datasource.driver-class-name=com.mysql.jdbc.Driver\r\n\r\n# \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0436\u0438\u0432\u044b\u043c, \u0435\u0441\u043b\u0438 \u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u043e\u0436\u0434\u0435\u0442 \u043e\u0442\u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f\r\nspring.datasource.testWhileIdle = true\r\nspring.datasource.validationQuery = SELECT 1\r\n\r\n# ===============================\r\n# = JPA \/ HIBERNATE\r\n# ===============================\r\n# \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0431\u0430\u0437\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f import.sql \u043a\u0430\u043a \u0434\u0430\u043c\u043f\r\nspring.jpa.hibernate.ddl-auto=create-drop\r\nspring.jpa.show-sql=true\r\n# Naming strategy\r\nspring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy\r\n# Allows Hibernate to generate SQL optimized for a particular DBMS\r\nspring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect\r\n\r\n# HikariCP\r\n# spring.datasource.hikari.*\r\nspring.datasource.hikari.connection-timeout=60000\r\nspring.datasource.hikari.maximum-pool-size=5\r\nspring.datasource.type=com.zaxxer.hikari.HikariDataSource\r\n\r\n# \u043b\u043e\u0433\u0438\r\nlogging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n\r\nlogging.level.org.hibernate.SQL=debug\r\n#logging.level.org.hibernate.type.descriptor.sql=trace\r\nlogging.level.=error<\/pre>\n<p>4.2 \u0415\u0441\u043b\u0438 <strong>import.sql<\/strong> \u043d\u0430\u0439\u0434\u0435\u043d, Hibernate \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442<\/p>\n<pre class=\"lang:mysql decode:true \" title=\"import.sql\">INSERT INTO `user` (ID, NAME, EMAIL, CREATED_DATE) VALUES(1, 'leodev','111@leodev.ru', STR_TO_DATE('2018-03-21', '%Y-%m-%d'));\r\nINSERT INTO `user` (ID, NAME, EMAIL, CREATED_DATE) VALUES(2, 'alex','222@leodev.ru', STR_TO_DATE('2018-04-22', '%Y-%m-%d'));\r\nINSERT INTO `user` (ID, NAME, EMAIL, CREATED_DATE) VALUES(3, 'kirito','333@leodev.ru', STR_TO_DATE('2018-05-23', '%Y-%m-%d'));<\/pre>\n<pre class=\"\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0<a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/howto-database-initialization.html\" target=\"_blank\" rel=\"noopener\">Spring Database initialization<\/a><\/pre>\n<h2>5. @Repository<\/h2>\n<p>5.1 \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0441\u044f \u043e\u0442 <strong>Spring Data CrudRepository<\/strong><\/p>\n<pre class=\"lang:java decode:true \" title=\"UserRepository.java\">package ru.leodev.examples.springboot.springbootjpamysql.dao;\r\n\r\nimport org.springframework.data.jpa.repository.Query;\r\nimport org.springframework.data.repository.CrudRepository;\r\nimport org.springframework.data.repository.query.Param;\r\nimport ru.leodev.examples.springboot.springbootjpamysql.model.User;\r\n\r\nimport java.util.Date;\r\nimport java.util.List;\r\nimport java.util.stream.Stream;\r\n\r\npublic interface UserRepository extends CrudRepository&lt;User, Long&gt;{\r\n    List&lt;User&gt; findByEmail(String email);\r\n\r\n    List&lt;User&gt; findByDate(Date date);\r\n\r\n    \/\/ \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 Stream (Java 8 Stream API)\r\n    @Query(\"SELECT u FROM User u WHERE u.email = :email\")\r\n    Stream&lt;User&gt; findByEmailReturnStream(@Param(\"email\") String email);\r\n}<\/pre>\n<p>\u041d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0434\u0430\u043d\u043d\u044b\u0435 Spring \u0441\u043e\u0437\u0434\u0430\u0434\u0443\u0442 \u043e\u0431\u0449\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 findByfieldName (). \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435\u00a0<a href=\"http:\/\/docs.spring.io\/spring-data\/data-commons\/docs\/current\/reference\/html\/#repositories\" target=\"_blank\" rel=\"noopener\">working with Spring Data Repositories<\/a><\/p>\n<h2>6. Spring Boot Starter<\/h2>\n<pre class=\"\">package ru.leodev.examples.springboot.springbootjpamysql;\r\n\r\nimport org.springframework.boot.CommandLineRunner;\r\nimport org.springframework.boot.SpringApplication;\r\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\r\nimport org.springframework.context.annotation.Bean;\r\nimport org.springframework.transaction.annotation.Transactional;\r\nimport ru.leodev.examples.springboot.springbootjpamysql.dao.UserRepository;\r\nimport ru.leodev.examples.springboot.springbootjpamysql.model.User;\r\n\r\nimport java.text.SimpleDateFormat;\r\nimport java.util.stream.Stream;\r\n\r\n@SpringBootApplication\r\npublic class SpringbootJpaMysqlApplication {\r\n\r\n    private static final SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd\");\r\n\r\n    public static void main(String[] args) {\r\n        SpringApplication.run(SpringbootJpaMysqlApplication.class, args);\r\n    }\r\n\r\n    @Bean\r\n    public CommandLineRunner demo(UserRepository repository) {\r\n        return new CommandLineRunner() {\r\n            \/\/ \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e spring boot 1.5 \u0440\u0438\u0434\u043e\u043d\u043b\u0438 \u043d\u0430\u0434 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\r\n            \/\/ \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0441\u0435\u0441\u0441\u0438\u044f.\r\n            @Override\r\n            @Transactional(readOnly = true)\r\n            public void run(String... args) throws Exception {\r\n\r\n                System.out.println(\"\\n1.findAll()...\");\r\n                for (User user : repository.findAll()) {\r\n                    System.out.println(user);\r\n                }\r\n\r\n                System.out.println(\"\\n2.findByEmail(String email)...\");\r\n                for (User user : repository.findByEmail(\"111@leodev.ru\")) {\r\n                    System.out.println(user);\r\n                }\r\n\r\n                System.out.println(\"\\n3.findByDate(Date date)...\");\r\n                for (User user : repository.findByDate(sdf.parse(\"2018-03-22\"))) {\r\n                    System.out.println(user);\r\n                }\r\n\r\n                \/\/ For Stream, need @Transactional\r\n                System.out.println(\"\\n4.findByEmailReturnStream(@Param(\\\"email\\\") String email)...\");\r\n                try (Stream&lt;User&gt; stream = repository.findByEmailReturnStream(\"333@leodev.ru\")) {\r\n                    stream.forEach(System.out::println);\r\n                }\r\n\r\n                System.out.println(\"Done!\");\r\n            }\r\n        };\r\n\r\n\r\n    }\r\n}<\/pre>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 <strong>Spring Boot 1.5<\/strong> \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439, \u0447\u0442\u043e \u0431\u044b \u0431\u044b\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u0430<\/p>\n<pre class=\"lang:java decode:true \">@Transactional(readOnly = true)<\/pre>\n<h2>8. \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n<pre class=\"lang:java decode:true \" title=\"mvn spring-boot:run\">2018-01-21 15:31:00 DEBUG org.hibernate.SQL - drop table if exists user\r\nHibernate: drop table if exists user\r\n2018-01-21 15:31:00 DEBUG org.hibernate.SQL - create table user (id bigint not null auto_increment, created_date datetime, email varchar(255), name varchar(255), primary key (id))\r\nHibernate: create table user (id bigint not null auto_increment, created_date datetime, email varchar(255), name varchar(255), primary key (id))\r\nDATASOURCE = HikariDataSource (HikariPool-1)\r\n\r\n1.findAll()...\r\n2018-01-21 15:31:01 DEBUG org.hibernate.SQL - select user0_.id as id1_0_, user0_.created_date as created_2_0_, user0_.email as email3_0_, user0_.name as name4_0_ from user user0_\r\nHibernate: select user0_.id as id1_0_, user0_.created_date as created_2_0_, user0_.email as email3_0_, user0_.name as name4_0_ from user user0_\r\nUser{id=1, name='leodev', email='111@leodev.ru', date=2018-03-21 00:00:00.0}\r\nUser{id=2, name='alex', email='222@leodev.ru', date=2018-04-22 00:00:00.0}\r\nUser{id=3, name='kirito', email='333@leodev.ru', date=2018-05-23 00:00:00.0}\r\n\r\n2.findByEmail(String email)...\r\n2018-01-21 15:31:01 DEBUG org.hibernate.SQL - select user0_.id as id1_0_, user0_.created_date as created_2_0_, user0_.email as email3_0_, user0_.name as name4_0_ from user user0_ where user0_.email=?\r\nHibernate: select user0_.id as id1_0_, user0_.created_date as created_2_0_, user0_.email as email3_0_, user0_.name as name4_0_ from user user0_ where user0_.email=?\r\nUser{id=1, name='leodev', email='111@leodev.ru', date=2018-03-21 00:00:00.0}\r\n\r\n3.findByDate(Date date)...\r\n2018-01-21 15:31:01 DEBUG org.hibernate.SQL - select user0_.id as id1_0_, user0_.created_date as created_2_0_, user0_.email as email3_0_, user0_.name as name4_0_ from user user0_ where user0_.created_date=?\r\nHibernate: select user0_.id as id1_0_, user0_.created_date as created_2_0_, user0_.email as email3_0_, user0_.name as name4_0_ from user user0_ where user0_.created_date=?\r\n\r\n4.findByEmailReturnStream(@Param(\"email\") String email)...\r\n2018-01-21 15:31:01 DEBUG org.hibernate.SQL - select user0_.id as id1_0_, user0_.created_date as created_2_0_, user0_.email as email3_0_, user0_.name as name4_0_ from user user0_ where user0_.email=?\r\nHibernate: select user0_.id as id1_0_, user0_.created_date as created_2_0_, user0_.email as email3_0_, user0_.name as name4_0_ from user user0_ where user0_.email=?\r\nUser{id=3, name='kirito', email='333@leodev.ru', date=2018-05-23 00:00:00.0}\r\nDone!\r\n[INFO] ------------------------------------------------------------------------\r\n[INFO] BUILD SUCCESS\r\n[INFO] ------------------------------------------------------------------------\r\n[INFO] Total time: 4.657 s\r\n[INFO] Finished at: 2018-01-21T15:31:01+03:00\r\n[INFO] Final Memory: 22M\/54M\r\n[INFO] ------------------------------------------------------------------------\r\n2018-01-21 15:31:01 DEBUG org.hibernate.SQL - drop table if exists user\r\nHibernate: drop table if exists user\r\n<\/pre>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<ol>\n<li><a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/howto-database-initialization.html\" target=\"_blank\" rel=\"noopener\">Initialize a database using JPA<\/a><\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/21113154\/spring-boot-ddl-auto-generator\" target=\"_blank\" rel=\"noopener\">Spring boot ddl auto generator<\/a><\/li>\n<li><a href=\"http:\/\/docs.spring.io\/spring-data\/data-commons\/docs\/current\/reference\/html\/\" target=\"_blank\" rel=\"noopener\">Spring Data Commons \u2013 Reference Documentation<\/a><\/li>\n<li><a href=\"https:\/\/spring.io\/guides\/gs\/accessing-data-jpa\/\" target=\"_blank\" rel=\"noopener\">Accessing Data with JPA<\/a><\/li>\n<li><a href=\"http:\/\/www.mkyong.com\/spring-boot\/spring-boot-spring-data-jpa-oracle-example\/\">Spring-boot-spring-data-jpa-oracle-example<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0Spring Boot + Spring Data JPA + MySQL + \u043f\u0443\u043b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 HikariCP \u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438: Spring Boot 1.5.9.RELEASE Spring Data 1.11.9.RELEASE Hibernate 5.0.12 Final MySQL Server 5.7.19-17 MySQL JDBC driver 5.1.44 Hikari Connection Pool 2.7.6 Maven Java 8 1. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432<\/p>\n","protected":false},"author":1,"featured_media":826,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[207],"tags":[74,226,146,217],"class_list":["post-820","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-spring-boot","tag-java","tag-jpa","tag-spring","tag-spring-boot"],"_links":{"self":[{"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/posts\/820","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/comments?post=820"}],"version-history":[{"count":11,"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/posts\/820\/revisions"}],"predecessor-version":[{"id":852,"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/posts\/820\/revisions\/852"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/media\/826"}],"wp:attachment":[{"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/media?parent=820"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/categories?post=820"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/leodev.ru\/blog\/wp-json\/wp\/v2\/tags?post=820"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}