diff --git a/jpa-storedprocedure/pom.xml b/jpa-storedprocedure/pom.xml index bbe00d6897..b2ebaa32e2 100644 --- a/jpa-storedprocedure/pom.xml +++ b/jpa-storedprocedure/pom.xml @@ -9,8 +9,8 @@ 7.0 - 11.2.0.4 5.1.0.Final + 5.1.38 @@ -33,29 +33,6 @@ - - org.apache.maven.plugins - maven-install-plugin - 2.3.1 - - - install-oracle-jdbc - - install-file - - clean - - com.oracle - ojdbc6 - ${oracle.version} - jar - true - true - ${project.basedir}/src/lib/ojdbc6.jar - - - - @@ -76,20 +53,6 @@ ${hibernate.version} - - - com.oracle - ojdbc6 - ${oracle.version} - - - - - org.postgresql - postgresql - 9.4.1208 - - diff --git a/jpa-storedprocedure/src/lib/ojdbc6.jar b/jpa-storedprocedure/src/lib/ojdbc6.jar deleted file mode 100644 index 767eba7f8f..0000000000 Binary files a/jpa-storedprocedure/src/lib/ojdbc6.jar and /dev/null differ diff --git a/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/Car.java b/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/Car.java index ea6c38dd8e..676d76307e 100644 --- a/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/Car.java +++ b/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/Car.java @@ -1,25 +1,27 @@ package com.baeldung.jpa.model; -import javax.persistence.*; - -/** - * Created by Giuseppe Bueti on 22/02/2016. - */ +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.NamedStoredProcedureQueries; +import javax.persistence.NamedStoredProcedureQuery; +import javax.persistence.ParameterMode; +import javax.persistence.StoredProcedureParameter; +import javax.persistence.Table; @Entity @Table(name = "CAR") @NamedStoredProcedureQueries({ - @NamedStoredProcedureQuery(name = "findByModelProcedure", procedureName = "FIND_CAR_BY_MODEL", resultClasses = { Car.class }, parameters = { @StoredProcedureParameter(name = "data", type = Car.class, mode = ParameterMode.REF_CURSOR), - @StoredProcedureParameter(name = "p_model", type = String.class, mode = ParameterMode.IN) }), - @NamedStoredProcedureQuery(name = "findByYearProcedure", procedureName = "FIND_CAR_BY_YEAR", resultClasses = { Car.class }, parameters = { @StoredProcedureParameter(name = "data", type = Car.class, mode = ParameterMode.REF_CURSOR), - @StoredProcedureParameter(name = "p_year", type = Integer.class, mode = ParameterMode.IN) }) }) + @NamedStoredProcedureQuery(name = "findByYearProcedure", procedureName = "FIND_CAR_BY_YEAR", resultClasses = { Car.class }, parameters = { @StoredProcedureParameter(name = "p_year", type = Integer.class, mode = ParameterMode.IN) }) }) public class Car { private long id; private String model; private Integer year; - public Car(String model, Integer year) { + public Car(final String model, final Integer year) { this.model = model; this.year = year; } @@ -28,15 +30,13 @@ public class Car { } @Id - @SequenceGenerator(name = "CarIdSequence", sequenceName = "SEQ_CAR_ID", allocationSize = 1) - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CarIdSequence") - // @GeneratedValue(strategy = GenerationType.IDENTITY) -- for MySQL + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", unique = true, nullable = false, scale = 0) public long getId() { return id; } - public void setId(long id) { + public void setId(final long id) { this.id = id; } @@ -45,7 +45,7 @@ public class Car { return model; } - public void setModel(String model) { + public void setModel(final String model) { this.model = model; } @@ -54,7 +54,7 @@ public class Car { return year; } - public void setYear(Integer year) { + public void setYear(final Integer year) { this.year = year; } } diff --git a/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/QueryParameter.java b/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/QueryParameter.java index 326886842d..0a15213f62 100644 --- a/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/QueryParameter.java +++ b/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/QueryParameter.java @@ -7,16 +7,16 @@ public class QueryParameter { private Map parameters = null; - private QueryParameter(String name, Object value) { + private QueryParameter(final String name, final Object value) { this.parameters = new HashMap<>(); this.parameters.put(name, value); } - public static QueryParameter with(String name, Object value) { + public static QueryParameter with(final String name, final Object value) { return new QueryParameter(name, value); } - public QueryParameter and(String name, Object value) { + public QueryParameter and(final String name, final Object value) { this.parameters.put(name, value); return this; } @@ -24,4 +24,5 @@ public class QueryParameter { public Map parameters() { return this.parameters; } + } \ No newline at end of file diff --git a/jpa-storedprocedure/src/main/resources/META-INF/persistence.xml b/jpa-storedprocedure/src/main/resources/META-INF/persistence.xml index 3cb81fc9c1..4c443cb7cf 100644 --- a/jpa-storedprocedure/src/main/resources/META-INF/persistence.xml +++ b/jpa-storedprocedure/src/main/resources/META-INF/persistence.xml @@ -9,22 +9,12 @@ org.hibernate.jpa.HibernatePersistenceProvider com.baeldung.jpa.model.Car - - - - - - - - - - + \ No newline at end of file diff --git a/jpa-storedprocedure/src/main/resources/config/database/FindCarByYearProcedureOracle.sql b/jpa-storedprocedure/src/main/resources/config/database/FindCarByYearProcedureOracle.sql deleted file mode 100644 index f9230aad42..0000000000 --- a/jpa-storedprocedure/src/main/resources/config/database/FindCarByYearProcedureOracle.sql +++ /dev/null @@ -1,7 +0,0 @@ -create or replace PROCEDURE FIND_CAR_BY_YEAR ( p_year IN NUMBER, data OUT SYS_REFCURSOR ) AS - BEGIN - OPEN data FOR - SELECT ID, MODEL, YEAR - FROM CAR - WHERE YEAR = p_year; - END FIND_CAR_BY_YEAR; \ No newline at end of file diff --git a/jpa-storedprocedure/src/main/resources/config/database/create_database.sql b/jpa-storedprocedure/src/main/resources/config/database/create_database.sql deleted file mode 100644 index d84007b74d..0000000000 --- a/jpa-storedprocedure/src/main/resources/config/database/create_database.sql +++ /dev/null @@ -1,34 +0,0 @@ -CREATE TABLESPACE JPA DATAFILE 'C:\oraclexe\app\oracle\oradata\XE\JPA.DBF' SIZE 100M AUTOEXTEND ON MAXSIZE 2048M; - ---DROP USER JPA CASCADE; -CREATE USER JPA IDENTIFIED BY JPA DEFAULT TABLESPACE JPA; -ALTER USER JPA QUOTA UNLIMITED ON "JPA" ACCOUNT UNLOCK; - -GRANT CREATE SESSION TO "JPA"; -GRANT ALTER SESSION TO "JPA"; -GRANT CREATE TABLE TO "JPA"; -GRANT CREATE TRIGGER TO "JPA"; -GRANT CREATE VIEW TO "JPA"; -GRANT CREATE DIMENSION TO "JPA"; -GRANT CREATE CLUSTER TO "JPA"; -GRANT CREATE INDEXTYPE TO "JPA"; -GRANT CREATE ROLE TO "JPA"; -GRANT CREATE SEQUENCE TO "JPA"; -GRANT CREATE TYPE TO "JPA"; -GRANT CREATE MATERIALIZED VIEW TO "JPA"; -GRANT CREATE PROCEDURE TO "JPA"; -GRANT CREATE SYNONYM TO "JPA"; - -CREATE SEQUENCE SEQ_CAR_ID INCREMENT BY 1 START WITH 1 MAXVALUE 999999999999999 MINVALUE 1; - -CREATE TABLE CAR -( - ID NUMBER NOT NULL, - MODEL VARCHAR2(50) NOT NULL, - YEAR NUMBER(4) NOT NULL -); - -ALTER TABLE CAR ADD CONSTRAINT CAR_PK PRIMARY KEY ( ID ); - -commit; - diff --git a/jpa-storedprocedure/src/main/resources/config/database/insert_cars.sql b/jpa-storedprocedure/src/main/resources/config/database/insert_cars.sql index 4879ffc79e..89f69ac1ee 100644 --- a/jpa-storedprocedure/src/main/resources/config/database/insert_cars.sql +++ b/jpa-storedprocedure/src/main/resources/config/database/insert_cars.sql @@ -1,5 +1,5 @@ INSERT INTO CAR (ID, MODEL, YEAR) VALUES ('123456', 'Camaro', '2012'); -INSERT INTO "JPA"."CAR" (ID, MODEL, YEAR) VALUES ('12112', 'Fiat Panda', '2000'); -INSERT INTO "JPA"."CAR" (ID, MODEL, YEAR) VALUES ('111000', 'Fiat Punto', '2007'); -INSERT INTO "JPA"."CAR" (ID, MODEL, YEAR) VALUES ('3382', 'Citroen C3', '2009'); +INSERT INTO CAR (ID, MODEL, YEAR) VALUES ('12112', 'Fiat Panda', '2000'); +INSERT INTO CAR (ID, MODEL, YEAR) VALUES ('111000', 'Fiat Punto', '2007'); +INSERT INTO CAR (ID, MODEL, YEAR) VALUES ('3382', 'Citroen C3', '2009'); commit; \ No newline at end of file diff --git a/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java b/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java index 9d66c9f15c..69351d9683 100644 --- a/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java +++ b/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java @@ -1,13 +1,20 @@ package com.baeldung.jpa.storedprocedure; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.ParameterMode; +import javax.persistence.Persistence; +import javax.persistence.StoredProcedureQuery; + +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + import com.baeldung.jpa.model.Car; -import org.junit.*; -import javax.persistence.*; - -/** - * Created by Giuseppe Bueti on 23/02/2016. - */ public class StoredProcedureTest { private static EntityManagerFactory factory = null; @@ -25,13 +32,13 @@ public class StoredProcedureTest { @Test public void createCarTest() { - EntityTransaction transaction = entityManager.getTransaction(); + final EntityTransaction transaction = entityManager.getTransaction(); try { transaction.begin(); - Car car = new Car("Fiat Punto", 2015); + final Car car = new Car("Fiat Marea", 2015); entityManager.persist(car); transaction.commit(); - } catch (Exception e) { + } catch (final Exception e) { System.out.println(e.getCause()); if (transaction.isActive()) { transaction.rollback(); @@ -40,31 +47,15 @@ public class StoredProcedureTest { } @Test - public void findCarsByYear() { + public void findCarsByYearNamedProcedure() { final StoredProcedureQuery findByYearProcedure = entityManager.createNamedStoredProcedureQuery("findByYearProcedure"); - StoredProcedureQuery storedProcedure = findByYearProcedure.setParameter("p_year", 2015); + final StoredProcedureQuery storedProcedure = findByYearProcedure.setParameter("p_year", 2015); storedProcedure.getResultList().forEach(c -> Assert.assertEquals(new Integer(2015), ((Car) c).getYear())); } @Test - public void findCarsByModel() { - final StoredProcedureQuery findByModelProcedure = entityManager.createNamedStoredProcedureQuery("findByModelProcedure"); - StoredProcedureQuery storedProcedure = findByModelProcedure.setParameter("p_model", "Camaro"); - storedProcedure.getResultList().forEach(c -> Assert.assertEquals("Camaro", ((Car) c).getModel())); - } - - @Test - public void findCarsByYearNoNamedStored() { - StoredProcedureQuery findByYearProcedure = entityManager.createStoredProcedureQuery("FIND_CAR_BY_YEAR", Car.class).registerStoredProcedureParameter("data", Void.class, ParameterMode.REF_CURSOR) - .registerStoredProcedureParameter("p_year", Integer.class, ParameterMode.IN).setParameter("p_year", 2015); - - findByYearProcedure.getResultList().forEach(c -> Assert.assertEquals(new Integer(2015), ((Car) c).getYear())); - } - - @Test - @Ignore - public void findCarsByYearMySql() { - StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("FIND_CAR_BY_YEAR", Car.class).registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN).setParameter(1, 2015); + public void findCarsByYearNoNamed() { + final StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("FIND_CAR_BY_YEAR", Car.class).registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN).setParameter(1, 2015); storedProcedure.getResultList().forEach(c -> Assert.assertEquals(new Integer(2015), ((Car) c).getYear())); } diff --git a/jpa-storedprocedure/src/test/resources/persistence.xml b/jpa-storedprocedure/src/test/resources/persistence.xml index d118a264d3..d94221b54f 100644 --- a/jpa-storedprocedure/src/test/resources/persistence.xml +++ b/jpa-storedprocedure/src/test/resources/persistence.xml @@ -9,23 +9,13 @@ org.hibernate.jpa.HibernatePersistenceProvider com.baeldung.jpa.model.Car - - - - - - - - - - + diff --git a/querydsl/.classpath b/querydsl/.classpath index 534b5e52fa..264bb653bb 100644 --- a/querydsl/.classpath +++ b/querydsl/.classpath @@ -6,6 +6,7 @@ + diff --git a/querydsl/src/main/java/org/baeldung/dao/PersonDao.java b/querydsl/src/main/java/org/baeldung/dao/PersonDao.java index 17be05bff8..7df4ebb22d 100644 --- a/querydsl/src/main/java/org/baeldung/dao/PersonDao.java +++ b/querydsl/src/main/java/org/baeldung/dao/PersonDao.java @@ -1,11 +1,10 @@ package org.baeldung.dao; -import org.baeldung.entity.Person; - -import javax.persistence.Tuple; import java.util.List; import java.util.Map; +import org.baeldung.entity.Person; + public interface PersonDao { public Person save(Person person); diff --git a/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java b/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java index 209ff699af..555ec226ce 100644 --- a/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java +++ b/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java @@ -1,18 +1,17 @@ package org.baeldung.dao; -import com.mysema.query.group.GroupBy; -import com.mysema.query.jpa.impl.JPAQuery; -import com.mysema.query.jpa.impl.JPAQueryFactory; +import java.util.List; +import java.util.Map; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + import org.baeldung.entity.Person; import org.baeldung.entity.QPerson; import org.springframework.stereotype.Repository; -import javax.inject.Provider; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Tuple; -import java.util.List; -import java.util.Map; +import com.mysema.query.group.GroupBy; +import com.mysema.query.jpa.impl.JPAQuery; @Repository public class PersonDaoImpl implements PersonDao { @@ -20,49 +19,48 @@ public class PersonDaoImpl implements PersonDao { @PersistenceContext private EntityManager em; - public Person save(Person person) { + @Override + public Person save(final Person person) { em.persist(person); return person; } @Override - public List findPersonsByFirstnameQueryDSL(String firstname) { - JPAQuery query = new JPAQuery(em); - QPerson person = QPerson.person; + public List findPersonsByFirstnameQueryDSL(final String firstname) { + final JPAQuery query = new JPAQuery(em); + final QPerson person = QPerson.person; return query.from(person).where(person.firstname.eq(firstname)).list(person); } @Override - public List findPersonsByFirstnameAndSurnameQueryDSL(String firstname, String surname) { - JPAQuery query = new JPAQuery(em); - QPerson person = QPerson.person; + public List findPersonsByFirstnameAndSurnameQueryDSL(final String firstname, final String surname) { + final JPAQuery query = new JPAQuery(em); + final QPerson person = QPerson.person; - return query.from(person).where(person.firstname.eq(firstname).and( - person.surname.eq(surname))).list(person); + return query.from(person).where(person.firstname.eq(firstname).and(person.surname.eq(surname))).list(person); } @Override - public List findPersonsByFirstnameInDescendingOrderQueryDSL(String firstname) { - JPAQuery query = new JPAQuery(em); - QPerson person = QPerson.person; + public List findPersonsByFirstnameInDescendingOrderQueryDSL(final String firstname) { + final JPAQuery query = new JPAQuery(em); + final QPerson person = QPerson.person; - return query.from(person).where(person.firstname.eq(firstname)).orderBy( - person.surname.desc()).list(person); + return query.from(person).where(person.firstname.eq(firstname)).orderBy(person.surname.desc()).list(person); } @Override public int findMaxAge() { - JPAQuery query = new JPAQuery(em); - QPerson person = QPerson.person; + final JPAQuery query = new JPAQuery(em); + final QPerson person = QPerson.person; return query.from(person).list(person.age.max()).get(0); } @Override public Map findMaxAgeByName() { - JPAQuery query = new JPAQuery(em); - QPerson person = QPerson.person; + final JPAQuery query = new JPAQuery(em); + final QPerson person = QPerson.person; return query.from(person).transform(GroupBy.groupBy(person.firstname).as(GroupBy.max(person.age))); } diff --git a/querydsl/src/main/java/org/baeldung/entity/Person.java b/querydsl/src/main/java/org/baeldung/entity/Person.java index 056b2eb79c..6f04210d90 100644 --- a/querydsl/src/main/java/org/baeldung/entity/Person.java +++ b/querydsl/src/main/java/org/baeldung/entity/Person.java @@ -1,6 +1,10 @@ package org.baeldung.entity; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; @Entity public class Person { @@ -21,12 +25,12 @@ public class Person { Person() { } - public Person(String firstname, String surname) { + public Person(final String firstname, final String surname) { this.firstname = firstname; this.surname = surname; } - public Person(String firstname, String surname, int age) { + public Person(final String firstname, final String surname, final int age) { this(firstname, surname); this.age = age; } @@ -35,7 +39,7 @@ public class Person { return id; } - public void setId(Long id) { + public void setId(final Long id) { this.id = id; } @@ -43,7 +47,7 @@ public class Person { return firstname; } - public void setFirstname(String firstname) { + public void setFirstname(final String firstname) { this.firstname = firstname; } @@ -51,7 +55,7 @@ public class Person { return surname; } - public void setSurname(String surname) { + public void setSurname(final String surname) { this.surname = surname; } @@ -59,7 +63,7 @@ public class Person { return age; } - public void setAge(int age) { + public void setAge(final int age) { this.age = age; } } \ No newline at end of file diff --git a/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java b/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java index da3a95b7f8..0e5996a8c8 100644 --- a/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java +++ b/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java @@ -1,6 +1,7 @@ package org.baeldung.dao; -import junit.framework.Assert; +import java.util.Map; + import org.baeldung.entity.Person; import org.junit.Test; import org.junit.runner.RunWith; @@ -10,47 +11,48 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.annotation.Transactional; -import java.util.Map; - +import junit.framework.Assert; @ContextConfiguration("/test-context.xml") @RunWith(SpringJUnit4ClassRunner.class) @Transactional -@TransactionConfiguration(defaultRollback=true) +@TransactionConfiguration(defaultRollback = true) public class PersonDaoTest { @Autowired private PersonDao personDao; + // + @Test public void testCreation() { personDao.save(new Person("Erich", "Gamma")); - Person person = new Person("Kent", "Beck"); + final Person person = new Person("Kent", "Beck"); personDao.save(person); personDao.save(new Person("Ralph", "Johnson")); - Person personFromDb = personDao.findPersonsByFirstnameQueryDSL("Kent").get(0); + final Person personFromDb = personDao.findPersonsByFirstnameQueryDSL("Kent").get(0); Assert.assertEquals(person.getId(), personFromDb.getId()); } @Test public void testMultipleFilter() { personDao.save(new Person("Erich", "Gamma")); - Person person = personDao.save(new Person("Ralph", "Beck")); - Person person2 = personDao.save(new Person("Ralph", "Johnson")); + final Person person = personDao.save(new Person("Ralph", "Beck")); + final Person person2 = personDao.save(new Person("Ralph", "Johnson")); - Person personFromDb = personDao.findPersonsByFirstnameAndSurnameQueryDSL("Ralph", "Johnson").get(0); + final Person personFromDb = personDao.findPersonsByFirstnameAndSurnameQueryDSL("Ralph", "Johnson").get(0); Assert.assertNotSame(person.getId(), personFromDb.getId()); Assert.assertEquals(person2.getId(), personFromDb.getId()); } @Test public void testOrdering() { - Person person = personDao.save(new Person("Kent", "Gamma")); + final Person person = personDao.save(new Person("Kent", "Gamma")); personDao.save(new Person("Ralph", "Johnson")); - Person person2 = personDao.save(new Person("Kent", "Zivago")); + final Person person2 = personDao.save(new Person("Kent", "Zivago")); - Person personFromDb = personDao.findPersonsByFirstnameInDescendingOrderQueryDSL("Kent").get(0); + final Person personFromDb = personDao.findPersonsByFirstnameInDescendingOrderQueryDSL("Kent").get(0); Assert.assertNotSame(person.getId(), personFromDb.getId()); Assert.assertEquals(person2.getId(), personFromDb.getId()); } @@ -61,7 +63,7 @@ public class PersonDaoTest { personDao.save(new Person("Ralph", "Johnson", 35)); personDao.save(new Person("Kent", "Zivago", 30)); - int maxAge = personDao.findMaxAge(); + final int maxAge = personDao.findMaxAge(); Assert.assertTrue(maxAge == 35); } @@ -71,7 +73,7 @@ public class PersonDaoTest { personDao.save(new Person("Ralph", "Johnson", 35)); personDao.save(new Person("Kent", "Zivago", 30)); - Map maxAge = personDao.findMaxAgeByName(); + final Map maxAge = personDao.findMaxAgeByName(); Assert.assertTrue(maxAge.size() == 2); Assert.assertSame(35, maxAge.get("Ralph")); Assert.assertSame(30, maxAge.get("Kent")); diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 694a21d5d2..d1e24a4d3d 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -99,6 +99,19 @@ thymeleaf ${thymeleaf.version} + + + + com.fasterxml.jackson.core + jackson-core + 2.1.2 + + + com.fasterxml.jackson.core + jackson-databind + 2.1.2 + + diff --git a/spring-mvc-java/src/main/java/org/baeldung/model/Employee.java b/spring-mvc-java/src/main/java/org/baeldung/model/Employee.java new file mode 100644 index 0000000000..5365068a89 --- /dev/null +++ b/spring-mvc-java/src/main/java/org/baeldung/model/Employee.java @@ -0,0 +1,51 @@ +package org.baeldung.model; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Employee { + + private long id; + private String name; + private String contactNumber; + + public Employee() { + super(); + } + + public Employee(final long id, final String name, final String contactNumber) { + this.id = id; + this.name = name; + this.contactNumber = contactNumber; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public long getId() { + return id; + } + + public void setId(final long id) { + this.id = id; + } + + public String getContactNumber() { + return contactNumber; + } + + public void setContactNumber(final String contactNumber) { + this.contactNumber = contactNumber; + } + + @Override + public String toString() { + return "Employee [id=" + id + ", name=" + name + ", contactNumber=" + contactNumber + "]"; + } + +} diff --git a/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/ContentManagementWebConfig.java b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/ContentManagementWebConfig.java new file mode 100644 index 0000000000..6fd68394ea --- /dev/null +++ b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/ContentManagementWebConfig.java @@ -0,0 +1,53 @@ +package org.baeldung.spring.web.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.InternalResourceViewResolver; +import org.springframework.web.servlet.view.JstlView; + +@EnableWebMvc +@Configuration +public class ContentManagementWebConfig extends WebMvcConfigurerAdapter { + + public ContentManagementWebConfig() { + super(); + } + + // API + + @Override + public void configureContentNegotiation(final ContentNegotiationConfigurer configurer) { + configurer.favorPathExtension(true). + favorParameter(false). + parameterName("mediaType"). + ignoreAcceptHeader(true). + useJaf(false). + defaultContentType(MediaType.TEXT_HTML). + mediaType("xml", MediaType.APPLICATION_XML). + mediaType("html", MediaType.TEXT_HTML). + mediaType("json", MediaType.APPLICATION_JSON); + } + + @Override + public void addViewControllers(final ViewControllerRegistry registry) { + super.addViewControllers(registry); + registry.addViewController("/sample.html"); + } + + @Bean + public ViewResolver viewResolver() { + final InternalResourceViewResolver bean = new InternalResourceViewResolver(); + bean.setViewClass(JstlView.class); + bean.setPrefix("/WEB-INF/view/"); + bean.setSuffix(".jsp"); + bean.setOrder(0); + return bean; + } + +} diff --git a/spring-mvc-java/src/main/java/org/baeldung/web/controller/EmployeeController.java b/spring-mvc-java/src/main/java/org/baeldung/web/controller/EmployeeController.java new file mode 100644 index 0000000000..8a41718b8c --- /dev/null +++ b/spring-mvc-java/src/main/java/org/baeldung/web/controller/EmployeeController.java @@ -0,0 +1,55 @@ +package org.baeldung.web.controller; + +import java.util.HashMap; +import java.util.Map; + +import org.baeldung.model.Employee; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class EmployeeController { + + Map employeeMap = new HashMap<>(); + + @RequestMapping(value = "/employee", method = RequestMethod.GET) + public ModelAndView showForm() { + return new ModelAndView("employeeHome", "employee", new Employee()); + } + + @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) + public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { + return employeeMap.get(Id); + } + + @RequestMapping(value = "/employee/{Id}", method = RequestMethod.GET) + public String getEmployeeByIdHtmlView(@PathVariable final long Id, final ModelMap model) { + model.addAttribute("name", employeeMap.get(Id).getName()); + model.addAttribute("contactNumber", employeeMap.get(Id).getContactNumber()); + model.addAttribute("id", employeeMap.get(Id).getId()); + + return "employeeView"; + } + + @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) + public String submit(@ModelAttribute("employee") final Employee employee, final BindingResult result, final ModelMap model) { + if (result.hasErrors()) { + return "error"; + } + model.addAttribute("name", employee.getName()); + model.addAttribute("contactNumber", employee.getContactNumber()); + model.addAttribute("id", employee.getId()); + + employeeMap.put(employee.getId(), employee); + + return "employeeView"; + } + +} diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeHome.jsp b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeHome.jsp new file mode 100644 index 0000000000..c000bea39f --- /dev/null +++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeHome.jsp @@ -0,0 +1,33 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> + + + +Form Example - Register an Employee + + +

Welcome, Enter The Employee Details

+ + + + + + + + + + + + + + + + + + +
Name
Id
Contact Number
+
+ + + + \ No newline at end of file diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp new file mode 100644 index 0000000000..1457bc5fc8 --- /dev/null +++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp @@ -0,0 +1,24 @@ +<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> + + +Spring MVC Form Handling + + + +

Submitted Employee Information

+ + + + + + + + + + + + + +
Name :${name}
ID :${id}
Contact Number :${contactNumber}
+ + \ No newline at end of file diff --git a/spring-mvc-xml/pom.xml b/spring-mvc-xml/pom.xml index fc7deaad61..f77efe501b 100644 --- a/spring-mvc-xml/pom.xml +++ b/spring-mvc-xml/pom.xml @@ -98,6 +98,18 @@ test + + + com.fasterxml.jackson.core + jackson-core + 2.7.2 + + + com.fasterxml.jackson.core + jackson-databind + 2.7.2 + + diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java index baffe7b503..753f243edb 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java @@ -1,34 +1,56 @@ package com.baeldung.spring.controller; -import javax.validation.Valid; +import java.util.HashMap; +import java.util.Map; -import com.baeldung.spring.form.Employee; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; +import com.baeldung.spring.form.Employee; + @Controller public class EmployeeController { - @RequestMapping(value = "/employee", method = RequestMethod.GET) - public ModelAndView showForm() { - return new ModelAndView("employeeHome", "employee", new Employee()); - } + Map employeeMap = new HashMap<>(); - @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) - public String submit(@Valid @ModelAttribute("employee") final Employee employee, final BindingResult result, final ModelMap model) { - if (result.hasErrors()) { - return "error"; - } + @RequestMapping(value = "/employee", method = RequestMethod.GET) + public ModelAndView showForm() { + return new ModelAndView("employeeHome", "employee", new Employee()); + } - model.addAttribute("name", employee.getName()); - model.addAttribute("contactNumber", employee.getContactNumber()); - model.addAttribute("id", employee.getId()); - return "employeeView"; - } + @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) + public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { + return employeeMap.get(Id); + } + + @RequestMapping(value = "/employee/{Id}", method = RequestMethod.GET) + public String getEmployeeByIdHtmlView(@PathVariable final long Id, final ModelMap model) { + model.addAttribute("name", employeeMap.get(Id).getName()); + model.addAttribute("contactNumber", employeeMap.get(Id).getContactNumber()); + model.addAttribute("id", employeeMap.get(Id).getId()); + + return "employeeView"; + } + + @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) + public String submit(@ModelAttribute("employee") final Employee employee, final BindingResult result, final ModelMap model) { + if (result.hasErrors()) { + return "error"; + } + model.addAttribute("name", employee.getName()); + model.addAttribute("contactNumber", employee.getContactNumber()); + model.addAttribute("id", employee.getId()); + + employeeMap.put(employee.getId(), employee); + + return "employeeView"; + } } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Employee.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Employee.java index f41496212f..66b2e9f185 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Employee.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Employee.java @@ -2,7 +2,9 @@ package com.baeldung.spring.form; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +@XmlRootElement public class Employee { private long id; diff --git a/spring-mvc-xml/src/main/resources/contentManagementWebMvcConfig.xml b/spring-mvc-xml/src/main/resources/contentManagementWebMvcConfig.xml new file mode 100644 index 0000000000..0fcd85e399 --- /dev/null +++ b/spring-mvc-xml/src/main/resources/contentManagementWebMvcConfig.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java index ac2aa6beb6..2baf88a62d 100644 --- a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java +++ b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java @@ -25,7 +25,7 @@ public class MyUserDetailsService implements UserDetailsService { private final Log logger = LogFactory.getLog(this.getClass()); - private Map availableUsers = new HashMap(); + private final Map availableUsers = new HashMap(); public MyUserDetailsService() { @@ -33,12 +33,13 @@ public class MyUserDetailsService implements UserDetailsService { } - @Override - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + // + @Override + public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException { logger.info("Load user by username " + username); - UserDetails user = availableUsers.get(username); + final UserDetails user = availableUsers.get(username); if (user == null) { throw new UsernameNotFoundException("Username not found"); } else { @@ -52,7 +53,6 @@ public class MyUserDetailsService implements UserDetailsService { * in database or retrieved from another system). */ private void populateDemoUsers() { - logger.info("Populate demo users"); availableUsers.put("user", createUser("user", "password", Arrays.asList(SecurityRole.ROLE_USER))); @@ -70,12 +70,11 @@ public class MyUserDetailsService implements UserDetailsService { * Role names user is assigned to * @return User */ - private User createUser(String username, String password, List roles) { - + private User createUser(final String username, final String password, final List roles) { logger.info("Create user " + username); - List authorities = new ArrayList(); - for (SecurityRole role : roles) { + final List authorities = new ArrayList(); + for (final SecurityRole role : roles) { authorities.add(new SimpleGrantedAuthority(role.toString())); } return new User(username, password, true, true, true, true, authorities); diff --git a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/DatabaseConfig.java b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/PersistenceConfig.java similarity index 96% rename from spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/DatabaseConfig.java rename to spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/PersistenceConfig.java index 7f0428df77..02308e64fb 100644 --- a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/DatabaseConfig.java +++ b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/PersistenceConfig.java @@ -18,11 +18,13 @@ import com.google.common.base.Preconditions; @Configuration @EnableTransactionManagement @PropertySource({ "classpath:persistence-h2.properties" }) -public class DatabaseConfig { +public class PersistenceConfig { @Autowired private Environment env; + // + @Bean public DataSource dataSource() { final DriverManagerDataSource dataSource = new DriverManagerDataSource(); @@ -32,4 +34,5 @@ public class DatabaseConfig { dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass"))); return dataSource; } + } diff --git a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/SecurityConfig.java b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/SecurityConfig.java index b3549511fc..2d9bb8e731 100644 --- a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/SecurityConfig.java +++ b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/spring/SecurityConfig.java @@ -1,11 +1,9 @@ package org.baeldung.spring; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.web.authentication.AuthenticationSuccessHandler; /** * Spring Security Configuration. @@ -15,9 +13,6 @@ import org.springframework.security.web.authentication.AuthenticationSuccessHand @ImportResource({ "classpath:webSecurityConfig.xml" }) public class SecurityConfig extends WebSecurityConfigurerAdapter { - @Autowired - private AuthenticationSuccessHandler mySimpleUrlAuthenticationSuccessHandler; - public SecurityConfig() { super(); } diff --git a/spring-security-mvc-persisted-remember-me/src/main/resources/webSecurityConfig.xml b/spring-security-mvc-persisted-remember-me/src/main/resources/webSecurityConfig.xml index a11f13c9ab..d1f081cb9b 100644 --- a/spring-security-mvc-persisted-remember-me/src/main/resources/webSecurityConfig.xml +++ b/spring-security-mvc-persisted-remember-me/src/main/resources/webSecurityConfig.xml @@ -1,55 +1,51 @@ - + http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd" +> - - - + + + - + - + - + - + - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file