{"id":1584,"date":"2016-10-04T15:30:21","date_gmt":"2016-10-04T13:30:21","guid":{"rendered":"http:\/\/blog.rabahi.net\/?page_id=1584"},"modified":"2017-05-14T12:59:01","modified_gmt":"2017-05-14T10:59:01","slug":"java-spring-hibernate","status":"publish","type":"page","link":"https:\/\/blog.rabahi.net\/?page_id=1584","title":{"rendered":"Java Spring &#8211; Data JPA"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Contents<\/p><ul class=\"toc_list\"><li><a href=\"#Prerequistes\"><span class=\"toc_number toc_depth_1\">1<\/span> Prerequistes<\/a><\/li><li><a href=\"#Dependencies\"><span class=\"toc_number toc_depth_1\">2<\/span> Dependencies<\/a><\/li><li><a href=\"#Configuration\"><span class=\"toc_number toc_depth_1\">3<\/span> Configuration<\/a><ul><li><a href=\"#MainConfigjava\"><span class=\"toc_number toc_depth_2\">3.1<\/span> MainConfig.java<\/a><\/li><li><a href=\"#applicationproperties\"><span class=\"toc_number toc_depth_2\">3.2<\/span> application.properties<\/a><\/li><li><a href=\"#The_model_file\"><span class=\"toc_number toc_depth_2\">3.3<\/span> The model file<\/a><\/li><li><a href=\"#The_repository\"><span class=\"toc_number toc_depth_2\">3.4<\/span> The repository<\/a><\/li><\/ul><\/li><li><a href=\"#Use_Repository\"><span class=\"toc_number toc_depth_1\">4<\/span> Use Repository<\/a><\/li><li><a href=\"#Use_JNDI_DataSource_example_for_Apache_Tomcat\"><span class=\"toc_number toc_depth_1\">5<\/span> Use JNDI DataSource (example for Apache Tomcat)<\/a><\/li><\/ul><\/div>\n<h1><span id=\"Prerequistes\">Prerequistes<\/span><\/h1>\n<p>Please read : <a href=\"?page_id=1549\">Java spring &#8211; quickstart<\/a><\/p>\n<h1><span id=\"Dependencies\">Dependencies<\/span><\/h1>\n<p>Add this to your pom.xml:<\/p>\n<pre lang=\"java\">\r\n<dependency>\r\n    <groupId>org.springframework.boot<\/groupId>\r\n    <artifactId>spring-boot-starter-data-jpa<\/artifactId>\r\n<\/dependency>\r\n\r\n<!-- datasource -->\r\n<dependency>\r\n   <groupId>org.hsqldb<\/groupId>\r\n   <artifactId>hsqldb<\/artifactId>\r\n<\/dependency>\r\n<\/pre>\n<h1><span id=\"Configuration\">Configuration<\/span><\/h1>\n<h2><span id=\"MainConfigjava\">MainConfig.java<\/span><\/h2>\n<p>Enable JPA Repositories like this:<\/p>\n<pre lang=\"java\">\r\n@Configuration\r\n@ComponentScan(basePackages=\"net.rabahi.java.jee.spring\")\r\n@EnableJpaRepositories(basePackages=\"net.rabahi.java.jee.spring.repository\")\r\n@EntityScan(basePackages=\"net.rabahi.java.jee.spring.model\")\r\npublic class MainConfig {\r\n\t\r\n}\r\n<\/pre>\n<h2><span id=\"applicationproperties\">application.properties<\/span><\/h2>\n<p>In src\/main\/resources\/application.properties, you can configure hibernate :<\/p>\n<pre lang=\"properties\">\r\nhibernate.dialect = org.hibernate.dialect.HSQLDialect\r\nhibernate.show_sql = true\r\nhibernate.format_sql = true\r\nhibernate.generate_statistics=true\r\nhibernate.hbm2ddl.auto=create\r\n<\/pre>\n<h2><span id=\"The_model_file\">The model file<\/span><\/h2>\n<pre lang=\"java\">\r\npackage net.rabahi.java.jee.spring.model;\r\n\r\nimport javax.persistence.Column;\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.GeneratedValue;\r\nimport javax.persistence.Id;\r\nimport javax.persistence.Table;\r\n\r\n@Entity\r\n@Table(name=\"CONTACTS\")\r\npublic class Contact {\r\n\r\n\t@Id\r\n\t@Column(name=\"ID\")\r\n\t@GeneratedValue\r\n\tprivate Integer id;\r\n\r\n\t@Column(name=\"FIRSTNAME\")\r\n\tprivate String firstName;\r\n\r\n\t@Column(name=\"LASTNAME\")\r\n\tprivate String lastName;\r\n\r\n\t@Column(name=\"EMAIL\")\r\n\tprivate String email;\r\n\r\n\t@Column(name=\"TELEPHONE\")\r\n\tprivate String telephone;\r\n\r\n\/\/ getters and setters\r\n}\r\n<\/pre>\n<h2><span id=\"The_repository\">The repository<\/span><\/h2>\n<pre lang=\"java\">\r\npackage net.rabahi.java.jee.spring.repository;\r\n\r\nimport java.util.List;\r\nimport org.springframework.data.jpa.repository.JpaRepository;\r\nimport net.rabahi.java.jee.spring.model.Contact;\r\n\r\npublic interface ContactRepository extends JpaRepository<Contact,Integer>{\r\n       Contact findByFirstName(String firstName);\r\n\r\n       List<Contact> findByLastName(String lastName);\r\n\r\n       @Query(\"SELECT f FROM Foo f WHERE LOWER(f.email) = LOWER(:email)\")\r\n       Foo retrieveByEmail(@Param(\"email\") String email);\r\n}\r\n<\/pre>\n<h1><span id=\"Use_Repository\">Use Repository<\/span><\/h1>\n<p>To use the ContactRepository, you have to inject it :<\/p>\n<pre lang=\"java\">\r\n@Controller\r\npublic class ContactController {\r\n\r\n\t@Autowired\r\n\tprivate ContactRepository contactRepository;\r\n\r\n\/\/ mapping\r\n}\r\n<\/pre>\n<p>Then :<\/p>\n<pre lang=\"java\">\r\n@RequestMapping(\"\/contact\/{contactId}\", method=RequestMethod.DELETE)\r\npublic String delete(@PathVariable(\"contactId\") Integer contactId) {\r\n\tcontactRepository.delete(contactId);\r\n        \/\/ your code here\r\n}\r\n<\/pre>\n<h1><span id=\"Use_JNDI_DataSource_example_for_Apache_Tomcat\">Use JNDI DataSource (example for Apache Tomcat)<\/span><\/h1>\n<p>In your application.properties you can add this:<\/p>\n<pre lang=\"properties\">\r\nspring.datasource.jndi-name=java:comp\/env\/jdbc\/mydatasource\r\n<\/pre>\n<p>And use it in the context file:<\/p>\n<pre lang=\"xml\">\r\n<Context>\r\n<Resource name=\"jdbc\/mydatasource\" \r\n          auth=\"Container\"\r\n          type=\"javax.sql.DataSource\"\r\n          username=\"sa\"\r\n          password=\"\"          \r\n          url=\"jdbc:hsqldb:mem:database\"\r\n          driverClassName=\"org.hsqldb.jdbcDriver\"\r\n          initialSize=\"5\"\r\n          maxWait=\"5000\"\r\n          maxActive=\"120\"\r\n          maxIdle=\"5\"              \r\n          poolPreparedStatements=\"true\"\/>\r\n<\/Context>\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Contents1 Prerequistes2 Dependencies3 Configuration3.1 MainConfig.java3.2 application.properties3.3 The model file3.4 The repository4 Use Repository5 Use JNDI DataSource (example for Apache Tomcat) Prerequistes Please read : Java spring &#8211; quickstart Dependencies Add this to your pom.xml: org.springframework.boot spring-boot-starter-data-jpa org.hsqldb hsqldb Configuration MainConfig.java Enable JPA Repositories like this: @Configuration @ComponentScan(basePackages=&#8221;net.rabahi.java.jee.spring&#8221;) @EnableJpaRepositories(basePackages=&#8221;net.rabahi.java.jee.spring.repository&#8221;) @EntityScan(basePackages=&#8221;net.rabahi.java.jee.spring.model&#8221;) public class MainConfig { } application.properties [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1547,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1584","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1584","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1584"}],"version-history":[{"count":7,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1584\/revisions"}],"predecessor-version":[{"id":1979,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1584\/revisions\/1979"}],"up":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1547"}],"wp:attachment":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1584"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}