Spring MVC Example

Spring MVC Example Commit Details

Date:2011-09-22 19:59:50 (14 years 6 months ago)
Author:Michael Ahlberg
Branch:master
Commit:3696887cce4da0c14c10695e7878c1420e52ad53
Parents: ec94f934f0a3084b89b4c7eb5cf9bb705fec367d
Message:Created packages

Changes:
Dsrc/main/java/info/ahlberg/spring/ContactDAO.java (full)
Rsrc/main/java/info/ahlberg/spring/ContactController.java → src/main/java/info/ahlberg/spring/controller/ContactController.java
Rsrc/main/java/info/ahlberg/spring/ContactDAOWithJPA.java → src/main/java/info/ahlberg/spring/dao/ContactDAOWithJPA.java
Rsrc/main/java/info/ahlberg/spring/GenericDAO.java → src/main/java/info/ahlberg/spring/dao/GenericDAO.java
Rsrc/main/java/info/ahlberg/spring/GenericDAOWithJPA.java → src/main/java/info/ahlberg/spring/dao/GenericDAOWithJPA.java
Rsrc/main/java/info/ahlberg/spring/Contact.java → src/main/java/info/ahlberg/spring/domain/Contact.java
Rsrc/main/java/info/ahlberg/spring/ContactService.java → src/main/java/info/ahlberg/spring/service/ContactService.java
Rsrc/main/java/info/ahlberg/spring/ContactServiceImpl.java → src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java
Asrc/main/java/info/ahlberg/spring/dao/ContactDAO.java (full)
Msrc/main/webapp/WEB-INF/view/index.jsp (1 diff)

File differences

src/main/java/info/ahlberg/spring/Contact.java
1package info.ahlberg.spring;
2
3import java.io.Serializable;
4
5import javax.persistence.Column;
6import javax.persistence.Entity;
7import javax.persistence.GeneratedValue;
8import javax.persistence.GenerationType;
9import javax.persistence.Id;
10import javax.persistence.Version;
11
12@Entity
13public class Contact implements Serializable {
14    private static final long serialVersionUID = 1L;
15
16    @Id
17    @GeneratedValue(strategy = GenerationType.AUTO)
18    private Long id;
19
20    @Version
21    private Long version;
22
23    @Column(nullable = false)
24    private String name;
25
26    public Long getId() {
27        return id;
28    }
29
30    public void setId(Long id) {
31        this.id = id;
32    }
33
34    public Long getVersion() {
35        return version;
36    }
37
38    public void setVersion(Long version) {
39        this.version = version;
40    }
41
42    public String getName() {
43        return name;
44    }
45
46    public void setName(String name) {
47        this.name = name;
48    }
49
50}
src/main/java/info/ahlberg/spring/ContactController.java
1package info.ahlberg.spring;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Controller;
5import org.springframework.ui.Model;
6import org.springframework.web.bind.annotation.RequestMapping;
7import org.springframework.web.bind.annotation.RequestParam;
8
9@Controller
10@RequestMapping("/")
11public class ContactController {
12    @Autowired
13    private ContactService contactService;
14
15    @RequestMapping("/")
16    String index(Model model) {
17        model.addAttribute("msg", "A nice message");
18
19        model.addAttribute("contacts", contactService.findAll());
20
21        return "index";
22    }
23
24
25    @RequestMapping("/add")
26    String add(@RequestParam String name, Model model) {
27        model.addAttribute("msg", "A nice message");
28
29        Contact contact = new Contact();
30        contact.setName(name);
31        contactService.save(contact);
32
33        model.addAttribute("contacts", contactService.findAll());
34
35        return "index";
36    }
37}
src/main/java/info/ahlberg/spring/ContactDAO.java
1package info.ahlberg.spring;
2
3public interface ContactDAO extends GenericDAO<Contact, Long> {
4
5}
src/main/java/info/ahlberg/spring/ContactDAOWithJPA.java
1package info.ahlberg.spring;
2
3import org.springframework.stereotype.Repository;
4
5
6@Repository
7public class ContactDAOWithJPA extends GenericDAOWithJPA<Contact, Long> implements ContactDAO {
8
9}
src/main/java/info/ahlberg/spring/ContactService.java
1package info.ahlberg.spring;
2
3public interface ContactService {
4
5    Object findAll();
6
7    void save(Contact contact);
8
9}
src/main/java/info/ahlberg/spring/ContactServiceImpl.java
1package info.ahlberg.spring;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Service;
5import org.springframework.transaction.annotation.Transactional;
6
7@Service
8public class ContactServiceImpl implements ContactService {
9    @Autowired
10    private ContactDAO contactDAO;
11
12    @Override
13    public Object findAll() {
14        return contactDAO.loadAll();
15    }
16
17    @Override
18    @Transactional
19    public void save(Contact contact) {
20        contactDAO.persist(contact);
21    }
22
23}
src/main/java/info/ahlberg/spring/GenericDAO.java
1package info.ahlberg.spring;
2
3import java.io.Serializable;
4import java.util.List;
5
6public interface GenericDAO<T, ID extends Serializable> {
7
8    T loadById(ID id);
9
10    void persist(T entity);
11
12    void update(T entity);
13
14    void delete(T entity);
15
16    List<T> loadAll();
17
18    void flush();
19}
src/main/java/info/ahlberg/spring/GenericDAOWithJPA.java
1package info.ahlberg.spring;
2
3import java.io.Serializable;
4import java.lang.reflect.ParameterizedType;
5import java.util.List;
6
7import javax.persistence.EntityManager;
8import javax.persistence.PersistenceContext;
9
10public abstract class GenericDAOWithJPA<T, ID extends Serializable> implements GenericDAO<T, ID> {
11
12    private Class<T> persistentClass;
13
14    protected EntityManager entityManager;
15
16    @SuppressWarnings("unchecked")
17    public GenericDAOWithJPA() {
18        this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
19                .getActualTypeArguments()[0];
20    }
21
22    @PersistenceContext
23    public void setEntityManager(EntityManager entityManager) {
24        this.entityManager = entityManager;
25    }
26
27    public void flush() {
28        entityManager.flush();
29    }
30
31    public Class<T> getPersistentClass() {
32        return persistentClass;
33    }
34
35    public T loadById(ID id) {
36        if(id == null) {
37            return null;
38        } else {
39            return entityManager.find(persistentClass, id);
40        }
41    }
42
43    public void persist(T entity) {
44        entityManager.persist(entity);
45    }
46
47    public void update(T entity) {
48        entityManager.merge(entity);
49        entityManager.flush();
50    }
51
52    public void delete(T entity) {
53        entityManager.remove(entity);
54    }
55
56    @SuppressWarnings("unchecked")
57    public List<T> loadAll() {
58        return entityManager.createQuery("Select t from " + persistentClass.getSimpleName() + " t")
59                .setHint("org.hibernate.cacheable", true).getResultList();
60    }
61}
src/main/java/info/ahlberg/spring/controller/ContactController.java
1package info.ahlberg.spring.controller;
2
3import info.ahlberg.spring.domain.Contact;
4import info.ahlberg.spring.service.ContactService;
5
6import org.springframework.beans.factory.annotation.Autowired;
7import org.springframework.stereotype.Controller;
8import org.springframework.ui.Model;
9import org.springframework.web.bind.annotation.RequestMapping;
10import org.springframework.web.bind.annotation.RequestParam;
11
12@Controller
13@RequestMapping("/")
14public class ContactController {
15    @Autowired
16    private ContactService contactService;
17
18    @RequestMapping("/")
19    String index(Model model) {
20        model.addAttribute("msg", "A nice message");
21
22        model.addAttribute("contacts", contactService.findAll());
23
24        return "index";
25    }
26
27
28    @RequestMapping("/add")
29    String add(@RequestParam String name, Model model) {
30        model.addAttribute("msg", "A nice message");
31
32        Contact contact = new Contact();
33        contact.setName(name);
34        contactService.save(contact);
35
36        model.addAttribute("contacts", contactService.findAll());
37
38        return "index";
39    }
40}
src/main/java/info/ahlberg/spring/dao/ContactDAO.java
1package info.ahlberg.spring.dao;
2
3import info.ahlberg.spring.domain.Contact;
4
5public interface ContactDAO extends GenericDAO<Contact, Long> {
6
7}
src/main/java/info/ahlberg/spring/dao/ContactDAOWithJPA.java
1package info.ahlberg.spring.dao;
2
3import info.ahlberg.spring.domain.Contact;
4
5import org.springframework.stereotype.Repository;
6
7
8@Repository
9public class ContactDAOWithJPA extends GenericDAOWithJPA<Contact, Long> implements ContactDAO {
10
11}
src/main/java/info/ahlberg/spring/dao/GenericDAO.java
1package info.ahlberg.spring.dao;
2
3import java.io.Serializable;
4import java.util.List;
5
6public interface GenericDAO<T, ID extends Serializable> {
7
8    T loadById(ID id);
9
10    void persist(T entity);
11
12    void update(T entity);
13
14    void delete(T entity);
15
16    List<T> loadAll();
17
18    void flush();
19}
src/main/java/info/ahlberg/spring/dao/GenericDAOWithJPA.java
1package info.ahlberg.spring.dao;
2
3import java.io.Serializable;
4import java.lang.reflect.ParameterizedType;
5import java.util.List;
6
7import javax.persistence.EntityManager;
8import javax.persistence.PersistenceContext;
9
10public abstract class GenericDAOWithJPA<T, ID extends Serializable> implements GenericDAO<T, ID> {
11
12    private Class<T> persistentClass;
13
14    protected EntityManager entityManager;
15
16    @SuppressWarnings("unchecked")
17    public GenericDAOWithJPA() {
18        this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
19                .getActualTypeArguments()[0];
20    }
21
22    @PersistenceContext
23    public void setEntityManager(EntityManager entityManager) {
24        this.entityManager = entityManager;
25    }
26
27    public void flush() {
28        entityManager.flush();
29    }
30
31    public Class<T> getPersistentClass() {
32        return persistentClass;
33    }
34
35    public T loadById(ID id) {
36        if(id == null) {
37            return null;
38        } else {
39            return entityManager.find(persistentClass, id);
40        }
41    }
42
43    public void persist(T entity) {
44        entityManager.persist(entity);
45    }
46
47    public void update(T entity) {
48        entityManager.merge(entity);
49        entityManager.flush();
50    }
51
52    public void delete(T entity) {
53        entityManager.remove(entity);
54    }
55
56    @SuppressWarnings("unchecked")
57    public List<T> loadAll() {
58        return entityManager.createQuery("Select t from " + persistentClass.getSimpleName() + " t")
59                .setHint("org.hibernate.cacheable", true).getResultList();
60    }
61}
src/main/java/info/ahlberg/spring/domain/Contact.java
1package info.ahlberg.spring.domain;
2
3import java.io.Serializable;
4
5import javax.persistence.Column;
6import javax.persistence.Entity;
7import javax.persistence.GeneratedValue;
8import javax.persistence.GenerationType;
9import javax.persistence.Id;
10import javax.persistence.Version;
11
12@Entity
13public class Contact implements Serializable {
14    private static final long serialVersionUID = 1L;
15
16    @Id
17    @GeneratedValue(strategy = GenerationType.AUTO)
18    private Long id;
19
20    @Version
21    private Long version;
22
23    @Column(nullable = false)
24    private String name;
25
26    public Long getId() {
27        return id;
28    }
29
30    public void setId(Long id) {
31        this.id = id;
32    }
33
34    public Long getVersion() {
35        return version;
36    }
37
38    public void setVersion(Long version) {
39        this.version = version;
40    }
41
42    public String getName() {
43        return name;
44    }
45
46    public void setName(String name) {
47        this.name = name;
48    }
49
50}
src/main/java/info/ahlberg/spring/service/ContactService.java
1package info.ahlberg.spring.service;
2
3import info.ahlberg.spring.domain.Contact;
4
5public interface ContactService {
6
7    Object findAll();
8
9    void save(Contact contact);
10
11}
src/main/java/info/ahlberg/spring/service/ContactServiceImpl.java
1package info.ahlberg.spring.service;
2
3import info.ahlberg.spring.dao.ContactDAO;
4import info.ahlberg.spring.domain.Contact;
5
6import org.springframework.beans.factory.annotation.Autowired;
7import org.springframework.stereotype.Service;
8import org.springframework.transaction.annotation.Transactional;
9
10@Service
11public class ContactServiceImpl implements ContactService {
12    @Autowired
13    private ContactDAO contactDAO;
14
15    @Override
16    public Object findAll() {
17        return contactDAO.loadAll();
18    }
19
20    @Override
21    @Transactional
22    public void save(Contact contact) {
23        contactDAO.persist(contact);
24    }
25
26}
src/main/webapp/WEB-INF/view/index.jsp
55    xmlns:form="http://www.springframework.org/tags/form"
66    xmlns:spring="http://www.springframework.org/tags">
7<jsp:directive.page contentType="text/html" pageEncoding="UTF-8" />
7<jsp:directive.page contentType="text/html" pageEncoding="utf-8" />
88<jsp:output omit-xml-declaration="true" />
99<jsp:output doctype-root-element="html" doctype-system="about:legacy-compat" />

Archive Download the corresponding diff file

Branches