有空间与域名 怎么做网站,网站新增一个域名备案,生成器,专业摄影网站学习从HelloWorld应用程序开始的任何Web框架都是一个好主意。 一旦我们熟悉了框架配置#xff0c;最好做一个CRUD#xff08;创建#xff0c;读取#xff0c;更新#xff0c;删除#xff09;应用程序#xff0c;该应用程序涵盖Web框架的各个方面#xff0c;例如验证最好做一个CRUD创建读取更新删除应用程序该应用程序涵盖Web框架的各个方面例如验证请求URL映射请求参数绑定预填充表单等。 。 现在我将解释如何使用Spring MVC3Hibernate和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将SpringMVCHibernate及其从属jar复制到WEB-INF / lib文件夹中。 如果您使用的是Maven则可以提及以下依赖项。 dependenciesdependencygroupidjunit/groupidartifactidjunit/artifactidversion4.8.1/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.springframework/groupidartifactidspring-web/artifactidversion3.0.5.RELEASE/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.springframework/groupidartifactidspring-core/artifactidversion3.0.5.RELEASE/versiontypejar/typescopecompile/scopeexclusionsexclusionartifactidcommons-logging/artifactidgroupidcommons-logging/groupid/exclusion/exclusions/dependencydependencygroupidlog4j/groupidartifactidlog4j/artifactidversion1.2.14/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.springframework/groupidartifactidspring-tx/artifactidversion3.0.5.RELEASE/versiontypejar/typescopecompile/scope/dependencydependencygroupidjstl/groupidartifactidjstl/artifactidversion1.1.2/versiontypejar/typescopecompile/scope/dependencydependencygroupidtaglibs/groupidartifactidstandard/artifactidversion1.1.2/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.springframework/groupidartifactidspring-webmvc/artifactidversion3.0.5.RELEASE/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.springframework/groupidartifactidspring-aop/artifactidversion3.0.5.RELEASE/versiontypejar/typescopecompile/scope/dependencydependencygroupidcommons-digester/groupidartifactidcommons-digester/artifactidversion2.1/versiontypejar/typescopecompile/scope/dependencydependencygroupidcommons-collections/groupidartifactidcommons-collections/artifactidversion3.2.1/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.hibernate/groupidartifactidhibernate-core/artifactidversion3.3.2.GA/versiontypejar/typescopecompile/scope/dependencydependencygroupidjavax.persistence/groupidartifactidpersistence-api/artifactidversion1.0/versiontypejar/typescopecompile/scope/dependencydependencygroupidc3p0/groupidartifactidc3p0/artifactidversion0.9.1.2/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.springframework/groupidartifactidspring-orm/artifactidversion3.0.5.RELEASE/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.slf4j/groupidartifactidslf4j-api/artifactidversion1.6.1/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.slf4j/groupidartifactidslf4j-log4j12/artifactidversion1.6.1/versiontypejar/typescopecompile/scope/dependencydependencygroupidcglib/groupidartifactidcglib-nodep/artifactidversion2.2/versiontypejar/typescopecompile/scope/dependencydependencygroupidorg.hibernate/groupidartifactidhibernate-annotations/artifactidversion3.4.0.GA/versiontypejar/typescopecompile/scope/dependencydependencygroupidjboss/groupidartifactidjavassist/artifactidversion3.7.ga/versiontypejar/typescopecompile/scope/dependencydependencygroupidmysql/groupidartifactidmysql-connector-java/artifactidversion5.1.14/versiontypejar/typescopecompile/scope/dependency/dependencies 步骤3配置SpringMVC a在web.xml中配置DispatcherServlet servletservlet-namedispatcher/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classload-on-startup1/load-on-startup/servletservlet-mappingservlet-namedispatcher/servlet-nameurl-pattern*.do/url-pattern/servlet-mappinglistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listenercontext-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:applicationContext.xml/param-value/context-param b在WEB-INF / dispatcher-servlet.xml中配置View Resolver bean idviewResolver classorg.springframework.web.servlet.view.InternalResourceViewResolver p:prefix/jsp/ p:suffix.jsp
/bean c在WEB-INF / classes / applicationContext.xml中配置注释支持PropertyPlaceHolderConfigurerResourceBundleMessageSource context:annotation-config/context:annotation-configcontext:component-scan base-packagecom.sivalabs/context:component-scanmvc:annotation-driven /mvc:annotation-drivencontext:property-placeholder locationclasspath:config.properties/context:property-placeholderbean idmessageSource classorg.springframework.context.support.ResourceBundleMessageSource p:basenameMessages/bean 步骤4在config.properties中配置JDBC连接参数和Hibernate属性 ################### JDBC Configuration ##########################
jdbc.driverClassNamecom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/sivalabs
jdbc.usernameroot
jdbc.passwordadmin################### Hibernate Configuration ##########################
hibernate.dialectorg.hibernate.dialect.MySQLDialect
hibernate.show_sqltrue
#hibernate.hbm2ddl.autoupdate
hibernate.generate_statisticstrue 步骤5在WEB-INF / classes / applicationContext.xml中配置数据源SessionFactoryTransactionManagement支持 bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSource p:driverclassname${jdbc.driverClassName} p:url${jdbc.url} p:username${jdbc.username} p:password${jdbc.password}
/bean bean idsessionFactory classorg.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBeanproperty namedataSource refdataSource/propertyproperty namehibernatePropertiesprops prop keyhibernate.dialect${hibernate.dialect}/prop prop keyhibernate.show_sql${hibernate.show_sql}/prop/props/propertyproperty namepackagesToScan valuecom.sivalabs/property
/beanbean idtransactionManager classorg.springframework.orm.hibernate3.HibernateTransactionManager p:sessionfactory-refsessionFactory
/beantx:annotation-driven transaction-managertransactionManager/tx:annotation-driven 步骤6在WEB-INF / classes / Messages.properties中配置标签和错误消息 App.TitleSivaLabs
typeMismatch.java.util.Date{0} is Invalid Date.
dobDOB 步骤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(nameCONTACTS)
public class Contact
{IdGeneratedValue(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;Overridepublic 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
{Autowiredprivate 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)Overridepublic boolean supports(Class clazz){return Contact.class.isAssignableFrom(clazz);}Overridepublic 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
{Autowiredprivate ContactsDAO contactsDAO;Autowiredprivate ContactFormValidator validator;InitBinderpublic 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, methodRequestMethod.GET)public ModelAndView newuserForm(){ModelAndView mav new ModelAndView(newContact);Contact contact new Contact();mav.getModelMap().put(newContact, contact);return mav;}RequestMapping(value/saveContact, methodRequestMethod.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, methodRequestMethod.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, methodRequestMethod.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 urihttp://java.sun.com/jsp/jstl/core prefixc%
%taglib urihttp://java.sun.com/jsp/jstl/fmt prefixfmt%%taglib urihttp://www.springframework.org/tags/form prefixform%
%taglib urihttp://www.springframework.org/tags prefixspring% 步骤12创建JSP。 ashowContacts.jsp %include filetaglib_includes.jsp %html
headtitlespring:message codeApp.Title/spring:message /title
script typetext/javascript srcjs/contacts.js/script
/head
body stylefont-family: Arial; font-size:smaller;centerform actionsearchContacts.do methodposttable styleborder-collapse: collapse; width500 border0 bordercolor#006699tbodytr tdEnter Contact Name/td tdinput namename typetextinput valueSearch typesubmitinput valueNew Contact onclickjavascript:go(saveContact.do); typebutton/td/tr
/tbody/table/formc:if test${empty SEARCH_CONTACTS_RESULTS_KEY}
/c:ifc:if test${! empty SEARCH_CONTACTS_RESULTS_KEY} c:foreach varcontact items${SEARCH_CONTACTS_RESULTS_KEY}
/c:foreach/c:iftable styleborder-collapse: collapse; width500 border1 bordercolor#006699tbodytr bgcolorlightblue thId/th thName/th thAddress/th thMobile/th th/th /tr
tr td colspan4No Results found/td /trtr tdc:out value${contact.id}/c:out/td tdc:out value${contact.name}/c:out/td tdc:out value${contact.address}/c:out /td tdc:out value${contact.mobile}/c:out/td tda hrefupdateContact.do?id$%7Bcontact.id%7DEdit/aa hrefjavascript:deleteContact(deleteContact.do?id${contact.id});Delete/a/td /tr/tbody/table/center/body
/html bnewContact.jsp %include filetaglib_includes.jsp %html
headscript typetext/javascript srcjs/contacts.js/scripttitlespring:message codeApp.Title/spring:message /title
/head
body stylefont-family: Arial; font-size:smaller;table styleborder-collapse: collapse; width750 aligncenter bgcolorlightblue border1 bordercolor#006699 height500tbodytr td aligncenterh3Edit Contact Form/h3/td /tr
tr valigntop aligncenter td aligncenterform:form actionsaveContact.do methodpost commandnamenewContacttable styleborder-collapse: collapse; width500 border0 bordercolor#006699 cellpadding2 cellspacing2tbodytr td width100 alignrightName/td td width150form:input pathname/form:input/td td alignleftform:errors pathname cssstylecolor:red/form:errors/td /tr
tr td width100 alignrightDOB/td tdform:input pathdob/form:input/td td alignleftform:errors pathdob cssstylecolor:red/form:errors/td /tr
tr td width100 alignrightGender/td td form:select pathgenderform:option valueM labelMaleform:option valueF labelFemale/form:option/form:option/form:select/td td/td /tr
tr td width100 alignrightAddress/td tdform:input pathaddress/form:input/td td alignleftform:errors pathaddress cssstylecolor:red/form:errors/td /tr
tr td width100 alignrightEmail/td tdform:input pathemail/form:input/td td alignleftform:errors pathemail cssstylecolor:red/form:errors/td /tr
tr td width100 alignrightMobile/td tdform:input pathmobile/form:input/td td alignleftform:errors pathmobile cssstylecolor:red/form:errors/td /tr
tr td colspan3 aligncenterinput name valueSave typesubmitinput name valueReset typeresetinput valueBack onclickjavascript:go(viewAllContacts.do); typebutton/td /tr
/tbody/table/form:form/td /tr
/tbody/table/body
/html aeditContact.jsp %include filetaglib_includes.jsp %html
headscript typetext/javascript srcjs/contacts.js/scripttitlespring:message codeApp.Title/spring:message /title
/head
body stylefont-family: Arial; font-size:smaller;table styleborder-collapse: collapse; width750 aligncenter bgcolorlightblue border1 bordercolor#006699 height500tbodytr td aligncenterh3Edit Contact Form/h3/td /tr
tr valigntop aligncenter td aligncenterform:form actionupdateContact.do methodpost commandnameeditContacttable styleborder-collapse: collapse; width500 border0 bordercolor#006699 cellpadding2 cellspacing2tbodytr td width100 alignrightId/td td width150form:input pathid readonlytrue/form:input/td td alignleftform:errors pathid cssstylecolor:red/form:errors/td /tr
tr td width100 alignrightName/td tdform:input pathname/form:input/td td alignleftform:errors pathname cssstylecolor:red/form:errors/td /tr
tr td width100 alignrightDOB/td tdform:input pathdob/form:input/td td alignleftform:errors pathdob cssstylecolor:red/form:errors/td /tr
tr td width100 alignrightGender/td td form:select pathgenderform:option valueM labelMaleform:option valueF labelFemale/form:option/form:option/form:select/td td/td /tr
tr td width100 alignrightAddress/td tdform:input pathaddress/form:input/td td alignleftform:errors pathaddress cssstylecolor:red/form:errors/td /tr
tr td width100 alignrightEmail/td tdform:input pathemail/form:input/td td alignleftform:errors pathemail cssstylecolor:red/form:errors/td /tr
tr td width100 alignrightMobile/td tdform:input pathmobile/form:input/td td alignleftform:errors pathmobile cssstylecolor:red/form:errors/td /tr
tr valignbottom td colspan3 aligncenterinput valueDelete onclickjavascript:deleteContact(deleteContact.do?id${editContact.id}); typebuttoninput name valueSave typesubmit input valueBack onclickjavascript:go(viewAllContacts.do); typebutton/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// localhost8080 / SpringMVCHibernate 参考来自我们SivaLabs的 JCG合作伙伴 Siva的Spring MVC3 Hibernate CRUD示例应用程序 。 相关文章 Spring MVC开发–快速教程 Spring3 RESTful Web服务 带有Spring和Maven教程的JAX–WS 使用Spring AspectJ和Maven进行面向方面的编程 翻译自: https://www.javacodegeeks.com/2011/04/spring-mvc3-hibernate-crud-sample.html