{"id":232381,"date":"2014-08-06T03:03:03","date_gmt":"2014-08-05T23:03:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=232381"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=232381","title":{"rendered":"<span class=\"post_title\">\u041f\u043e \u0441\u043b\u0435\u0434\u0430\u043c Spring Pet Clinic. Maven\/ Spring Context\/ Spring Test\/ Spring ORM\/ Spring Data JPA<\/span>"},"content":{"rendered":"<div class=\"content html_format\">     \t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/872\/047\/052\/8720470528074f95bc4ff8d0c08b461d.jpg\"\/><br \/>  \u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435!<br \/>  <a href=\"http:\/\/docs.spring.io\/spring\/docs\/current\/spring-framework-reference\/html\/mvc.html\">Spring MVC<\/a>, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"http:\/\/zeroturnaround.com\/rebellabs\/java-tools-and-technologies-landscape-for-2014\/\">\u043e\u0431\u0437\u043e\u0440\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 Java \u0437\u0430 2014 \u0433. \u043e\u0442 RevbelLabs<\/a>, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u0435\u0431 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c. \u0414\u0430\u043b\u0435\u0435 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u0437\u043e\u0440 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043b\u0438\u0434\u0435\u0440\u0430 ORM \u2014 <a href=\"http:\/\/hibernate.org\/orm\/\">Hibernate<\/a> \u0438 \u043b\u0438\u0434\u0435\u0440\u0430 \u0432\u0435\u0431-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u2014 Apache Tomcat. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u044e\u0434\u0430 \u0441\u0430\u043c\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e java script \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/jquery.com\/\">jQuery<\/a>, \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 css \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <a href=\"http:\/\/getbootstrap.com\/\">Bootstrap<\/a>, \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0441\u0430\u043c\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0443\u044e (\u043d\u0435\u0441\u043c\u043e\u0440\u044f \u043d\u0430 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 Gradle) \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 <a href=\"http:\/\/www.apache-maven.ru\/\">Maven<\/a>, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043b\u0438\u0434\u0435\u0440 \u0441\u0440\u0435\u0434\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 <a href=\"http:\/\/junit.org\/\">JUnit<\/a> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Spring \u043e\u0442 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439: <a href=\"https:\/\/github.com\/spring-projects\/spring-petclinic\">Spring Pet Clinic<\/a> (<a href=\"http:\/\/demo-spring-petclinic.cfapps.io\">\u0434\u0435\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/a>). \u041a\u0440\u043e\u043c\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e, \u0432 \u044d\u0442\u043e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u043b\u044e\u0447\u0435\u043d\u044b \u0442\u0430\u043a\u0436\u0435 Spring-Jdbc, Spring-ORM, <a href=\"http:\/\/projects.spring.io\/spring-data-jpa\/\">Spring Data JPA<\/a>, <a href=\"http:\/\/hibernate.org\/validator\/\">Hibernate Validator<\/a>, <a href=\"http:\/\/www.slf4j.org\/\">SLF4J<\/a>, <a href=\"https:\/\/github.com\/FasterXML\/jackson\">Json Jackson<\/a>, <a href=\"http:\/\/ru.wikipedia.org\/wiki\/JSP\">JSP<\/a>, <a href=\"http:\/\/en.wikipedia.org\/wiki\/JavaServer_Pages_Standard_Tag_Library\">JSTL<\/a>, <a href=\"http:\/\/www.webjars.org\/\">WebJars<\/a>, <a href=\"http:\/\/dandelion.github.io\/datatables\/\">Dandelion DataTables<\/a>, <a href=\"http:\/\/hsqldb.org\/\">HSQLDB<\/a>, <a href=\"http:\/\/hamcrest.org\/JavaHamcrest\/\">Hamcrest<\/a>, <a href=\"http:\/\/code.google.com\/p\/mockito\/\">Mockito<\/a> \u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<br \/>  <a name=\"habracut\"><\/a>\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u041f\u041e \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043c\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u0438\u0434\u0435\u0430\u043b\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0435\u0440\u0435\u0432\u0430\u043b\u0438\u043b\u043e \u0437\u0430 \u043f\u043e\u043b\u0441\u043e\u0442\u043d\u0438 (\u0432 PetClinic \u0432 WEB-INF\\lib \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f 61 jar). \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435 \u043e\u0431\u044a\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0438\u0445 \u0432\u0441\u0435, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 jar \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u043e\u043d\u0435, \u0438 \u043c\u044b \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0435\u043c \u043e \u043d\u0438\u0445, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 war \u0438\u043b\u0438 \u043d\u0435\u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c <code>mvn project-info-reports:dependencies<\/code> (\u0432 IDEA: Show Dependencies\u2026 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 Maven). \u041d\u043e \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0418 \u043d\u0430 \u0431\u043e\u0440\u044c\u0431\u0443 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0438\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0442\u0440\u0430\u0442\u044f\u0442\u0441\u044f \u0447\u0430\u0441\u044b, \u0430 \u0442\u043e \u0438 \u0434\u043d\u0438. \u0410 \u0435\u0449\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0431\u0430\u0433\u0430\u043c\u0438 \u0441\u0430\u043c\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432\u2026<br \/>  \u041d\u0435\u0434\u0430\u0432\u043d\u043e, \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Pet Clinic, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0432\u0435\u0431\u0438\u043d\u0430\u0440\u0430 \u043f\u043e \u044d\u0442\u0438\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u00abTodo Management List\u00bb: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043e\u043a\u043e\u043c \u0434\u0435\u043b \u0441 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u041a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c Pet Clinic \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0435\u0449\u0435 <a href=\"http:\/\/projects.spring.io\/spring-security\/\">Spring Security<\/a>\/ \u0441\u043e\u0432\u0441\u0435\u043c \u0441\u0432\u0435\u0436\u0438\u0439 <a href=\"http:\/\/spring.io\/blog\/2014\/05\/07\/preview-spring-security-test-method-security\">Spring Security  Test<\/a> \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043a jQuery <a href=\"http:\/\/www.appelsiini.net\/projects\/jeditable\">Jeditable<\/a> \u0438 <a href=\"http:\/\/ned.im\/noty\/\">jQuery notification<\/a>. \u041e\u0431\u044a\u0435\u043c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0448\u0430\u0433\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0432\u0435\u0431\u0438\u043d\u0430\u0440 \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 30 \u0447\u0430\u0441\u043e\u0432), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u0434\u0435\u043b\u044e\u0441\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b\u0441\u043b\u044f\u043c\u0438 \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u043c\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.<br \/>  \u041d\u0430 <a href=\"https:\/\/www.heroku.com\/\">PaaS Heroku<\/a> \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"http:\/\/todomng.herokuapp.com\/\">\u0434\u0435\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a> (\u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0434\u043e\u043b\u0433\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c). <\/p>\n<h1>  \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/h1>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043d\u0435\u043c\u0430\u043b\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 Spring\/ JPA\/ MVC\/ Security. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441\u043e\u0440\u0441\u044b \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0432\u0430\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<ul>\n<li>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u0430\u043c <a href=\"https:\/\/github.com\/spring-projects\/spring-petclinic\">Pet Clinic<\/a>;<\/li>\n<li>\u0437\u0430\u0442\u0435\u043c \u2014 <a href=\"https:\/\/github.com\/heroku\/devcenter-spring-mvc-hibernate\">Pet Clinic<\/a> \u043e\u0442 Heroku \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"http:\/\/habrahabr.ru\/post\/221939\/\">Spring Roo<\/a>; <\/li>\n<li>\u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 Spring Security Test <a href=\"https:\/\/github.com\/rwinch\/spring-security-test-blog\">rwinch\/spring-security-test-blog<\/a><\/li>\n<li>\u043f\u0440\u043e\u0435\u043a\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u044f \u0420\u0435\u0437\u0447\u0438\u043a\u043e\u0432\u0430 <a href=\"https:\/\/github.com\/mcgray\/TODOShare\">mcgray\/TODOShare<\/a><\/li>\n<li>\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 <a href=\"https:\/\/github.com\/sivaprasadreddy\/sivalabs-blog-samples-code\">sivaprasadreddy\/sivalabs-blog-samples-code<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Fruzenshtein\/security-spr\">Fruzenshtein\/security-spr<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/e-ivaldi\/easy-bank\">e-ivaldi\/easy-bank<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/fpants\/shoppingcart\">fpants\/shoppingcart<\/a><\/li>\n<li>\u043e\u0442 \u0440\u0430\u0431\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 JetBrains \u0410\u043d\u0434\u0440\u0435\u044f \u0427\u0435\u043f\u0446\u043e\u0432\u0430 <a href=\"https:\/\/github.com\/cheptsov\/SpringMVCApp\">cheptsov\/SpringMVCApp<\/a><\/li>\n<li>\u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f dandelion <a href=\"https:\/\/github.com\/dandelion\/dandelion-samples\">dandelion-samples<\/a><\/li>\n<li><a href=\"http:\/\/outbottle.com\/wp-content\/uploads\/2012\/07\/SpringExceptionHandling.zip\">SpringExceptionHandling<\/a><\/li>\n<li><a href=\"http:\/\/www.concretepage.com\/spring\/spring-security\/download\/spring-security-login-example-database.zip\">spring-security-login-example-database<\/a> <\/li>\n<li>\u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043e\u0442 mkyong: <a href=\"http:\/\/www.mkyong.com\/tutorials\/spring-tutorials\/\">Spring Tutorial<\/a>, <a href=\"http:\/\/www.mkyong.com\/tutorials\/spring-mvc-tutorials\/\">Spring MVC Tutorial<\/a> \u0438 <a href=\"http:\/\/www.mkyong.com\/tutorials\/spring-security-tutorials\/\">Spring Security Tutorial<\/a><\/li>\n<\/ul>\n<h1>  Spring namespace configuration<\/h1>\n<p>\u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 Spring \u0435\u0441\u0442\u044c \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u0435\u0431\u0430\u0433\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0431\u0438\u043d\u044b, \u0433\u0434\u0435 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e. \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"http:\/\/docs.spring.io\/spring\/docs\/current\/spring-framework-reference\/html\/jdbc.html#jdbc-initializing-datasource-xml\">\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e  \u0431\u0430\u0437\u044b<\/a>:<\/p>\n<pre><code class=\"xml\">    &lt;bean class=&quot;org.springframework.jdbc.datasource.init.DataSourceInitializer&quot;           depends-on=&quot;entityManagerFactory&quot;&gt;         &lt;property name=&quot;databasePopulator&quot; ref=&quot;resourceDatabasePopulator&quot;\/&gt;         &lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot;\/&gt;     &lt;\/bean&gt;      &lt;bean id=&quot;resourceDatabasePopulator&quot;           class=&quot;org.springframework.jdbc.datasource.init.ResourceDatabasePopulator&quot;&gt;         &lt;property name=&quot;scripts&quot;&gt;             &lt;array&gt;                 &lt;value&gt;classpath*:db\/${jdbc.initLocation}&lt;\/value&gt;                 &lt;value&gt;classpath*:db\/populateDB.sql&lt;\/value&gt;             &lt;\/array&gt;         &lt;\/property&gt;     &lt;\/bean&gt; <\/code><\/pre>\n<p>\u0438<\/p>\n<pre><code class=\"xml\">&lt;jdbc:initialize-database data-source=&quot;dataSource&quot; enabled=&quot;${database.init}&quot;&gt;     &lt;jdbc:script location=&quot;classpath:db\/${jdbc.initLocation}&quot;\/&gt;     &lt;jdbc:script location=&quot;classpath:db\/populateDB.sql&quot;\/&gt; &lt;\/jdbc:initialize-database&gt; <\/code><\/pre>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0431\u044b\u0432\u0448\u0435\u0433\u043e Acegi Security c\u043e Spring Security (\u0432\u0441\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u044b \u043f\u043e\u0434 <a href=\"http:\/\/www.springframework.org\/schema\/security\/spring-security.xsd\">namespace security<\/a>).<\/p>\n<h1>  @Transactional \u0432 \u0442\u0435\u0441\u0442\u0430\u0445<\/h1>\n<p>\u0412 \u0442\u0435\u0441\u0442\u0430\u0445 Spring \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c: \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 rollback \u0431\u0430\u0437\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0430\u043c @Transactional \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u0437\u0430\u0431\u044b\u043b\u0438 \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u0435\/\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 @Transactional, \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0448\u0435\u043b, \u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u043f\u0430\u043b\u043e. \u0415\u0449\u0435 \u0445\u0443\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0442\u0435\u0441\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u0431\u0430\u0437\u044b: \u043e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0442\u043e\u0442 \u0436\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u043c (\u0441\u043f\u0430\u0441\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e evict \u0438\u043b\u0438 detach). \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u0430\u0437\u044b \u043f\u0440\u0438 \u0434\u0435\u0431\u0430\u0433\u0435 \u0442\u0435\u0441\u0442\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u0430. \u0411\u043e\u043b\u0435\u0435 \u0447\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0431\u0430\u0437\u044b \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u0442\u0435\u0441\u0442\u043e\u043c: <\/p>\n<pre><code class=\"xml\">&lt;bean class=&quot;DbPopulator&quot;&gt;     &lt;constructor-arg name=&quot;scriptLocation&quot; value=&quot;classpath:db\/populateDB.sql&quot;\/&gt; &lt;\/bean&gt; <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"java\">public class DbPopulator extends ResourceDatabasePopulator {     private static final ResourceLoader RESOURCE_LOADER = new DefaultResourceLoader();      @Autowired     private DataSource dataSource;      public DbPopulator(String scriptLocation) {         super(RESOURCE_LOADER.getResource(scriptLocation));     }      public void execute() {         DatabasePopulatorUtils.execute(this, dataSource);     } }      @ContextConfiguration(&quot;classpath:spring\/spring-app.xml&quot;) @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles({&quot;postgres&quot;, &quot;jpa&quot;}) public class TodoItemServiceTest {      @Autowired     private DbPopulator dbPopulator;      @Before     public void setUp() throws Exception {         dbPopulator.execute();     } <\/code><\/pre>\n<h1>  \u041d\u0430\u0441\u0442\u043e\u0440\u043e\u0439\u043a\u0430 EntityManagerFactory<\/h1>\n<p>\u041f\u0440\u0438\u0432\u044b\u043a\u043d\u0443\u0432 \u0432 Spring 3.0 \u043a \u0431\u0430\u0433\u0430\u043c \u043e \u043d\u0435\u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432 persistence.xml \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u043b \u0443\u0434\u0438\u0432\u043b\u0435\u043d, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e! \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043f\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u0432\u0435\u0441\u044c target\/classes \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 entity \u0430\u043d\u043e\u0442\u0430\u0446\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c JPA \u0431\u0435\u0437 persistence.xml. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438 \u043e\u0431\u0449\u0438\u0435 JPA \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u041f\u0440\u0438\u0447\u0435\u043c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043e\u0431\u0449\u0438\u0439 db.properties \u0444\u0430\u0439\u043b: <\/p>\n<pre><code class=\"xml\">        &lt;bean id=&quot;entityManagerFactory&quot; class=&quot;org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean&quot;               p:dataSource-ref=&quot;dataSource&quot;               p:packagesToScan=&quot;**.model&quot;&gt;             &lt;!--p:persistenceUnitName=&quot;persistenceUnit&quot;&gt;--&gt;              &lt;property name=&quot;jpaPropertyMap&quot;&gt;                 &lt;map&gt;                     &lt;entry&gt;                         &lt;key&gt;                             &lt;util:constant static-field=&quot;org.hibernate.cfg.AvailableSettings.FORMAT_SQL&quot;\/&gt;                         &lt;\/key&gt;                         &lt;value&gt;${hibernate.format_sql}&lt;\/value&gt;                     &lt;\/entry&gt;                     &lt;entry&gt;                         &lt;key&gt;                             &lt;util:constant static-field=&quot;org.hibernate.cfg.AvailableSettings.USE_SQL_COMMENTS&quot;\/&gt;                         &lt;\/key&gt;                         &lt;value&gt;${hibernate.use_sql_comments}&lt;\/value&gt;                     &lt;\/entry&gt;                 &lt;\/map&gt;             &lt;\/property&gt;              &lt;property name=&quot;jpaVendorAdapter&quot;&gt;                 &lt;bean class=&quot;org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter&quot;                       p:showSql=&quot;${jpa.showSql}&quot;                       p:generateDdl=&quot;${jpa.generateDdl}&quot;&gt;                 &lt;\/bean&gt;             &lt;\/property&gt;         &lt;\/bean&gt; <\/code><\/pre>\n<h1>  \u0412\u044b\u0431\u043e\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0432.<\/h1>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 DataSource <a href=\"http:\/\/commons.apache.org\/proper\/commons-dbcp\/\">Commons DBCP<\/a> \u043f\u043e\u0445\u043e\u0436\u0435 \u0441\u0434\u0430\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c StackOverflow \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u0440\u0430\u0442\u044c <a href=\"http:\/\/jolbox.com\/\">BoneCP<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 <a href=\"http:\/\/www.playframework.com\/\">playframework<\/a> (\u0435\u0441\u043b\u0438 \u0432\u044b \u0435\u0433\u043e \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0438\u043b\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c, \u0443\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u043b\u0438\u043b\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0443\u0442\u0435\u0447\u0435\u043a \u043f\u0430\u043c\u044f\u0442\u0438, \u043e\u0437\u0432\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0432 <a href=\"http:\/\/www.youtube.com\/watch?v=sSmQ6W-ovZE\">\u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 Plumbr<\/a>). \u0410 \u0432 PetClinic <a href=\"http:\/\/blog.ippon.fr\/2013\/03\/13\/improving-the-performance-of-the-spring-petclinic-sample-application-part-3-of-5\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f tomcat-jdbc<\/a>. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u0441\u044f \u0432 Tomcat, \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u0432 war ( scope=provided ), \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 $TOMCAT_HOME\/lib\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0431\u0430\u0437\u044b, \u0442.\u043a \u0438\u0437 \u0440\u043e\u0434\u043d\u043e\u0433\u043e tomcat-jdbc \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u0430\u0448\u0435\u0433\u043e war \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d\u044b.<br \/>  \u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 \u0432 Tomcat \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u0440\u0430\u0442\u044c \u043f\u0443\u043b \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0432 \u0438\u0437 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 context.xml \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Tomcat:<\/p>\n<pre><code class=\"xml\">    &lt;beans profile=&quot;jndi&quot;&gt;         &lt;jee:jndi-lookup id=&quot;dataSource&quot; jndi-name=&quot;java:comp\/env\/jdbc\/javatop&quot;\/&gt;     &lt;\/beans&gt; <\/code><\/pre>\n<h1>  <a href=\"http:\/\/projects.spring.io\/spring-data-jpa\/\">Spring Data JPA<\/a><\/h1>\n<p>\u041f\u0440\u0438\u0432\u044b\u043a\u043d\u0443\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 AbstractDAO, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043a\u043b\u044e\u0447\u0435\u043c \u0441 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 CRUD \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 EntityManager \u0431\u044b\u043b \u043e\u0431\u0440\u0430\u0434\u043e\u0432\u0430\u043d, \u0447\u0442\u043e \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043e\u043d \u0432\u043e\u0448\u0435\u043b \u0432 Spring, \u043f\u0440\u0430\u0432\u0434\u0430, \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 Spring Data JPA:<br \/>  <code>JpaRepository&lt;T, ID extends Serializable&gt;<\/code><br \/>  \u041e\u043d \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0435\u0433\u043e <code>CrudRepository&lt;T, ID extends Serializable&gt;<\/code> \u0438\u0437 <a href=\"http:\/\/docs.spring.io\/spring-data\/data-commons\/docs\/current\/reference\/html\/\">Spring Data Commons<\/a>.<br \/>  \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 <a href=\"http:\/\/docs.spring.io\/spring-data\/jpa\/docs\/current\/reference\/html\/jpa.repositories.html\">JPA \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c\u0438<\/a> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0440\u0430\u0436\u0430\u0435\u0442: \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c<\/p>\n<pre><code class=\"java\">    public interface UserRepository extends Repository&lt;User, Integer&gt; {        User findByEmail(String email);     } <\/code><\/pre>\n<p>\u0438 \u043c\u0435\u0442\u043e\u0434 \u0441\u0430\u043c \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438!<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u0435\u0440\u0432\u043e\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043c\u0430\u0433\u0438\u0438 \u2014 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, regexp \u0438 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 <code>JpaRepositoryFactory.getRepositoryBaseClass<\/code> \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0439: <code>QueryDslJpaRepository<\/code> (\u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438  <a href=\"http:\/\/www.querydsl.com\/\">Unified Queries for Java<\/a>) \u0438\u043b\u0438 <code>SimpleJpaRepository<\/code> <\/li>\n<li>\u0437\u0430\u0442\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u2014 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b \u043d\u0430 Query (<code>DefaultRepositoryInformation.isQueryMethodCandidate<\/code>).  \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e, \u0442\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u0441\u0435 \u0441 <code>@Query<\/code> \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 \u0438 \u0432\u0441\u0435, \u0447\u0435\u0433\u043e \u043d\u0435\u0442 \u0432 <code>JpaRepository<\/code>; <\/li>\n<li>\u0437\u0430\u0442\u0435\u043c \u0438\u043c\u0435\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u0430\u0440\u0441\u044f\u0442\u0441\u044f \u0432 PartTree \u0447\u0435\u0440\u0435\u0437\n<pre><code class=\"java\">    PartTree.PREFIX_TEMPLATE: Pattern.compile(&quot;^(find|read|get|count|query)(\\\\p{Lu}.*?)??By&quot;) <\/code><\/pre>\n<p> \u0438 \u0438\u0449\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u0440\u043e\u043f\u0435\u0440\u0442\u044f\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438; <\/li>\n<li>\u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u0435\u0442\u043e\u0434 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <a href=\"http:\/\/www.objectdb.com\/java\/jpa\/query\/criteria\">JPA Criteria API<\/a>. <\/li>\n<\/ul>\n<p>\u0420\u0438\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c: \u043c\u043e\u0436\u043d\u043e \u043b\u0438 java \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c:)?<\/p>\n<p>  \u0415\u0441\u043b\u0438 JpaRepository \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c <a href=\"https:\/\/blog.42.nl\/articles\/spring-data-jpa-with-querydsl-repositories-made-easy\/\">\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b Query<\/a>. \u0412 <code>@Query<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c JPQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0435\u043d\u0435\u0440\u044f\u0442\u0441\u044f \u0432 <code>@NamedQuery<\/code>), \u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 <code>@NamedQuery<\/code> \u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u0445 (\u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e \u0432 PetClinic<code> @NamedQuery<\/code> \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0434\u0435\u043f\u043b\u043e\u044f).<br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0435\u0442\u043e\u0434 <\/p>\n<pre><code class=\"java\">    @Modifying     @Transactional     @Query(name = User.DELETE)     int delete(@Param(&quot;id&quot;) int id); <\/code><\/pre>\n<p>\u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 User @NamedQuery<\/p>\n<pre><code class=\"java\">    @NamedQueries({        ...        @NamedQuery(name = User.DELETE, query = &quot;DELETE FROM User u WHERE u.id=:id&quot;)     })      public class User extends NamedEntity {        public static final String DELETE = &quot;User.delete&quot;; <\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 <code>void CrudRepository.delete(ID id)<\/code> \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0437\u043d\u0435\u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u044b\u043c \u043e\u0442 <code>JpaRepository<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>List&lt;T&gt; findAll(Sort sort)<\/code> \u043a\u043b\u0430\u0441\u0441 Sort \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 Spring Data \u0438 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445. \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c \u043a \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u043c \u0432 <code>JpaService<\/code>. \u041d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0434\u0435\u0431\u0430\u0436\u0438\u0442\u044c\u0441\u044f \u0438 \u043b\u043e\u0433\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0412 \u0431\u0438\u0437\u043d\u0435\u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u043b\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>JpaRepository<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u0438\u043b\u0438, \u043f\u0440\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0442 \u043c\u0430\u0440\u043a\u0435\u0440\u0430 <code>org.springframework.data.repository.Repository<\/code> \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <code>@Override<\/code>\u2026 \u0412\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0440\u0435\u0448\u0430\u0435\u0442 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"java\">public interface ProxyUserRepository extends JpaRepository&lt;User, Integer&gt; {      @Modifying     @Query(&quot;DELETE FROM User u WHERE u.id=?1&quot;)     @Transactional     int delete(int id);      @Override     @Transactional     User save(User user);      @Override     User findOne(Integer id);      @Override     List&lt;User&gt; findAll(Sort sort); }  @Repository public class DataJpaUserRepository implements UserRepository {     private static final Sort SORT_NAME_EMAIL = new Sort(&quot;name&quot;, &quot;email&quot;);      @Autowired     private ProxyUserRepository proxy;      @Override     public boolean delete(int id) {         return proxy.delete(id) != 0;     }      @Override     public User save(User user) {         return proxy.save(user);     }      @Override     public User get(int id) {         return proxy.findOne(id);     }      @Override     public List&lt;User&gt; getAll() {     return proxy.findAll(SORT_NAME_EMAIL);     } } <\/code><\/pre>\n<h1>  \u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a: \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u043e \u0442\u0435\u043c\u0430\u043c<\/h1>\n<h3>Spring<\/h3>\n<ul>\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=BmBr5diz8WA\">\u0415\u0432\u0433\u0435\u043d\u0438\u0439 \u0411\u043e\u0440\u0438\u0441\u043e\u0432 \u2014 Spring-\u043f\u043e\u0442\u0440\u043e\u0448\u0438\u0442\u0435\u043b\u044c, \u0447\u0430\u0441\u0442\u044c 1<\/a><\/li>\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=cou_qomYLNU\">\u0415\u0432\u0433\u0435\u043d\u0438\u0439 \u0411\u043e\u0440\u0438\u0441\u043e\u0432 \u2014 Spring-\u043f\u043e\u0442\u0440\u043e\u0448\u0438\u0442\u0435\u043b\u044c, \u0447\u0430\u0441\u0442\u044c 2<\/a><\/li>\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=hRtQFIVJ0ws\">\u0415\u0432\u0433\u0435\u043d\u0438\u0439 \u0411\u043e\u0440\u0438\u0441\u043e\u0432 \u2014 Spring 4.0: \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"http:\/\/jeeconf.com\/archive\/jeeconf-2013\/materials\/spring-data\/\">\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0420\u0435\u0437\u0447\u0438\u043a\u043e\u0432: Spring Data \u2013 \u043d\u043e\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 persistence<\/a><\/li>\n<li>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430: <a href=\"http:\/\/habrahabr.ru\/post\/221939\/\">Spring Roo<\/a><\/li>\n<\/ul>\n<h3>  Maven<\/h3>\n<ul>\n<li>\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u043f\u0440\u043e <a href=\"http:\/\/www.apache-maven.ru\/\">Maven<\/a>.<\/li>\n<li>\u0421\u0442\u0430\u0440\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f <a href=\"http:\/\/habrahabr.ru\/post\/111408\/\">Maven archetype<\/a><\/li>\n<li>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/blogs\/java\/106717\/\">\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 Maven<\/a>. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435- \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c. <\/li>\n<li><a href=\"http:\/\/blog.bintray.com\/2014\/02\/11\/bintray-as-pain-free-gateway-to-maven-central\/\">Bintray: gateway to Maven Central<\/a><\/li>\n<li><a href=\"http:\/\/howtodoinjava.com\/2014\/02\/18\/maven-bom-bill-of-materials-dependency\/\">Maven BOM [Bill Of Materials] Dependency<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 PetClinic \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/li>\n<\/ul>\n<h3>  \u041b\u043e\u0433\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<ul>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/113145\/\">Java Logging: \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u043e\u0448\u043c\u0430\u0440\u0430<\/a>.<\/li>\n<li><a href=\"http:\/\/skipy.ru\/useful\/logging.html\">\u0412\u0435\u0434\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"http:\/\/www.slf4j.org\/legacy.html\">\u0410\u0434\u0430\u043f\u0442\u0435\u0440\u044b slf4j<\/a><\/li>\n<\/ul>\n<h3>  \u041f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/h3>\n<ul>\n<li><a href=\"http:\/\/www.jpab.org\/All\/All\/All.html\">JPA Performance Benchmark<\/a><\/li>\n<li><a href=\"http:\/\/codehelper.ru\/questions\/205\/new\/repository-\u0438-dao-\u043e\u0442\u043b\u0438\u0447\u0438\u044f-\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430-\u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 Repository \u0438 DAO<\/a><\/li>\n<li><a href=\"http:\/\/www.petrikainulainen.net\/spring-data-jpa-tutorial\/\">Spring Data JPA Tutorial<\/a><\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0431\u0443\u0434\u0443 \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u044c 2 \u0441 \u043d\u0435\u0443\u043c\u0435\u0441\u0442\u0438\u0432\u0448\u0438\u043c\u0438\u0441\u044f Spring MVC, Spring Security, Jackson \u0438 \u043f\u0440. <br \/>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0432\u0430\u0448\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u043c \u0442\u0435\u043c\u0430\u043c.      \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/232381\/\"> http:\/\/habrahabr.ru\/post\/232381\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">     \t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/872\/047\/052\/8720470528074f95bc4ff8d0c08b461d.jpg\"\/><br \/>  \u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435!<br \/>  <a href=\"http:\/\/docs.spring.io\/spring\/docs\/current\/spring-framework-reference\/html\/mvc.html\">Spring MVC<\/a>, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"http:\/\/zeroturnaround.com\/rebellabs\/java-tools-and-technologies-landscape-for-2014\/\">\u043e\u0431\u0437\u043e\u0440\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 Java \u0437\u0430 2014 \u0433. \u043e\u0442 RevbelLabs<\/a>, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u0435\u0431 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c. \u0414\u0430\u043b\u0435\u0435 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u0437\u043e\u0440 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043b\u0438\u0434\u0435\u0440\u0430 ORM \u2014 <a href=\"http:\/\/hibernate.org\/orm\/\">Hibernate<\/a> \u0438 \u043b\u0438\u0434\u0435\u0440\u0430 \u0432\u0435\u0431-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u2014 Apache Tomcat. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u044e\u0434\u0430 \u0441\u0430\u043c\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e java script \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/jquery.com\/\">jQuery<\/a>, \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 css \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <a href=\"http:\/\/getbootstrap.com\/\">Bootstrap<\/a>, \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0441\u0430\u043c\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0443\u044e (\u043d\u0435\u0441\u043c\u043e\u0440\u044f \u043d\u0430 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 Gradle) \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 <a href=\"http:\/\/www.apache-maven.ru\/\">Maven<\/a>, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043b\u0438\u0434\u0435\u0440 \u0441\u0440\u0435\u0434\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 <a href=\"http:\/\/junit.org\/\">JUnit<\/a> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Spring \u043e\u0442 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439: <a href=\"https:\/\/github.com\/spring-projects\/spring-petclinic\">Spring Pet Clinic<\/a> (<a href=\"http:\/\/demo-spring-petclinic.cfapps.io\">\u0434\u0435\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/a>). \u041a\u0440\u043e\u043c\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e, \u0432 \u044d\u0442\u043e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u043b\u044e\u0447\u0435\u043d\u044b \u0442\u0430\u043a\u0436\u0435 Spring-Jdbc, Spring-ORM, <a href=\"http:\/\/projects.spring.io\/spring-data-jpa\/\">Spring Data JPA<\/a>, <a href=\"http:\/\/hibernate.org\/validator\/\">Hibernate Validator<\/a>, <a href=\"http:\/\/www.slf4j.org\/\">SLF4J<\/a>, <a href=\"https:\/\/github.com\/FasterXML\/jackson\">Json Jackson<\/a>, <a href=\"http:\/\/ru.wikipedia.org\/wiki\/JSP\">JSP<\/a>, <a href=\"http:\/\/en.wikipedia.org\/wiki\/JavaServer_Pages_Standard_Tag_Library\">JSTL<\/a>, <a href=\"http:\/\/www.webjars.org\/\">WebJars<\/a>, <a href=\"http:\/\/dandelion.github.io\/datatables\/\">Dandelion DataTables<\/a>, <a href=\"http:\/\/hsqldb.org\/\">HSQLDB<\/a>, <a href=\"http:\/\/hamcrest.org\/JavaHamcrest\/\">Hamcrest<\/a>, <a href=\"http:\/\/code.google.com\/p\/mockito\/\">Mockito<\/a> \u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-232381","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/232381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=232381"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/232381\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=232381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=232381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=232381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}