javascript
用于MyBatis CRUD操作的Spring MVC 3控制器
到目前為止,我們已經(jīng)為域類“ User ”創(chuàng)建了CRUD數(shù)據(jù)庫服務(wù),并且還將MyBatis配置與Spring Configuration文件集成在一起。 接下來,我們將使用Spring MVC創(chuàng)建一個(gè)網(wǎng)頁,以使用MyBatis CRUD服務(wù)對數(shù)據(jù)庫執(zhí)行操作。
因此,在這一部分中,我們將經(jīng)歷以下會(huì)話,這些會(huì)話使我們能夠使用Spring MVC和MyBatis CRUD服務(wù)為示例創(chuàng)建用戶界面:
Spring表單驗(yàn)證器
首先,我們將看到此示例中使用的表單驗(yàn)證器。 這是代碼:
package com.raistudies.validator;import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator;import com.raistudies.domain.User;@Component public class RegistrationValidator implements Validator {public boolean supports(Class<?> c) {return User.class.isAssignableFrom(c);}public void validate(Object command, Errors errors) {ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "field.name.empty");ValidationUtils.rejectIfEmptyOrWhitespace(errors, "standard", "field.standard.empty");ValidationUtils.rejectIfEmptyOrWhitespace(errors, "age", "field.age.empty");ValidationUtils.rejectIfEmptyOrWhitespace(errors, "sex", "field.sex.empty");User usrBean = (User)command;if(!isNumber(usrBean.getAge().trim()))errors.rejectValue("age", "field.age.NAN");}private boolean isNumber(String str){for (int i = 0; i < str.length(); i++) {//If we find a non-digit character we return false.if (!Character.isDigit(str.charAt(i)))return false;}return true;} }如您所見,我們對表單值設(shè)置了一些限制,例如每個(gè)字段都應(yīng)該有值,而“ age ”字段中的值應(yīng)該是數(shù)字。 您可以根據(jù)需要從此類的validate()方法中為表單值添加更多限制。 錯(cuò)誤消息值的包含在屬性文件messages.properties中定義,如下所示:
field.name.empty=Name field is mandatory. field.standard.empty=Standard field is mandatory. field.age.empty=Age field is mandatory. field.sex.empty=Sex field is mandatory.field.age.NAN=Age should be a number.這就是表單驗(yàn)證部分的全部內(nèi)容,現(xiàn)在我們將看到控制器部分。
Spring MVC控制器
控制器會(huì)將請求從瀏覽器投射到MyBatis服務(wù)。 波紋管是代碼:
package com.raistudies.controllers;import java.util.List; import java.util.UUID;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; 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.raistudies.domain.User; import com.raistudies.persistence.UserService; import com.raistudies.validator.RegistrationValidator;@Controller @RequestMapping(value="/registration") public class RegistrationController {private RegistrationValidator validator = null;private UserService userService = null;@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}public RegistrationValidator getValidator() {return validator;}@Autowiredpublic void setValidator(RegistrationValidator validator) {this.validator = validator;}@RequestMapping(method=RequestMethod.GET)public String showForm(ModelMap model){List<User> users = userService.getAllUser();model.addAttribute("users", users);User user = new User();user.setId(UUID.randomUUID().toString());model.addAttribute("user", user);return "registration";}@RequestMapping(value="/add", method=RequestMethod.POST)public ModelAndView add(@ModelAttribute(value="user") User user,BindingResult result){validator.validate(user, result);ModelAndView mv = new ModelAndView("registration");if(!result.hasErrors()){userService.saveUser(user);user = new User();user.setId(UUID.randomUUID().toString());mv.addObject("user", user);}mv.addObject("users", userService.getAllUser());return mv;}@RequestMapping(value="/update", method=RequestMethod.POST)public ModelAndView update(@ModelAttribute(value="user") User user,BindingResult result){validator.validate(user, result);ModelAndView mv = new ModelAndView("registration");if(!result.hasErrors()){userService.updateUser(user);user = new User();user.setId(UUID.randomUUID().toString());mv.addObject("user", user);}mv.addObject("users", userService.getAllUser());return mv;}@RequestMapping(value="/delete", method=RequestMethod.POST)public ModelAndView delete(@ModelAttribute(value="user") User user,BindingResult result){validator.validate(user, result);ModelAndView mv = new ModelAndView("registration");if(!result.hasErrors()){userService.deleteUser(user.getId());user = new User();user.setId(UUID.randomUUID().toString());mv.addObject("user", user);}mv.addObject("users", userService.getAllUser());return mv;} }控制器使用兩個(gè)bean進(jìn)行CRUD操作,一個(gè)是我們上面說過的用來驗(yàn)證表單數(shù)據(jù)的RegistrationValidator ,另一個(gè)是我們在上一部分中使用MyBatis 3創(chuàng)建的UserService ,以對表單數(shù)據(jù)執(zhí)行數(shù)據(jù)庫操作。 兩個(gè)豆將在Spring使用二傳手注射自動(dòng)接線。
控制器具有以下操作方法來處理對表單數(shù)據(jù)的CRUD請求:
- showForm():此操作將首次顯示該表單,這就是我們將方法類型設(shè)置為RequestMethod.GET的原因。該方法還將使用UserService的 getAllUser()方法提供數(shù)據(jù)庫中所有可用的用戶以顯示在表上表格如下。
- add():此操作將處理創(chuàng)建操作。 首先,它將驗(yàn)證表單數(shù)據(jù),如果沒有錯(cuò)誤發(fā)生,則它將使用UserService的 saveUser()方法將表單數(shù)據(jù)保存到數(shù)據(jù)庫中以創(chuàng)建新用戶。 它還將使用表單綁定一個(gè)新的User對象。
- update(): update方法將使用UserService的 updateUser()方法將用戶詳細(xì)信息更新到數(shù)據(jù)庫,并且在此之前,它將使用RegistrationValidator驗(yàn)證數(shù)據(jù)。
- delete():此方法用于從數(shù)據(jù)庫中刪除用戶,并從UserService的deleteUser()方法獲得幫助。
用于執(zhí)行UI創(chuàng)建的jsp頁面和JavaScript文件
在此會(huì)話中,我們將看到示例的用戶界面部分。 我們將創(chuàng)建一個(gè)如下所示的網(wǎng)頁:
| Spring MVC和MyBatis 3集成–用戶表單 |
用戶界面功能:
- “保存更改”按鈕將用于創(chuàng)建新用戶或更新現(xiàn)有用戶。
- “新用戶”按鈕將用于設(shè)置表單以創(chuàng)建新用戶。
- “刪除用戶”按鈕將用于刪除表格中顯示其詳細(xì)信息的用戶
- 單擊任何行將把相應(yīng)的行數(shù)據(jù)帶到表單域以進(jìn)行更新或刪除。
讓我們看一下與該網(wǎng)頁對應(yīng)的jsp代碼:
</div> <div> <pre><!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ page session="true" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html xmlns="http://www.w3.org/1999/xhtml"><head><title>Hello World with Spring 3 MVC</title><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><script type="text/javascript" src='<c:url value="/resources/common.js"/>'></script><script type="text/javascript" src='<c:url value="/resources/registration.js"/>'></script><script type="text/javascript">var projectUrl = '<c:url value="/"/>';if(projectUrl.indexOf(";", 0) != -1){projectUrl = projectUrl.substring(0, projectUrl.indexOf(";", 0));}</script></head><body><fieldset><legend>Registration Form</legend><center><form:form commandName="user" action="/SpringMVCMyBatisCRUDExample/app/registration/add" name="userForm"><form:hidden path="id"/><table><tr><td colspan="2" align="left"><form:errors path="*" cssStyle="color : red;"/></td></tr><tr><td>Name : </td><td><form:input path="name" /></td></tr><tr><td>Standard : </td><td><form:input path="standard" /></td></tr><tr><td>Age : </td><td><form:input path="age" /></td></tr><tr><td>Sex : </td><td><form:select path="sex"><form:option value="Male"/><form:option value="Female"/></form:select></td></tr><tr><td colspan="2"><input type="submit" value="Save Changes"/> <input type="reset" name="newUser" value="New User" onclick="setAddForm();" disabled="disabled"/> <input type="submit" name="deleteUser" value="Delete User" onclick="setDeleteForm();" disabled="disabled"/></td></tr></table></form:form></center></fieldset><c:if test="${!empty users}"><br /><center><table width="90%"><tr style="background-color: gray;"><th>Name</th><th>Standard</th><th>Age</th><th>Sex</th></tr><c:forEach items="${users}" var="user"><tr style="background-color: silver;" id="${user.id}" onclick="setUpdateForm('${user.id}');"><td><c:out value="${user.name}"/></td><td><c:out value="${user.standard}"/></td><td><c:out value="${user.age}"/></td><td><c:out value="${user.sex}"/></td></tr></c:forEach></table></center><br /></c:if></body> </html></pre> </div> <div>如您所見,表單的默認(rèn)操作是使用控制器的add方法將表單詳細(xì)信息添加到數(shù)據(jù)庫。 單擊“刪除用戶”后,它將調(diào)用JavaScript函數(shù),該函數(shù)將更改表單url以刪除用戶。 我們已經(jīng)使用<c:forEach /> jstl來顯示表上的所有用戶,并且每一行都聲明了單擊,即使這將把表行數(shù)據(jù)帶到表單中,也將改變表單的提交URL來調(diào)用控制器的update()方法。
Spring MVC配置文件
最后,我們將看到用于配置控制器和其他所有東西的Spring MVC配置。 以下是配置文件:
</div> <div> <pre><?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:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><!-- Application Message Bundle --><bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><property name="basename" value="/WEB-INF/messages" /><property name="cacheSeconds" value="3000" /></bean><!-- Scans the classpath of this application for @Components to deploy as beans --><context:component-scan base-package="com.raistudies" /><!-- Configures the @Controller programming model --><mvc:annotation-driven /><!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean><import resource="jdbc-context.xml"/> </beans></pre> </div> <div>該配置文件包括themessages.properties作為資源包,還包括jdbc-context.xml配置文件,其中包含將MyBatis 3與Spring集成的配置。
在運(yùn)行示例時(shí),您將得到上面的屏幕,該屏幕還將顯示數(shù)據(jù)庫中存在的所有記錄。 單擊“ 保存更改 ”按鈕,您將獲得以下屏幕,該屏幕將在空白表單值上顯示驗(yàn)證錯(cuò)誤:
| Spring MVC和MyBatis 3集成–帶有驗(yàn)證錯(cuò)誤的用戶表單 |
現(xiàn)在,用有效數(shù)據(jù)填寫表格,然后單擊“保存更改”按鈕,它將表格數(shù)據(jù)帶到下面的表格中。
僅此示例而已。 希望您喜歡學(xué)習(xí)!!
參考: Spring MVC 3控制器,用于通過 Rai Studies博客的JCG合作伙伴 Rahul Mondal 使用MyBatis(iBatis)3執(zhí)行CRUD操作 。
翻譯自: https://www.javacodegeeks.com/2012/05/spring-mvc-3-controller-for-mybatis.html
總結(jié)
以上是生活随笔為你收集整理的用于MyBatis CRUD操作的Spring MVC 3控制器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 土加贝怎么读 土加贝是什么字
- 下一篇: 带有GSON和抽象类的JSON