SpringMVC Resetful+Hibernate+MySQL实现增删改查操作

一、Maven构建项目

     该示例采用Maven构建一个Web项目,项目结构如图所示:

SpringMVC Resetful+Hibernate+MySQL实现增删改查操作_第1张图片

       其中,pom.xml文件中依赖如下所示,自动添加相应依赖包,包括Spring MVC、Hibernate、MySQL JDBC等:


	4.0.0
	sdd
	sdd
	0.0.1-SNAPSHOT
	war
	
	
	
		UTF-8
	
	
		
			org.glassfish
			bean-validator
			3.0-JBoss-4.0.2
		
		
			org.glassfish
			javax.annotation
			3.0.1
		
		
			org.glassfish
			javax.ejb
			3.0.1
		
		
			org.glassfish
			javax.enterprise.deploy
			3.0.1
		
		
			org.glassfish
			javax.jms
			3.0.1
		
		
			org.glassfish
			javax.management.j2ee
			3.0.1
		
		
			org.eclipse.persistence
			javax.persistence
			2.0.0
		
		
			org.glassfish
			javax.resource
			3.0.1
		
		
			org.glassfish
			javax.security.auth.message
			3.0.1
		
		
			org.glassfish
			javax.security.jacc
			3.0.1
			
				
					javax.servlet
					org.glassfish
				
			
		
		
			org.glassfish
			javax.servlet.jsp.jstl
			3.0.1
		
		
			org.glassfish
			javax.transaction
			3.0.1
		
		
			javax.xml.bind
			jaxb-api-osgi
			2.2.1
		
		
			javax.ws.rs
			jsr311-api
			1.1.1
		
		
			org.glassfish.web
			jstl-impl
			1.2
			
				
					servlet-api
					javax.servlet
				
				
					jsp-api
					javax.servlet.jsp
				
			
		
		
			javax.mail
			mail
			1.4.3
		
		
			javax.xml
			webservices-api-osgi
			2.0.1
		
		
			org.jboss.weld
			weld-osgi-bundle
			1.0.1-SP3
		
		
			org.codehaus.jackson
			jackson-core-asl
			1.9.12
		
		
			org.codehaus.jackson
			jackson-mapper-asl
			1.9.12
		
		
			com.fasterxml.jackson.core
			jackson-core
			2.5.0
		
		
			com.fasterxml.jackson.core
			jackson-databind
			2.5.0
		
		
			com.fasterxml.jackson.core
			jackson-annotations
			2.5.0
		
		
			org.springframework
			spring-webmvc
			4.0.2.RELEASE
		
		
			org.hibernate
			hibernate-core
			4.3.11.Final
		
		
			mysql
			mysql-connector-java
			5.1.20
		
		
			org.springframework
			spring-orm
			4.0.5.RELEASE
		
		
			commons-dbcp
			commons-dbcp
			1.2
			
				
					xerces
					xerces
				
			
		
		
			org.aspectj
			aspectjweaver
			1.8.6
		
	
	
		${basedir}/src
		${basedir}/WebRoot/WEB-INF/classes
		
			
				${basedir}/src
				
					**/*.java
				
			
		
		
			
				maven-war-plugin
				
					${basedir}/WebRoot
					${basedir}/WebRoot
				
			
			
				maven-compiler-plugin
				
					1.6
					1.6
				
			
		
	

二、配置Web.xml

        web.xml配置是整个框架整合的关键,需要配置对Spring的支持、SpringMVC的支持,同时需要解决浏览器对于rest PUT和DELETE请求的支持。



  	
  
    index.jsp
  
  
  	
	
		org.springframework.web.context.ContextLoaderListener
	
	     
    
     
         
             org.springframework.web.util.IntrospectorCleanupListener
         
     

	
	
		spring
		org.springframework.web.servlet.DispatcherServlet
		1
	

	
		spring
		 
		/ 
	
	
	
	  
      
       HiddenHttpMethodFilter  
       org.springframework.web.filter.HiddenHttpMethodFilter  
      
  
      
       HiddenHttpMethodFilter  
       
       spring   
      

	
    
		contextConfigLocation
		classpath:applicationContext.xml
	

三、配置spring-servlet.xml

        一般以servlet-name来命名,你也可以取其他名字。该文件主要配置Spring MVC,同时需要解决Spring MVC对静态文件的解析过滤,通常放在WEB-INF路径下,具体内容如下:




	
	

	
	


	
	
	
	
	
	

	
	
		
		
	

	
	
		
			
				text/html;charset=UTF-8
			
		
	

	
	
		
			
				
			
		
	

四、创建并配置jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

五、创建并配置applicationContext.xml文件

     该文件通常放在src目录下




	
	

	
	
		
	

	
	

	
	
		
		
		
		
	

	
	
		
		
			
				org.hibernate.dialect.MySQLDialect
				true
			
		
		
			
				com/springmvc/model/User.hbm.xml
			
		
	

	
	
		
	

	
	
		
	

	
	
		
			
			
			
			
			
		
	

	
	
		
		
	
	
	
	

六、编写控制类

        Controller控制类是Spring MVC的核心,类似于Struts2框架中的Action,通过@Controller注解实现Spring的注入,并通过@RequestMapping接收前端映射请求。加入返回值@ResponseBoady注解后,要把对象转换成json格式,缺少转换依赖的jar包,会出现以下异常的情况,需要添加依赖的jar,jackson-core-asl-1.9.12.jar,jackson-mapper-asl-1.9.12.jar问题解决。

Response Status: 406 (Not Acceptable)  

package com.springmvc.control;

import javax.annotation.Resource;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.springmvc.model.User;
import com.springmvc.service.UserService;

/**
 * Scope:表示实例是原型,这样会对每一个请求实例化,保证线程安全 Spring中使用 Controller注解表示该类是控制器
 * Repository注解Dao访问类 Service注解业务逻辑处理类 Resource注解表示使用某个bean资源
 * RequestMapping:表示对该类所有方法的请求URL,前面必须接上/user,如/user/login 表示对login方法的请求访问
 * 
 * @author Administrator
 * 
 */
@Scope("prototype")
@Controller
@RequestMapping("/user")
public class UserControl {

	@Resource(name = "userService")
	private UserService userService;
	private String message;

	/**
	 * 
	 * Spring MVC中使用RequestMapping处理URL请求,
	 *     GET:表示查询;POST:表示添加操作
	 *     PUT:表示修改操作;DELETE:表示删除操作
	 * ResponseBody:表示返回对象或者值;
	 * consumes: 表示前端传过来的数据格式;
	 * produces:表示返回数据格式
	 */
	@RequestMapping(value = "/login", method = RequestMethod.GET, consumes = "application/json", produces = "application/json")
	@ResponseBody
	public User login(User user, Model model) {
		// System.out.println(user.getUsername());
		User u = userService.findUserByNameAndPassword(user);
		return u;
	}

	@RequestMapping(value = "/addUser", method = RequestMethod.POST, produces = "application/json")
	@ResponseBody
	public String addUser(User user) {
		boolean flag = userService.addUser(user);
		if (flag) {
			message = "success";
		} else {
			message = "error";
		}
		return message;
	}

	/**
	 * PathVariable:注解方法参数,表示该参数变量值是通过URL传递的
	 * URL中必须包含该参数变量名,变量名需要相同才能完成变量传递注入
	 */
	@RequestMapping(value = "/deleteUser/{id}", method = RequestMethod.DELETE, produces = "application/json")
	@ResponseBody
	public String deleteUser(@PathVariable Integer id) {
		boolean flag = userService.deleteUser(id);
		if (flag) {
			message = "success";
		} else {
			message = "error";
		}
		return message;
	}

	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	public UserService getUserService() {
		return userService;
	}
}

七、编写业务逻辑类

package com.springmvc.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.springmvc.dao.UserDao;
import com.springmvc.model.User;

@Service(value="userService")
public class UserService {

	@Resource(name="userDao")
	private UserDao userDao;
	
	public User findUserByNameAndPassword (User user) {
		List listUsers = userDao.findByNameAndPassword(user);
		
		if(listUsers.size() > 0) {
			return listUsers.get(0);
		}
		return null;
	}
	
	public User findUserByName (String name) {
        List listUsers = userDao.findUserByName(name);
		if(listUsers.size() > 0) {
			return listUsers.get(0);
		}
		return null;
	}
	
	public boolean deleteUser(Integer id) {
		return userDao.deleteUser(id);
	}
	
	public boolean addUser(User user) {
		return userDao.addUser(user);
	}
	
	public UserDao getUserDao() {
		return userDao;
	}
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
}

八、编写Dao操作类

package com.springmvc.dao;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Repository;

import com.springmvc.model.User;

@Repository(value="userDao")
public class UserDao {

	//hibernateTemplate是Spring提供的Hibernate Dao操作类,在applicationContext中已经完成bean注入,所以此处直接
	//可以拿过来使用
	@Resource(name="hibernateTemplate")
	private HibernateTemplate hibernateTemplate;
	
	//根据用户名和密码查询
	public List  findByNameAndPassword (User user) {
	   String queryString = "from User where username = :username and password = :password";
	   String paramNames[] = {"username" , "password"};
	   String paramValues[] = {user.getUsername(),user.getPassword()};
	   
	   //findByNamedParam方法提供hql方法参数查询,避免Sql注入漏洞
	   @SuppressWarnings("unchecked")
	   List listUsers = (List) hibernateTemplate.findByNamedParam(queryString, paramNames, paramValues);
       return listUsers;		
	}
	
	@SuppressWarnings("unchecked")
	public  List findUserByName(String name) {
		List userList = new ArrayList();
		String queryString = "from User where username like:name";
		userList = (List) hibernateTemplate.findByNamedParam(queryString,"name",name);
        return userList;
	}
	
	public boolean  addUser(User user) {
	    try {
	    	hibernateTemplate.save(user);   
		} catch (Exception e) {
           return false;			
		}
	    return true;
	}
	
	public boolean deleteUser(Integer id) {
		try {
			User user = hibernateTemplate.get(User.class, id);
			hibernateTemplate.delete(user);
		} catch (Exception e) {
			return false;
		}
		return true;
	}
	public HibernateTemplate getHibernateTemplate() {
		return hibernateTemplate;
	}
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}
}

九、本示例中的Model类

package com.springmvc.model;

public class User {

	private Integer id;
	private String username;
	private String password;
	private String address;
	private String tel;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
}

十、前端JSP页面Ajax请求

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>






My JSP 'index.jsp' starting page













	
   
	用户名:
	
	
密码:
查询
用户名:
密码:
地址:
联系方式:

<%-- 用户名:
密码:
用户名:
密码:
--%> <%-- --%>

        HTTP请求中本身是不支持PUT和DELETE method方法请求的,本文在web.xml中添加了过滤器处理该部分请求,并且通过Ajax发送请求。但是Spring MVC本身也提供了标签,通过表单提交的方式发送Restful请求,如上面代码中注释内容所示。只需要在页面前面导入标签库即可。

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>





你可能感兴趣的:(Spring,MVC)