diff --git a/layers/pom.xml b/layers/pom.xml index 4f70ab1c9..2027f6ae3 100644 --- a/layers/pom.xml +++ b/layers/pom.xml @@ -11,6 +11,22 @@ <groupId>com.iluwatar.layers</groupId> <artifactId>layers</artifactId> <dependencies> + <dependency> + <groupId>org.springframework.data</groupId> + <artifactId>spring-data-jpa</artifactId> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-entitymanager</artifactId> + </dependency> + <dependency> + <groupId>commons-dbcp</groupId> + <artifactId>commons-dbcp</artifactId> + </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> diff --git a/layers/src/main/java/com/iluwatar/layers/App.java b/layers/src/main/java/com/iluwatar/layers/App.java index c6c03d1dd..b02dd561a 100644 --- a/layers/src/main/java/com/iluwatar/layers/App.java +++ b/layers/src/main/java/com/iluwatar/layers/App.java @@ -1,8 +1,48 @@ package com.iluwatar.layers; +import java.util.List; + +import org.springframework.context.support.ClassPathXmlApplicationContext; + public class App { public static void main(String[] args) { - System.out.println("Hello World!"); + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "applicationContext.xml"); + PersonDao dao = context.getBean(PersonDao.class); + + Person peter = new Person("Peter", "Sagan"); + Person nasta = new Person("Nasta", "Kuzminova"); + + // Add new Person records + dao.save(peter); + dao.save(nasta); + + // Count Person records + System.out.println("Count Person records: " + dao.count()); + + // Print all records + List<Person> persons = (List<Person>) dao.findAll(); + for (Person person : persons) { + System.out.println(person); + } + + // Find Person by surname + System.out.println("Find by surname 'Sagan': " + dao.findBySurname("Sagan")); + + // Update Person + nasta.setName("Barbora"); + nasta.setSurname("Spotakova"); + dao.save(nasta); + + System.out.println("Find by id 2: " + dao.findOne(2L)); + + // Remove record from Person + dao.delete(2L); + + // And finally count records + System.out.println("Count Person records: " + dao.count()); + + context.close(); } } diff --git a/layers/src/main/java/com/iluwatar/layers/Person.java b/layers/src/main/java/com/iluwatar/layers/Person.java new file mode 100644 index 000000000..050fc1a28 --- /dev/null +++ b/layers/src/main/java/com/iluwatar/layers/Person.java @@ -0,0 +1,58 @@ +package com.iluwatar.layers; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * + * Person entity + * + */ +@Entity +public class Person { + + @Id + @GeneratedValue + private Long id; + private String name; + private String surname; + + public Person() { + } + + public Person(String name, String surname) { + this.name = name; + this.surname = surname; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + @Override + public String toString() { + return "Person [id=" + id + ", name=" + name + ", surname=" + surname + + "]"; + } +} diff --git a/layers/src/main/java/com/iluwatar/layers/PersonDao.java b/layers/src/main/java/com/iluwatar/layers/PersonDao.java new file mode 100644 index 000000000..34977a9d2 --- /dev/null +++ b/layers/src/main/java/com/iluwatar/layers/PersonDao.java @@ -0,0 +1,17 @@ +package com.iluwatar.layers; + +import java.util.List; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +/** + * + * Person repository + * + */ +@Repository +public interface PersonDao extends CrudRepository<Person, Long> { + + public List<Person> findBySurname(String surname); +} diff --git a/layers/src/main/resources/META-INF/persistence.xml b/layers/src/main/resources/META-INF/persistence.xml new file mode 100644 index 000000000..0aded0dbd --- /dev/null +++ b/layers/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<persistence version="1.0" + xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> + + <persistence-unit name="jpaData" /> + +</persistence> diff --git a/layers/src/main/resources/applicationContext.xml b/layers/src/main/resources/applicationContext.xml new file mode 100644 index 000000000..3fe15b2f6 --- /dev/null +++ b/layers/src/main/resources/applicationContext.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" + xmlns:security="http://www.springframework.org/schema/security" + xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:jpa="http://www.springframework.org/schema/data/jpa" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd + http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd"> + + <jpa:repositories base-package="com.iluwatar" /> + + <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> + <property name="entityManagerFactory" ref="entityManagerFactory" /> + </bean> + + <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" + destroy-method="close"> + <property name="driverClassName" value="org.h2.Driver" /> + <property name="url" value="jdbc:h2:~/databases/person" /> + <property name="username" value="sa" /> + <property name="password" value="sa" /> + </bean> + + <bean id="entityManagerFactory" + class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> + <property name="dataSource" ref="dataSource" /> + <property name="packagesToScan" value="com.iluwatar" /> + <property name="persistenceProvider"> + <bean class="org.hibernate.ejb.HibernatePersistence" /> + </property> + <property name="jpaProperties"> + <map> + <entry key="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" /> + <entry key="hibernate.hbm2ddl.auto" value="create-drop" /> + </map> + </property> + </bean> +</beans>