Spring MVC3 Hibernate CRUD示例应用程序

学习从HelloWorld应用程序开始的任何Web框架都是一个好主意。 一旦我们熟悉了框架配置,最好做一个CRUD(创建,读取,更新,删除)应用程序,该应用程序涵盖Web框架的各个方面,例如验证,请求URL映射,请求参数绑定,预填充表单等。 。

现在,我将解释如何使用Spring MVC3,Hibernate和MySQL编写简单的CRUD应用程序。 我们的应用程序是ContactsManagements,您可以在其中查看或搜索联系人,创建新联系人,编辑或删除现有联系人。

步骤#1:创建联系人表

CREATE TABLE  CONTACTS
(
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
  name varchar(45) NOT NULL,
  address varchar(45) DEFAULT NULL,
  gender char(1) DEFAULT 'M',
  dob datetime DEFAULT NULL,
  email varchar(45) DEFAULT NULL,
  mobile varchar(15) DEFAULT NULL,
  phone varchar(15) DEFAULT NULL,
  PRIMARY KEY (id)
);

步骤2:将SpringMVC,Hibernate及其从属jar复制到WEB-INF / lib文件夹中。 如果您使用的是Maven,则可以提及以下依赖项。

<dependencies>
  <dependency>
    <groupid>junit</groupid>
    <artifactid>junit</artifactid>
    <version>4.8.1</version>
    <type>jar</type>
    <scope>compile</scope>
   </dependency>
   <dependency>
     <groupid>org.springframework</groupid>
     <artifactid>spring-web</artifactid>
     <version>3.0.5.RELEASE</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>org.springframework</groupid>
     <artifactid>spring-core</artifactid>
     <version>3.0.5.RELEASE</version>
     <type>jar</type>
     <scope>compile</scope>
     <exclusions>
      <exclusion>
       <artifactid>commons-logging</artifactid>
       <groupid>commons-logging</groupid>
      </exclusion>
     </exclusions>
    </dependency>
    <dependency>
     <groupid>log4j</groupid>
     <artifactid>log4j</artifactid>
     <version>1.2.14</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>org.springframework</groupid>
     <artifactid>spring-tx</artifactid>
     <version>3.0.5.RELEASE</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>jstl</groupid>
     <artifactid>jstl</artifactid>
     <version>1.1.2</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>taglibs</groupid>
     <artifactid>standard</artifactid>
     <version>1.1.2</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>org.springframework</groupid>
     <artifactid>spring-webmvc</artifactid>
     <version>3.0.5.RELEASE</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>org.springframework</groupid>
     <artifactid>spring-aop</artifactid>
     <version>3.0.5.RELEASE</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>commons-digester</groupid>
     <artifactid>commons-digester</artifactid>
     <version>2.1</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>commons-collections</groupid>
     <artifactid>commons-collections</artifactid>
     <version>3.2.1</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>org.hibernate</groupid>
     <artifactid>hibernate-core</artifactid>
     <version>3.3.2.GA</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>javax.persistence</groupid>
     <artifactid>persistence-api</artifactid>
     <version>1.0</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>c3p0</groupid>
     <artifactid>c3p0</artifactid>
     <version>0.9.1.2</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>org.springframework</groupid>
     <artifactid>spring-orm</artifactid>
     <version>3.0.5.RELEASE</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>org.slf4j</groupid>
     <artifactid>slf4j-api</artifactid>
     <version>1.6.1</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>org.slf4j</groupid>
     <artifactid>slf4j-log4j12</artifactid>
     <version>1.6.1</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>cglib</groupid>
     <artifactid>cglib-nodep</artifactid>
     <version>2.2</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>org.hibernate</groupid>
     <artifactid>hibernate-annotations</artifactid>
     <version>3.4.0.GA</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>jboss</groupid>
     <artifactid>javassist</artifactid>
     <version>3.7.ga</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
    <dependency>
     <groupid>mysql</groupid>
     <artifactid>mysql-connector-java</artifactid>
     <version>5.1.14</version>
     <type>jar</type>
     <scope>compile</scope>
    </dependency>
  </dependencies>

步骤#3:配置SpringMVC

a)在web.xml中配置DispatcherServlet

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
  
 <servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>
 
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <context-param>
     <param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value>
  </context-param>

b)在WEB-INF / dispatcher-servlet.xml中配置View Resolver

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
 p:prefix="/jsp/" p:suffix=".jsp">
</bean>

c)在WEB-INF / classes / applicationContext.xml中配置注释支持,PropertyPlaceHolderConfigurer,ResourceBundleMessageSource

<context:annotation-config></context:annotation-config>

<context:component-scan base-package="com.sivalabs"></context:component-scan>

<mvc:annotation-driven> </mvc:annotation-driven>

<context:property-placeholder location="classpath:config.properties"></context:property-placeholder>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" 
 p:basename="Messages"></bean>

步骤#4:在config.properties中配置JDBC连接参数和Hibernate属性

################### JDBC Configuration ##########################
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/sivalabs
jdbc.username=root
jdbc.password=admin
 
################### Hibernate Configuration ##########################
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
#hibernate.hbm2ddl.auto=update
hibernate.generate_statistics=true

步骤5:在WEB-INF / classes / applicationContext.xml中配置数据源,SessionFactory,TransactionManagement支持

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
 p:driverclassname="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}">
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
 <property name="dataSource" ref="dataSource"></property>
 <property name="hibernateProperties">
  <props>       
  <prop key="hibernate.dialect">${hibernate.dialect}</prop>         
  <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
  </props>
 </property>
 <property name="packagesToScan" value="com.sivalabs"></property>
</bean>


<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
  p:sessionfactory-ref="sessionFactory">
</bean>

<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

步骤#6:在WEB-INF / classes / Messages.properties中配置标签和错误消息

App.Title=SivaLabs
typeMismatch.java.util.Date={0} is Invalid Date.
dob=DOB

步骤#7:创建实体类Contact.java

package com.sivalabs.contacts;
 
import java.util.Date;
 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
 
import org.apache.commons.lang.builder.ToStringBuilder;
 
@Entity
@Table(name="CONTACTS")
public class Contact
{
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private int id;
 @Column private String name;
 @Column private String address;
 @Column private String gender;
 @Column private Date dob;
 @Column private String email;
 @Column private String mobile;
 @Column private String phone;
  
 @Override
 public String toString()
 {
  return ToStringBuilder.reflectionToString(this);
 }
 //setters & getters
}

步骤#8:创建在CONTACTS表上执行CRUD操作的ContactsDAO.java。

package com.sivalabs.contacts;
 
import java.util.List;
 
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
 
@Repository
@Transactional
public class ContactsDAO
{
 @Autowired
 private SessionFactory sessionFactory;
  
 public Contact getById(int id)
 {
  return (Contact) sessionFactory.getCurrentSession().get(Contact.class, id);
 }
  
 @SuppressWarnings("unchecked")
 public List searchContacts(String name)
 {
  Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Contact.class);
  criteria.add(Restrictions.ilike("name", name+"%"));
  return criteria.list();
 }
  
 @SuppressWarnings("unchecked")
 public List getAllContacts()
 {
  Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Contact.class);
  return criteria.list();
 }
  
 public int save(Contact contact)
 {
  return (Integer) sessionFactory.getCurrentSession().save(contact);
 }
  
 public void update(Contact contact)
 {
  sessionFactory.getCurrentSession().merge(contact);
 }
  
 public void delete(int id)
 {
  Contact c = getById(id);
  sessionFactory.getCurrentSession().delete(c);
 }
}

步骤#9:创建ContactFormValidator.java,它在保存/更新联系人时执行验证。

package com.sivalabs.contacts;
 
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
 
@Component("contactFormValidator")
public class ContactFormValidator implements Validator
{
 @SuppressWarnings("unchecked")
 @Override
 public boolean supports(Class clazz)
 {
  return Contact.class.isAssignableFrom(clazz);
 }
 
 @Override
 public void validate(Object model, Errors errors)
 {
  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name","required.name", "Name is required.");
 }
}

步骤#10:创建处理所有CRUD请求的ContactsControllers.java。

package com.sivalabs.contacts;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
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.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;
 
@Controller
public class ContactsControllers
{
 @Autowired
 private ContactsDAO contactsDAO;
  
 @Autowired
 private ContactFormValidator validator;
   
 @InitBinder
 public void initBinder(WebDataBinder binder)
 {
  SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
  dateFormat.setLenient(false);
  binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
 }
   
 @RequestMapping("/searchContacts")
 public ModelAndView searchContacts(@RequestParam(required= false, defaultValue="") String name)
 {
  ModelAndView mav = new ModelAndView("showContacts");
  List contacts = contactsDAO.searchContacts(name.trim());
  mav.addObject("SEARCH_CONTACTS_RESULTS_KEY", contacts);
  return mav;
 }
  
 @RequestMapping("/viewAllContacts")
 public ModelAndView getAllContacts()
 {
  ModelAndView mav = new ModelAndView("showContacts");
  List contacts = contactsDAO.getAllContacts();
  mav.addObject("SEARCH_CONTACTS_RESULTS_KEY", contacts);
  return mav;
 }
  
 @RequestMapping(value="/saveContact", method=RequestMethod.GET)
 public ModelAndView newuserForm()
 {
  ModelAndView mav = new ModelAndView("newContact");
  Contact contact = new Contact();
  mav.getModelMap().put("newContact", contact);
  return mav;
 }
  
 @RequestMapping(value="/saveContact", method=RequestMethod.POST)
 public String create(@ModelAttribute("newContact")Contact contact, BindingResult result, SessionStatus status)
 {
  validator.validate(contact, result);
  if (result.hasErrors())
  {   
   return "newContact";
  }
  contactsDAO.save(contact);
  status.setComplete();
  return "redirect:viewAllContacts.do";
 }
  
 @RequestMapping(value="/updateContact", method=RequestMethod.GET)
 public ModelAndView edit(@RequestParam("id")Integer id)
 {
  ModelAndView mav = new ModelAndView("editContact");
  Contact contact = contactsDAO.getById(id);
  mav.addObject("editContact", contact);
  return mav;
 }
  
 @RequestMapping(value="/updateContact", method=RequestMethod.POST)
 public String update(@ModelAttribute("editContact") Contact contact, BindingResult result, SessionStatus status)
 {
  validator.validate(contact, result);
  if (result.hasErrors()) {
   return "editContact";
  }
  contactsDAO.update(contact);
  status.setComplete();
  return "redirect:viewAllContacts.do";
 }
   
 @RequestMapping("deleteContact")
 public ModelAndView delete(@RequestParam("id")Integer id)
 {
  ModelAndView mav = new ModelAndView("redirect:viewAllContacts.do");
  contactsDAO.delete(id);
  return mav;
 }
}

步骤#11:与其在所有JSP中编写JSTL标记库描述,不如在一个JSP中声明它们并将其包含在其他JSP中。

taglib_includes.jsp

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

步骤#12:创建JSP。

a)showContacts.jsp

<%@include file="taglib_includes.jsp" %>
 
<html>
<head>
 
<title><spring:message code="App.Title"></spring:message> </title>
<script type="text/javascript" src="js/contacts.js"></script>
</head>
<body style="font-family: Arial; font-size:smaller;">
 <center>
 <form action="searchContacts.do" method="post"><table style="border-collapse: collapse;" width="500" border="0" bordercolor="#006699"><tbody><tr>     <td>Enter Contact Name</td>      <td><input name="name" type="text">
 
  <input value="Search" type="submit">
 
  <input value="New Contact" onclick="javascript:go('saveContact.do');" type="button">
 
</td></tr>
</tbody></table></form><c:if test="${empty SEARCH_CONTACTS_RESULTS_KEY}">
</c:if><c:if test="${! empty SEARCH_CONTACTS_RESULTS_KEY}">    <c:foreach var="contact" items="${SEARCH_CONTACTS_RESULTS_KEY}">
</c:foreach></c:if><table style="border-collapse: collapse;" width="500" border="1" bordercolor="#006699"><tbody><tr bgcolor="lightblue">    <th>Id</th>    <th>Name</th>       <th>Address</th>     <th>Mobile</th>    <th></th>   </tr>
<tr>    <td colspan="4">No Results found</td>   </tr>
   <tr>     <td><c:out value="${contact.id}"></c:out></td>     <td><c:out value="${contact.name}"></c:out></td>     <td><c:out value="${contact.address}"></c:out> </td>     <td><c:out value="${contact.mobile}"></c:out></td>     <td>
 
 <a href="updateContact.do?id=$%7Bcontact.id%7D">Edit</a>
 
  <a href="javascript:deleteContact('deleteContact.do?id=${contact.id}');">Delete</a>
 
</td>    </tr>
         </tbody></table></center>
   
</body>
</html>

b)newContact.jsp

<%@include file="taglib_includes.jsp" %>
 
<html>
<head>
 <script type="text/javascript" src="js/contacts.js"></script>
 <title><spring:message code="App.Title"></spring:message> </title>
</head>
<body style="font-family: Arial; font-size:smaller;">
 
<table style="border-collapse: collapse;" width="750" align="center" bgcolor="lightblue" border="1" bordercolor="#006699" height="500"><tbody><tr>   <td align="center"><h3>Edit Contact Form</h3></td>  </tr>
<tr valign="top" align="center">     <td align="center">
 
<form:form action="saveContact.do" method="post" commandname="newContact"><table style="border-collapse: collapse;" width="500" border="0" bordercolor="#006699" cellpadding="2" cellspacing="2"><tbody><tr>       <td width="100" align="right">Name</td>       <td width="150">
 
<form:input path="name"></form:input></td>       <td align="left">
 
<form:errors path="name" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td width="100" align="right">DOB</td>       <td><form:input path="dob"></form:input></td>       <td align="left"><form:errors path="dob" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td width="100" align="right">Gender</td>       <td>     
 
<form:select path="gender"><form:option value="M" label="Male"><form:option value="F" label="Female"></form:option></form:option></form:select></td>       <td>
 
</td>            </tr>
<tr>       <td width="100" align="right">Address</td>       <td><form:input path="address"></form:input></td>       <td align="left">
 
<form:errors path="address" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td width="100" align="right">Email</td>       <td><form:input path="email"></form:input></td>       <td align="left"><form:errors path="email" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td width="100" align="right">Mobile</td>       <td><form:input path="mobile"></form:input></td>       <td align="left">
 
<form:errors path="mobile" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td colspan="3" align="center">
 
<input name="" value="Save" type="submit">
 
   
 
<input name="" value="Reset" type="reset">
 
   
 
<input value="Back" onclick="javascript:go('viewAllContacts.do');" type="button">
 
</td>      </tr>
</tbody></table></form:form></td>       </tr>
</tbody></table></body>
</html>

a)editContact.jsp

<%@include file="taglib_includes.jsp" %>
 
<html>
<head>
 <script type="text/javascript" src="js/contacts.js"></script>
 <title><spring:message code="App.Title"></spring:message> </title>
</head>
<body style="font-family: Arial; font-size:smaller;">
 
<table style="border-collapse: collapse;" width="750" align="center" bgcolor="lightblue" border="1" bordercolor="#006699" height="500"><tbody><tr>   <td align="center"><h3>Edit Contact Form</h3></td>  </tr>
<tr valign="top" align="center">     <td align="center">
 
<form:form action="updateContact.do" method="post" commandname="editContact"><table style="border-collapse: collapse;" width="500" border="0" bordercolor="#006699" cellpadding="2" cellspacing="2"><tbody><tr>       <td width="100" align="right">Id</td>       <td width="150">
 
<form:input path="id" readonly="true"></form:input></td>       <td align="left">
 
<form:errors path="id" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td width="100" align="right">Name</td>       <td>
 
<form:input path="name"></form:input></td>       <td align="left">
 
<form:errors path="name" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td width="100" align="right">DOB</td>       <td><form:input path="dob"></form:input></td>       <td align="left"><form:errors path="dob" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td width="100" align="right">Gender</td>       <td>     
 
<form:select path="gender"><form:option value="M" label="Male"><form:option value="F" label="Female"></form:option></form:option></form:select></td>       <td>
 
</td>            </tr>
<tr>       <td width="100" align="right">Address</td>       <td><form:input path="address"></form:input></td>       <td align="left">
 
<form:errors path="address" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td width="100" align="right">Email</td>       <td><form:input path="email"></form:input></td>       <td align="left"><form:errors path="email" cssstyle="color:red"></form:errors></td>      </tr>
<tr>       <td width="100" align="right">Mobile</td>       <td><form:input path="mobile"></form:input></td>       <td align="left">
 
<form:errors path="mobile" cssstyle="color:red"></form:errors></td>      </tr>
<tr valign="bottom">       <td colspan="3" align="center">
 
<input value="Delete" onclick="javascript:deleteContact('deleteContact.do?id=${editContact.id}');" type="button">
 
   
 
<input name="" value="Save" type="submit">     
 
   
 
<input value="Back" onclick="javascript:go('viewAllContacts.do');" type="button">
 
</td>      </tr>
</tbody></table></form:form></td>       </tr>
</tbody></table></body>
</html>

步骤#13:编写包含实用程序方法的javascript文件js / contacts.js

function go(url)
{
 window.location = url;
}
 
function deleteContact(url)
{
 var isOK = confirm("Are you sure to delete?");
 if(isOK)
 {
  go(url);
 }
}

步骤#14:欢迎文件index.jsp

<%
response.sendRedirect("viewAllContacts.do");
%>

步骤#15:启动服务器,然后将浏览器URL指向http:// localhost:8080 / SpringMVCHibernate

参考:来自我们SivaLabs的 JCG合作伙伴 Siva的Spring MVC3 Hibernate CRUD示例应用程序

    相关文章:


    翻译自: https://www.javacodegeeks.com/2011/04/spring-mvc3-hibernate-crud-sample.html

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值