CREATE TABLE `category` ( `categoryId` int(11) NOT NULL AUTO_INCREMENT, `categoryName` varchar(255) DEFAULT NULL, PRIMARY KEY (`categoryId`) )
CREATE TABLE `publication` ( `pubId` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(255) DEFAULT NULL, `Title` varchar(255) DEFAULT NULL, `categoryId` int(11) DEFAULT NULL, PRIMARY KEY (`pubId`), KEY `FK23254A0CAF274936` (`categoryId`), CONSTRAINT `FK23254A0CAF274936` FOREIGN KEY (`categoryId`) REFERENCES `category` (`categoryId`) )
database.driver=com.mysql.jdbc.Driver database.url=jdbc:mysql://localhost:3306/DAVDB database.user=root database.password=root hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=true hibernate.hbm2ddl.auto=create
package com.dineshonjava.bean; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="Category") public class CategoryBean { @Id @Column(name="categoryId") @GeneratedValue(strategy=GenerationType.AUTO) private Integer categoryId; @Column(name="categoryName") private String categoryName; public Integer getCategoryId() { return categoryId; } public void setCategoryId(Integer categoryId) { this.categoryId = categoryId; } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } }
package com.dineshonjava.bean; 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.JoinColumn; import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @Table(name="Publication") public class PublicationBean implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "pubId") private Integer pubId; @Column(name="Title") private String pubTitle; @OneToOne @JoinColumn(name="categoryId") private CategoryBean category; @Column(name="content") private String pubContent; public Integer getPubId() { return pubId; } public void setPubId(Integer pubId) { this.pubId = pubId; } public String getPubTitle() { return pubTitle; } public void setPubTitle(String pubTitle) { this.pubTitle = pubTitle; } public String getPubContent() { return pubContent; } public CategoryBean getCategory() { return category; } public void setCategory(CategoryBean category) { this.category = category; } public void setPubContent(String pubContent) { this.pubContent = pubContent; } }
package com.dineshonjava.dao; import java.util.List; import com.dineshonjava.bean.CategoryBean; public interface CategoryDao { public void addCategory(CategoryBean categoryBean); public List<CategoryBean> getCategories(); public CategoryBean getCategory(int categoryId); public void deleteCategory(int categoryId); }
package com.dineshonjava.dao; import java.util.List; import com.dineshonjava.bean.PublicationBean; public interface PublicationDao { public void addPublication(PublicationBean publicationBean); public List<PublicationBean> getPublications(); public PublicationBean getPublication(int pubId); public void deletePublication(int pubId); }
package com.dineshonjava.dao; import java.util.List; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.dineshonjava.bean.CategoryBean; /** * @author Dinesh Rajput * */ @Repository("categoryDao") public class CategoryDaoImpl implements CategoryDao { @Autowired private SessionFactory sessionFactory; @Override public void addCategory(CategoryBean categoryBean) { sessionFactory.getCurrentSession().saveOrUpdate(categoryBean); } @SuppressWarnings("unchecked") @Override public List<CategoryBean> getCategories() { return (List<CategoryBean>) sessionFactory.getCurrentSession().createCriteria(CategoryBean.class).list(); } @Override public CategoryBean getCategory(int categoryId) { return (CategoryBean) sessionFactory.getCurrentSession().get(CategoryBean.class, categoryId); } @Override public void deleteCategory(int categoryId) { sessionFactory.getCurrentSession().createQuery("DELETE FROM category WHERE categoryId = "+categoryId).executeUpdate(); } }
package com.dineshonjava.dao; import java.util.List; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.dineshonjava.bean.PublicationBean; /** * @author Dinesh Rajput * */ @Repository("publicationDao") public class PublicationDaoImpl implements PublicationDao { @Autowired private SessionFactory sessionFactory; public void addPublication(PublicationBean publicationBean) { sessionFactory.getCurrentSession().saveOrUpdate(publicationBean); } @SuppressWarnings("unchecked") @Override public List<PublicationBean> getPublications() { return (List<PublicationBean>) sessionFactory.getCurrentSession().createCriteria(PublicationBean.class).list(); } @Override public PublicationBean getPublication(int pubId) { return (PublicationBean) sessionFactory.getCurrentSession().get(PublicationBean.class, pubId); } @Override public void deletePublication(int pubId) { sessionFactory.getCurrentSession().createQuery("DELETE FROM Publication WHERE pubId = "+pubId).executeUpdate(); } }
package com.dineshonjava.service; import java.util.List; import com.dineshonjava.bean.CategoryBean; public interface CategoryService { public void addCategory(CategoryBean categoryBean); public List<CategoryBean> getCategories(); public CategoryBean getCategory(int categoryId); public void deleteCategory(int categoryId); }CategoryServiceImpl.java
package com.dineshonjava.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.dineshonjava.bean.CategoryBean; import com.dineshonjava.dao.CategoryDao; /** * @author Dinesh Rajput * */ @Service("categoryService") @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public class CategoryServiceImpl implements CategoryService { @Autowired private CategoryDao categoryDao; @Transactional(propagation = Propagation.REQUIRED, readOnly = false) public void addCategory(CategoryBean categoryBean) { categoryDao.addCategory(categoryBean); } @Override public List<CategoryBean> getCategories() { return categoryDao.getCategories(); } @Override public CategoryBean getCategory(int categoryId) { return categoryDao.getCategory(categoryId); } @Override public void deleteCategory(int categoryId) { categoryDao.deleteCategory(categoryId); } }PublicationService.java
package com.dineshonjava.service; import java.util.List; import com.dineshonjava.bean.PublicationBean; public interface PublicationService { public void addPublication(PublicationBean publicationBean); public List<PublicationBean> getPublications(); public PublicationBean getPublication(int pubId); public void deletePublication(int pubId); }PublicationServiceImpl.java
package com.dineshonjava.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.dineshonjava.bean.PublicationBean; import com.dineshonjava.dao.PublicationDao; /** * @author Dinesh Rajput * */ @Service("publicationService") @Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public class PublicationServiceImpl implements PublicationService { @Autowired private PublicationDao publicationDao; @Transactional(propagation = Propagation.REQUIRED, readOnly = false) public void addPublication(PublicationBean publicationBean) { publicationDao.addPublication(publicationBean); } public List<PublicationBean> getPublications() { return publicationDao.getPublications(); } @Override public PublicationBean getPublication(int pubId) { return publicationDao.getPublication(pubId); } @Override public void deletePublication(int pubId) { publicationDao.deletePublication(pubId); } }
package com.dineshonjava.controller; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.dineshonjava.bean.CategoryBean; import com.dineshonjava.service.CategoryService; /** * @author Dinesh Rajput * */ @Controller public class CategoryController { @Autowired private CategoryService categoryService; @RequestMapping(value = "/saveCategory", method = RequestMethod.POST) public ModelAndView saveEmployee(@ModelAttribute("command") CategoryBean category, BindingResult result) { categoryService.addCategory(category); return new ModelAndView("redirect:/addCategory.html"); } @RequestMapping(value = "/addCategory", method = RequestMethod.GET) public ModelAndView addCategory(@ModelAttribute("command") CategoryBean category, BindingResult result) { Map<String, Object> model = new HashMap<String, Object>(); model.put("categories", categoryService.getCategories()); return new ModelAndView("addCategory", model); } @RequestMapping(value = "/deleteCategory", method = RequestMethod.GET) public ModelAndView deleteCategory(@ModelAttribute("command") CategoryBean category, BindingResult result) { categoryService.deleteCategory(category.getCategoryId()); Map<String, Object> model = new HashMap<String, Object>(); model.put("categories", categoryService.getCategories()); return new ModelAndView("addCategory", model); } @RequestMapping(value = "/editCategory", method = RequestMethod.GET) public ModelAndView editCategory(@ModelAttribute("command") CategoryBean category, BindingResult result) { Map<String, Object> model = new HashMap<String, Object>(); model.put("category", categoryService.getCategory(category.getCategoryId())); model.put("categories", categoryService.getCategories()); return new ModelAndView("addCategory", model); } @RequestMapping(value="/categories", method = RequestMethod.GET) public List<CategoryBean> getCategories() { return categoryService.getCategories(); } }PublicationController.java
package com.dineshonjava.controller; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.dineshonjava.bean.PublicationBean; import com.dineshonjava.service.CategoryService; import com.dineshonjava.service.PublicationService; @Controller public class PublicationController { @Autowired private PublicationService publicationService; @Autowired private CategoryService categoryService; @RequestMapping(value = "/savePublication", method = RequestMethod.POST) public ModelAndView saveEmployee(@ModelAttribute("command") PublicationBean publication, BindingResult result) { publicationService.addPublication(publication); return new ModelAndView("redirect:/addPublication.html"); } @RequestMapping(value = "/addPublication", method = RequestMethod.GET) public ModelAndView addPublication(@ModelAttribute("command") PublicationBean publication, BindingResult result) { Map<String, Object> model = new HashMap<String, Object>(); model.put("publications", publicationService.getPublications()); model.put("categories", categoryService.getCategories()); return new ModelAndView("addPublication", model); } @RequestMapping(value = "/deletePublication", method = RequestMethod.GET) public ModelAndView deletePublication(@ModelAttribute("command") PublicationBean publication, BindingResult result) { publicationService.deletePublication(publication.getPubId()); Map<String, Object> model = new HashMap<String, Object>(); model.put("publications", publicationService.getPublications()); model.put("categories", categoryService.getCategories()); return new ModelAndView("addPublication", model); } @RequestMapping(value = "/editPublication", method = RequestMethod.GET) public ModelAndView editPublication(@ModelAttribute("command") PublicationBean publication, BindingResult result) { Map<String, Object> model = new HashMap<String, Object>(); model.put("publication", publicationService.getPublication(publication.getPubId())); model.put("publications", publicationService.getPublications()); model.put("categories", categoryService.getCategories()); return new ModelAndView("addPublication", model); } @RequestMapping(value="/publications", method = RequestMethod.GET) public List<PublicationBean> getPublications() { return publicationService.getPublications(); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>sdnext</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/sdnext-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>sdnext</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file> addCategory.html </welcome-file> </welcome-file-list> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <context:property-placeholder location="classpath:resources/database.properties" /> <context:component-scan base-package="com.dineshonjava" /> <tx:annotation-driven transaction-manager="hibernateTransactionManager"/> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/view/" /> <property name="suffix" value=".jsp" /> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${database.driver}" /> <property name="url" value="${database.url}" /> <property name="username" value="${database.user}" /> <property name="password" value="${database.password}" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>com.dineshonjava.bean.CategoryBean</value> <value>com.dineshonjava.bean.PublicationBean</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> </props> </property> </bean> <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> </beans>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Spring MVC Form Handling</title> </head> <body><center> <h2>Create New Category</h2> <form:form method="POST" action="/elhumeante/saveCategory.html"> <table> <tr> <td><form:label path="categoryId">Category ID:</form:label></td> <td><form:input path="categoryId" readonly="true"/></td> </tr> <tr> <td><form:label path="categoryName">Category Name:</form:label></td> <td><form:input path="categoryName" value="${category.categoryName}"/></td> </tr> <tr> <tr> <td> </td> <td><input type="submit" value="SAVE"/></td> </tr> </table> </form:form> <br/> <c:if test="${!empty categories}"> <table align="center" border="1"> <tr> <th>Category ID</th> <th>Category Name</th> <th>Options</th> </tr> <c:forEach items="${categories}" var="category"> <tr> <td><c:out value="${category.categoryId}"/></td> <td><c:out value="${category.categoryName}"/></td> <td align="center"><a href="editCategory.html?categoryId=${category.categoryId}">Edit</a> | <a href="deleteCategory.html?categoryId=${category.categoryId}">Delete</a></td> </tr> </c:forEach> </table> </c:if> <h2><a href="addPublication.html">Adding Publication</a></h2> </center> </body> </html>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Spring MVC Form Handling</title> </head> <body> <center> <h2>Create New Publication</h2> <form:form method="POST" action="/elhumeante/savePublication.html"> <table> <tr> <td><form:label path="pubId">Publication ID:</form:label></td> <td><form:input path="pubId" value="${publication.pubId}" readonly="true"/></td> </tr> <tr> <td><form:label path="pubTitle">Publication Title:</form:label></td> <td><form:input path="pubTitle" value="${publication.pubTitle}"/></td> </tr> <tr> <td> <form:label path="category.categoryId">Publication Type:</form:label> </td> <td> <form:select path="category.categoryId" cssStyle="width: 150px;"> <option value="-1">Select a type</option> <c:forEach items="${categories}" var="category"> <option value="${category.categoryId}">${category.categoryName}</option> </c:forEach> </form:select> </td> </tr> <tr> <td><form:label path="pubContent">Publication Content:</form:label></td> <td><form:textarea path="pubContent" value="${publication.pubContent}" cssStyle="width: 150px;"/></td> </tr> <tr> <td> </td> <td><input type="submit" value="SAVE"/></td> </tr> </table> </form:form> <br/> <c:if test="${!empty publications}"> <table align="center" border="1"> <tr> <th>ID</th> <th>Title</th> <th>Type</th> <th>Content</th> <th>Options</th> </tr> <c:forEach items="${publications}" var="publication"> <tr> <td><c:out value="${publication.pubId}"/></td> <td><c:out value="${publication.pubTitle}"/></td> <td><c:out value="${publication.category.categoryName}"/></td> <td><c:out value="${publication.pubContent}"/></td> <td align="center"><a href="editPublication.html?pubId=${publication.pubId}">Edit</a> | <a href="deletePublication.html?pubId=${publication.pubId}">Delete</a></td> </tr> </c:forEach> </table> </c:if> <h2><a href="addCategory.html">Adding Category</a></h2> </center> </body> </html>
Labels: Spring MVC, Spring3.0