diff --git a/src/main/java/info/ahlberg/spring/Contact.java b/src/main/java/info/ahlberg/spring/Contact.java deleted file mode 100755 index 13190a1..0000000 --- a/src/main/java/info/ahlberg/spring/Contact.java +++ /dev/null @@ -1,50 +0,0 @@ -package info.ahlberg.spring; - -import java.io.Serializable; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Version; - -@Entity -public class Contact implements Serializable { - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - @Version - private Long version; - - @Column(nullable = false) - private String name; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getVersion() { - return version; - } - - public void setVersion(Long version) { - this.version = version; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - -} diff --git a/src/main/java/info/ahlberg/spring/ContactController.java b/src/main/java/info/ahlberg/spring/ContactController.java deleted file mode 100755 index 97ce1d7..0000000 --- a/src/main/java/info/ahlberg/spring/ContactController.java +++ /dev/null @@ -1,37 +0,0 @@ -package info.ahlberg.spring; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; - -@Controller -@RequestMapping("/") -public class ContactController { - @Autowired - private ContactService contactService; - - @RequestMapping("/") - String index(Model model) { - model.addAttribute("msg", "A nice message"); - - model.addAttribute("contacts", contactService.findAll()); - - return "index"; - } - - - @RequestMapping("/add") - String add(@RequestParam String name, Model model) { - model.addAttribute("msg", "A nice message"); - - Contact contact = new Contact(); - contact.setName(name); - contactService.save(contact); - - model.addAttribute("contacts", contactService.findAll()); - - return "index"; - } -} diff --git a/src/main/java/info/ahlberg/spring/ContactDAO.java b/src/main/java/info/ahlberg/spring/ContactDAO.java deleted file mode 100755 index c66753f..0000000 --- a/src/main/java/info/ahlberg/spring/ContactDAO.java +++ /dev/null @@ -1,5 +0,0 @@ -package info.ahlberg.spring; - -public interface ContactDAO extends GenericDAO { - -} diff --git a/src/main/java/info/ahlberg/spring/ContactDAOWithJPA.java b/src/main/java/info/ahlberg/spring/ContactDAOWithJPA.java deleted file mode 100755 index f138b07..0000000 --- a/src/main/java/info/ahlberg/spring/ContactDAOWithJPA.java +++ /dev/null @@ -1,9 +0,0 @@ -package info.ahlberg.spring; - -import org.springframework.stereotype.Repository; - - -@Repository -public class ContactDAOWithJPA extends GenericDAOWithJPA implements ContactDAO { - -} diff --git a/src/main/java/info/ahlberg/spring/ContactService.java b/src/main/java/info/ahlberg/spring/ContactService.java deleted file mode 100755 index afa56fa..0000000 --- a/src/main/java/info/ahlberg/spring/ContactService.java +++ /dev/null @@ -1,9 +0,0 @@ -package info.ahlberg.spring; - -public interface ContactService { - - Object findAll(); - - void save(Contact contact); - -} diff --git a/src/main/java/info/ahlberg/spring/ContactServiceImpl.java b/src/main/java/info/ahlberg/spring/ContactServiceImpl.java deleted file mode 100755 index e0325df..0000000 --- a/src/main/java/info/ahlberg/spring/ContactServiceImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package info.ahlberg.spring; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -public class ContactServiceImpl implements ContactService { - @Autowired - private ContactDAO contactDAO; - - @Override - public Object findAll() { - return contactDAO.loadAll(); - } - - @Override - @Transactional - public void save(Contact contact) { - contactDAO.persist(contact); - } - -} diff --git a/src/main/java/info/ahlberg/spring/GenericDAO.java b/src/main/java/info/ahlberg/spring/GenericDAO.java deleted file mode 100755 index 539127d..0000000 --- a/src/main/java/info/ahlberg/spring/GenericDAO.java +++ /dev/null @@ -1,19 +0,0 @@ -package info.ahlberg.spring; - -import java.io.Serializable; -import java.util.List; - -public interface GenericDAO { - - T loadById(ID id); - - void persist(T entity); - - void update(T entity); - - void delete(T entity); - - List loadAll(); - - void flush(); -} diff --git a/src/main/java/info/ahlberg/spring/GenericDAOWithJPA.java b/src/main/java/info/ahlberg/spring/GenericDAOWithJPA.java deleted file mode 100755 index 4fbb5b5..0000000 --- a/src/main/java/info/ahlberg/spring/GenericDAOWithJPA.java +++ /dev/null @@ -1,61 +0,0 @@ -package info.ahlberg.spring; - -import java.io.Serializable; -import java.lang.reflect.ParameterizedType; -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - -public abstract class GenericDAOWithJPA implements GenericDAO { - - private Class persistentClass; - - protected EntityManager entityManager; - - @SuppressWarnings("unchecked") - public GenericDAOWithJPA() { - this.persistentClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()) - .getActualTypeArguments()[0]; - } - - @PersistenceContext - public void setEntityManager(EntityManager entityManager) { - this.entityManager = entityManager; - } - - public void flush() { - entityManager.flush(); - } - - public Class getPersistentClass() { - return persistentClass; - } - - public T loadById(ID id) { - if(id == null) { - return null; - } else { - return entityManager.find(persistentClass, id); - } - } - - public void persist(T entity) { - entityManager.persist(entity); - } - - public void update(T entity) { - entityManager.merge(entity); - entityManager.flush(); - } - - public void delete(T entity) { - entityManager.remove(entity); - } - - @SuppressWarnings("unchecked") - public List loadAll() { - return entityManager.createQuery("Select t from " + persistentClass.getSimpleName() + " t") - .setHint("org.hibernate.cacheable", true).getResultList(); - } -} diff --git a/src/main/java/info/ahlberg/spring/controller/ContactController.java b/src/main/java/info/ahlberg/spring/controller/ContactController.java new file mode 100755 index 0000000..62adee5 --- /dev/null +++ b/src/main/java/info/ahlberg/spring/controller/ContactController.java @@ -0,0 +1,40 @@ +package info.ahlberg.spring.controller; + +import info.ahlberg.spring.domain.Contact; +import info.ahlberg.spring.service.ContactService; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@RequestMapping("/") +public class ContactController { + @Autowired + private ContactService contactService; + + @RequestMapping("/") + String index(Model model) { + model.addAttribute("msg", "A nice message"); + + model.addAttribute("contacts", contactService.findAll()); + + return "index"; + } + + + @RequestMapping("/add") + String add(@RequestParam String name, Model model) { + model.addAttribute("msg", "A nice message"); + + Contact contact = new Contact(); + contact.setName(name); + contactService.save(contact); + + model.addAttribute("contacts", contactService.findAll()); + + return "index"; + } +} diff --git a/src/main/java/info/ahlberg/spring/dao/ContactDAO.java b/src/main/java/info/ahlberg/spring/dao/ContactDAO.java new file mode 100755 index 0000000..fead4cc --- /dev/null +++ b/src/main/java/info/ahlberg/spring/dao/ContactDAO.java @@ -0,0 +1,7 @@ +package info.ahlberg.spring.dao; + +import info.ahlberg.spring.domain.Contact; + +public interface ContactDAO extends GenericDAO { + +} diff --git a/src/main/java/info/ahlberg/spring/dao/ContactDAOWithJPA.java b/src/main/java/info/ahlberg/spring/dao/ContactDAOWithJPA.java new file mode 100755 index 0000000..2226afc --- /dev/null +++ b/src/main/java/info/ahlberg/spring/dao/ContactDAOWithJPA.java @@ -0,0 +1,11 @@ +package info.ahlberg.spring.dao; + +import info.ahlberg.spring.domain.Contact; + +import org.springframework.stereotype.Repository; + + +@Repository +public class ContactDAOWithJPA extends GenericDAOWithJPA implements ContactDAO { + +} diff --git a/src/main/java/info/ahlberg/spring/dao/GenericDAO.java b/src/main/java/info/ahlberg/spring/dao/GenericDAO.java new file mode 100755 index 0000000..713fcf6 --- /dev/null +++ b/src/main/java/info/ahlberg/spring/dao/GenericDAO.java @@ -0,0 +1,19 @@ +package info.ahlberg.spring.dao; + +import java.io.Serializable; +import java.util.List; + +public interface GenericDAO { + + T loadById(ID id); + + void persist(T entity); + + void update(T entity); + + void delete(T entity); + + List loadAll(); + + void flush(); +} diff --git a/src/main/java/info/ahlberg/spring/dao/GenericDAOWithJPA.java b/src/main/java/info/ahlberg/spring/dao/GenericDAOWithJPA.java new file mode 100755 index 0000000..ec208d3 --- /dev/null +++ b/src/main/java/info/ahlberg/spring/dao/GenericDAOWithJPA.java @@ -0,0 +1,61 @@ +package info.ahlberg.spring.dao; + +import java.io.Serializable; +import java.lang.reflect.ParameterizedType; +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +public abstract class GenericDAOWithJPA implements GenericDAO { + + private Class persistentClass; + + protected EntityManager entityManager; + + @SuppressWarnings("unchecked") + public GenericDAOWithJPA() { + this.persistentClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()) + .getActualTypeArguments()[0]; + } + + @PersistenceContext + public void setEntityManager(EntityManager entityManager) { + this.entityManager = entityManager; + } + + public void flush() { + entityManager.flush(); + } + + public Class getPersistentClass() { + return persistentClass; + } + + public T loadById(ID id) { + if(id == null) { + return null; + } else { + return entityManager.find(persistentClass, id); + } + } + + public void persist(T entity) { + entityManager.persist(entity); + } + + public void update(T entity) { + entityManager.merge(entity); + entityManager.flush(); + } + + public void delete(T entity) { + entityManager.remove(entity); + } + + @SuppressWarnings("unchecked") + public List loadAll() { + return entityManager.createQuery("Select t from " + persistentClass.getSimpleName() + " t") + .setHint("org.hibernate.cacheable", true).getResultList(); + } +} diff --git a/src/main/java/info/ahlberg/spring/domain/Contact.java b/src/main/java/info/ahlberg/spring/domain/Contact.java new file mode 100755 index 0000000..fbba243 --- /dev/null +++ b/src/main/java/info/ahlberg/spring/domain/Contact.java @@ -0,0 +1,50 @@ +package info.ahlberg.spring.domain; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Version; + +@Entity +public class Contact implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @Version + private Long version; + + @Column(nullable = false) + private String name; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getVersion() { + return version; + } + + public void setVersion(Long version) { + this.version = version; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/src/main/java/info/ahlberg/spring/service/ContactService.java b/src/main/java/info/ahlberg/spring/service/ContactService.java new file mode 100755 index 0000000..107b54c --- /dev/null +++ b/src/main/java/info/ahlberg/spring/service/ContactService.java @@ -0,0 +1,11 @@ +package info.ahlberg.spring.service; + +import info.ahlberg.spring.domain.Contact; + +public interface ContactService { + + Object findAll(); + + void save(Contact contact); + +} diff --git a/src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java b/src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java new file mode 100755 index 0000000..e47996b --- /dev/null +++ b/src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java @@ -0,0 +1,26 @@ +package info.ahlberg.spring.service; + +import info.ahlberg.spring.dao.ContactDAO; +import info.ahlberg.spring.domain.Contact; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class ContactServiceImpl implements ContactService { + @Autowired + private ContactDAO contactDAO; + + @Override + public Object findAll() { + return contactDAO.loadAll(); + } + + @Override + @Transactional + public void save(Contact contact) { + contactDAO.persist(contact); + } + +} diff --git a/src/main/webapp/WEB-INF/view/index.jsp b/src/main/webapp/WEB-INF/view/index.jsp index dd9c741..3bffc51 100755 --- a/src/main/webapp/WEB-INF/view/index.jsp +++ b/src/main/webapp/WEB-INF/view/index.jsp @@ -5,7 +5,7 @@ xmlns:form="http://www.springframework.org/tags/form" xmlns:spring="http://www.springframework.org/tags"> - +