最代码广告位
前端码农的gravatar头像
前端码农2015-04-08 16:26:44

Spring MVC+Spring+Hibrenarte实现的简单的CRUD项目实例

//创建一个User实体类,放在Entity包下,采用注解的方式:
package ne.springmvc.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

/**
 * 此实体的定义应用了springmvc的注解,省去了传统的Hibernate跟数据库之间的映射配置文件
 * 
 * @author will
 *
 */
@Entity
@Table(name = "T_USER")
public class User {

	@Id
	@GeneratedValue(generator = "paymentableGenerator")
	@GenericGenerator(name = "paymentableGenerator", strategy = "increment")
	private Integer id;

	@Column(length = 32)
	private String userName;

	@Column(length = 32)
	private String age;

	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 getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}
}

本篇关于SpringMVC基本都会采用注解的方式,首先配置好数据源以及事务spring-common.xml,放在config.spring包下

 

然后配置关于SpringMVC的内容,下面配置中都有注释说明,就不再赘述,spring-mvc.xml放在config.spring包下:

[html]

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.     http://www.springframework.org/schema/beans/spring-beans.xsd  
  8.     http://www.springframework.org/schema/context  
  9.     http://www.springframework.org/schema/context/spring-context-3.2.xsd  
  10.     http://www.springframework.org/schema/mvc  
  11.     http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">  
  12.       
  13.     <!-- 注解扫描包 -->  
  14.     <context:component-scan base-package="com.tgb" />  
  15.   
  16.     <!-- 开启注解 -->  
  17.     <mvc:annotation-driven />  
  18.       
  19.     <!-- 静态资源(js/image)的访问 -->  
  20.     <mvc:resources location="/js/" mapping="/js/**"/>  
  21.   
  22.     <!-- 定义视图解析器 -->    
  23.     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  24.         <property name="prefix" value="/"></property>  
  25.         <property name="suffix" value=".jsp"></property>  
  26.     </bean>  
  27. </beans>  

 

完成这些共用的配置之后,来配置web项目起点web.xml:

[html] 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
  3.   <display-name>json_test</display-name>  
  4.   <welcome-file-list>  
  5.     <welcome-file>login.jsp</welcome-file>  
  6.   </welcome-file-list>  
  7.     
  8.   <!-- 加载所有的配置文件 -->  
  9.   <context-param>  
  10.     <param-name>contextConfigLocation</param-name>  
  11.     <param-value>classpath*:config/spring/spring-*.xml</param-value>  
  12.   </context-param>  
  13.     
  14.   <!-- 配置Spring监听 -->  
  15.   <listener>  
  16.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  17.   </listener>  
  18.     
  19.   <!-- 配置SpringMVC -->  
  20.   <servlet>  
  21.     <servlet-name>springMVC</servlet-name>  
  22.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  23.     <init-param>  
  24.         <param-name>contextConfigLocation</param-name>  
  25.         <param-value>classpath*:config/spring/spring-mvc.xml</param-value>  
  26.     </init-param>  
  27.     <load-on-startup>1</load-on-startup>  
  28.   </servlet>  
  29.   <servlet-mapping>  
  30.     <servlet-name>springMVC</servlet-name>  
  31.     <url-pattern>/</url-pattern>  
  32.   </servlet-mapping>  
  33.     
  34.   <!-- 配置字符集 -->  
  35.   <filter>  
  36.     <filter-name>encodingFilter</filter-name>  
  37.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  38.     <init-param>  
  39.         <param-name>encoding</param-name>  
  40.         <param-value>UTF-8</param-value>  
  41.     </init-param>  
  42.     <init-param>  
  43.         <param-name>forceEncoding</param-name>  
  44.         <param-value>true</param-value>  
  45.     </init-param>  
  46.   </filter>  
  47.   <filter-mapping>  
  48.     <filter-name>encodingFilter</filter-name>  
  49.     <url-pattern>/*</url-pattern>  
  50.   </filter-mapping>  
  51.     
  52.   <!-- 配置Session -->  
  53.   <filter>  
  54.     <filter-name>openSession</filter-name>  
  55.     <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
  56.   </filter>  
  57.   <filter-mapping>  
  58.     <filter-name>openSession</filter-name>  
  59.     <url-pattern>/*</url-pattern>  
  60.   </filter-mapping>  
  61. </web-app>  

 

读者需自行下载jquery包,放到webContent文件夹下的js包下。然后创建几个测试页面,分别如下:

Login.jsp,项目的入口界面。

[html]

  1. <h5><a href="/test_ssh/user/getAllUser">进入用户管理页</a></h5>  

Index.jsp,用户管理的主界面

[html]

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <script type="text/javascript" src="../js/jquery-1.7.1.js"></script>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  9. <title>Insert title here</title>  
  10. <script type="text/javascript">  
  11.     function del(id){  
  12.         $.get("/test_ssh/user/delUser?id=" + id,function(data){  
  13.             if("success" == data.result){  
  14.                 alert("删除成功");  
  15.                 window.location.reload();  
  16.             }else{  
  17.                 alert("删除失败");  
  18.             }  
  19.         });  
  20.     }  
  21. </script>  
  22. </head>  
  23. <body>  
  24.     <h6><a href="/test_ssh/user/toAddUser">添加用户</a></h6>  
  25.     <table border="1">  
  26.         <tbody>  
  27.             <tr>  
  28.                 <th>姓名</th>  
  29.                 <th>年龄</th>  
  30.                 <th>操作</th>  
  31.             </tr>  
  32.             <c:if test="${!empty userList }">  
  33.                 <c:forEach items="${userList }" var="user">  
  34.                     <tr>  
  35.                         <td>${user.userName }</td>  
  36.                         <td>${user.age }</td>  
  37.                         <td>  
  38.                             <a href="/test_ssh/user/getUser?id=${user.id }">编辑</a>  
  39.                             <a href="javascript:del('${user.id }')">删除</a>  
  40.                         </td>  
  41.                     </tr>               
  42.                 </c:forEach>  
  43.             </c:if>  
  44.         </tbody>  
  45.     </table>  
  46. </body>  
  47. </html>  

addUser.jsp,添加用户界面

[html]

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. <script type="text/javascript">  
  9.     function addUser(){  
  10.         var form = document.forms[0];  
  11.         form.action = "/test_ssh/user/addUser";  
  12.         form.method="post";  
  13.         form.submit();  
  14.     }  
  15. </script>  
  16. </head>  
  17. <body>  
  18.     <h1>添加用户</h1>  
  19.     <form action="" name="userForm">  
  20.         姓名:<input type="text" name="userName">  
  21.         年龄:<input type="text" name="age">  
  22.         <input type="button" value="添加" onclick="addUser()">  
  23.     </form>  
  24. </body>  
  25. </html>  

 

editUser.jsp,修改用户信息界面。

[html]

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <script type="text/javascript" src="../js/jquery-1.7.1.js"></script>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  9. <title>Insert title here</title>  
  10. </head>  
  11. <body>  
  12.     <h1>编辑用户</h1>  
  13.     <form action="/test_ssh/user/updateUser" name="userForm" method="post">  
  14.         <input type="hidden" name="id" value="${user.id }">  
  15.         姓名:<input type="text" name="userName" value="${user.userName }">  
  16.         年龄:<input type="text" name="age" value="${user.age }">  
  17.         <input type="submit" value="编辑" >  
  18.     </form>  
  19. </body>  
  20. </html>  

还有success.jsp和error.jsp页面,无代码,就不再展示。

框架越来越多,越来越好用,但随之而来的繁杂的、各成体系的配置怎么办?项目大了感觉注解靠谱些。

 

这篇接着上篇,把没贴完的代码写完,上篇主要完成了一些公共配置和界面的东西,这篇把后台的代码完成。

首先是web包下属于的control层的类UserController,这相当于Struts中的Action,是重要的类:

[java]

  1. package com.tgb.web;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.annotation.Resource;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. import org.springframework.stereotype.Controller;  
  11. import org.springframework.web.bind.annotation.RequestMapping;  
  12.   
  13. import com.tgb.entity.User;  
  14. import com.tgb.manager.UserManager;  
  15.   
  16. @Controller  
  17. @RequestMapping("/user")  
  18. public class UserController {  
  19.   
  20.     @Resource(name="userManager")  
  21.     private UserManager userManager;  
  22.   
  23.     @RequestMapping("/getAllUser")  
  24.     public String getAllUser(HttpServletRequest request){  
  25.           
  26.         request.setAttribute("userList", userManager.getAllUser());  
  27.           
  28.         return "/index";  
  29.     }  
  30.       
  31.     @RequestMapping("/getUser")  
  32.     public String getUser(String id,HttpServletRequest request){  
  33.           
  34.         request.setAttribute("user", userManager.getUser(id));  
  35.       
  36.         return "/editUser";  
  37.     }  
  38.       
  39.     @RequestMapping("/toAddUser")  
  40.     public String toAddUser(){  
  41.         return "/addUser";  
  42.     }  
  43.       
  44.     @RequestMapping("/addUser")  
  45.     public String addUser(User user,HttpServletRequest request){  
  46.           
  47.         userManager.addUser(user);  
  48.           
  49.         return "redirect:/user/getAllUser";  
  50.     }  
  51.       
  52.     @RequestMapping("/delUser")  
  53.     public void delUser(String id,HttpServletResponse response){  
  54.           
  55.         String result = "{\"result\":\"error\"}";  
  56.           
  57.         if(userManager.delUser(id)){  
  58.             result = "{\"result\":\"success\"}";  
  59.         }  
  60.           
  61.         response.setContentType("application/json");  
  62.           
  63.         try {  
  64.             PrintWriter out = response.getWriter();  
  65.             out.write(result);  
  66.         } catch (IOException e) {  
  67.             e.printStackTrace();  
  68.         }  
  69.     }  
  70.       
  71.     @RequestMapping("/updateUser")  
  72.     public String updateUser(User user,HttpServletRequest request){  
  73.           
  74.         if(userManager.updateUser(user)){  
  75.             user = userManager.getUser(user.getId());  
  76.             request.setAttribute("user", user);  
  77.             return "redirect:/user/getAllUser";  
  78.         }else{  
  79.             return "/error";  
  80.         }  
  81.     }  
  82. }  

 

然后是属于manager包下的业务逻辑类,接口UserManager:

[java]

  1. package com.tgb.manager;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.tgb.entity.User;  
  6.   
  7. public interface UserManager {  
  8.   
  9.     public User getUser(String id);  
  10.       
  11.     public List<User> getAllUser();  
  12.       
  13.     public void addUser(User user);  
  14.       
  15.     public boolean delUser(String id);  
  16.       
  17.     public boolean updateUser(User user);  
  18. }  

 

实现类UserManagerImpl:

[java]

  1. package com.tgb.manager;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.tgb.dao.UserDao;  
  6. import com.tgb.entity.User;  
  7.   
  8. public class UserManagerImpl implements UserManager {  
  9.   
  10.     private UserDao userDao;  
  11.       
  12.     public void setUserDao(UserDao userDao) {  
  13.         this.userDao = userDao;  
  14.     }  
  15.   
  16.     @Override  
  17.     public User getUser(String id) {  
  18.         return userDao.getUser(id);  
  19.     }  
  20.   
  21.     @Override  
  22.     public List<User> getAllUser() {  
  23.         return userDao.getAllUser();  
  24.     }  
  25.   
  26.     @Override  
  27.     public void addUser(User user) {  
  28.         userDao.addUser(user);  
  29.     }  
  30.   
  31.     @Override  
  32.     public boolean delUser(String id) {  
  33.           
  34.         return userDao.delUser(id);  
  35.     }  
  36.   
  37.     @Override  
  38.     public boolean updateUser(User user) {  
  39.         return userDao.updateUser(user);  
  40.     }  
  41.   
  42. }  

 

最后是属于dao包底下的DAO层,主要由Hibernate完成。接口UserDao:

[java]

  1. package com.tgb.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.tgb.entity.User;  
  6.   
  7. public interface UserDao {  
  8.   
  9.     public User getUser(String id);  
  10.       
  11.     public List<User> getAllUser();  
  12.       
  13.     public void addUser(User user);  
  14.       
  15.     public boolean delUser(String id);  
  16.       
  17.     public boolean updateUser(User user);  
  18. }  

 

实现类UserDaoImpl:

[java]

  1. package com.tgb.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.hibernate.Query;  
  6. import org.hibernate.SessionFactory;  
  7.   
  8. import com.tgb.entity.User;  
  9.   
  10. public class UserDaoImpl implements UserDao {  
  11.   
  12.     private SessionFactory sessionFactory;  
  13.   
  14.     public void setSessionFactory(SessionFactory sessionFactory) {  
  15.         this.sessionFactory = sessionFactory;  
  16.     }  
  17.       
  18.     @Override  
  19.     public User getUser(String id) {  
  20.           
  21.         String hql = "from User u where u.id=?";  
  22.         Query query = sessionFactory.getCurrentSession().createQuery(hql);  
  23.         query.setString(0, id);  
  24.           
  25.         return (User)query.uniqueResult();  
  26.     }  
  27.   
  28.     @Override  
  29.     public List<User> getAllUser() {  
  30.           
  31.         String hql = "from User";  
  32.         Query query = sessionFactory.getCurrentSession().createQuery(hql);  
  33.           
  34.         return query.list();  
  35.     }  
  36.   
  37.     @Override  
  38.     public void addUser(User user) {  
  39.         sessionFactory.getCurrentSession().save(user);  
  40.     }  
  41.   
  42.     @Override  
  43.     public boolean delUser(String id) {  
  44.           
  45.         String hql = "delete User u where u.id = ?";  
  46.         Query query = sessionFactory.getCurrentSession().createQuery(hql);  
  47.         query.setString(0, id);  
  48.           
  49.         return (query.executeUpdate() > 0);  
  50.     }  
  51.   
  52.     @Override  
  53.     public boolean updateUser(User user) {  
  54.           
  55.         String hql = "update User u set u.userName = ?,u.age=? where u.id = ?";  
  56.         Query query = sessionFactory.getCurrentSession().createQuery(hql);  
  57.         query.setString(0, user.getUserName());  
  58.         query.setString(1, user.getAge());  
  59.         query.setString(2, user.getId());  
  60.           
  61.         return (query.executeUpdate() > 0);  
  62.     }  
  63.   
  64. }  

到此为止,所有的配置和代码完成,部署—运行,运行结果如下图:


打赏

文件名:springmvc-hibernate-test.zip,文件大小:14279.058K下载
最代码最近下载分享源代码列表最近下载
liangge2115 LV182020年11月23日
太阳星星星星
嘿嘿嘿123333 LV32020年7月1日
星星星星星星
IkunLYY LV32020年6月24日
星星星星星星
沈思熟虑 LV102020年2月19日
月亮月亮星星星星
1690356080 LV342019年12月24日
太阳太阳星星星星
13148918399 LV92019年12月10日
月亮月亮星星
努力的黑仔 LV42019年9月27日
月亮
qingyuanww LV52019年8月21日
月亮星星
xyy127 LV42019年6月28日
月亮
minko4254 LV62019年6月25日
月亮星星星星
最代码最近浏览分享源代码列表最近浏览
李卓茹 LV31月4日
星星星星星星
lsglsg9 LV112020年12月25日
月亮月亮星星星星星星
阿萨德卡萨丁是的2020年12月24日
暂无贡献等级
我是修车的人 LV22020年12月22日
星星星星
songjiahui LV112020年11月28日
月亮月亮星星星星星星
banzhenghao LV52020年11月24日
月亮星星
liangge2115 LV182020年11月23日
太阳星星星星
2223915172 LV42020年10月18日
月亮
773977962 LV72020年10月15日
月亮星星星星星星
pmj2510 LV102020年9月21日
月亮月亮星星星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友