前端码农的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 下载
最代码最近下载分享源代码列表最近下载
ming_123_9715  LV23 2022年12月13日
zmzmzmzm  LV8 2021年7月4日
1973356987  LV13 2021年6月16日
liangge2115  LV27 2020年11月23日
嘿嘿嘿123333  LV3 2020年7月1日
IkunLYY  LV4 2020年6月24日
沈思熟虑  LV10 2020年2月19日
1690356080  LV37 2019年12月24日
13148918399  LV9 2019年12月10日
努力的黑仔  LV4 2019年9月27日
最代码最近浏览分享源代码列表最近浏览
include  LV8 2023年6月20日
兢兢业业 2023年4月29日
暂无贡献等级
彩色天空  LV5 2023年4月2日
暂无贡献等级
ming_123_9715  LV23 2022年12月13日
uni-code_0123  LV1 2022年10月24日
17787885952  LV3 2022年5月5日
兰文斌  LV6 2022年4月27日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友