原文地址:http://langgufu.iteye.com/blog/2088355
下面開始實例,這個實例的需求是對用戶信息進行增刪改查。首先創建一個web項目test_ssh,目錄結構及需要的Jar包如下圖:
創建一個User實體類,放在Entity包下,采用注解的方式:
[java]?view plaincopy package?com.tgb.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;????@Entity??@Table(name="T_USER")??public?class?User?{????????@Id??????@GeneratedValue(generator="system-uuid")??????@GenericGenerator(name?=?"system-uuid",strategy="uuid")??????@Column(length=32)??????private?String?id;????????????@Column(length=32)??????private?String?userName;????????????@Column(length=32)??????private?String?age;????????public?String?getId()?{??????????return?id;??????}????????public?void?setId(String?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包下:
[html]?view plaincopy <?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.xsd">????????????????<bean?id="dataSource"?class="org.springframework.jdbc.datasource.DriverManagerDataSource"?>??????????<property?name="driverClassName"?value="com.mysql.jdbc.Driver"></property>??????????<property?name="url"?value="jdbc:mysql://localhost/test_ssh"></property>??????????<property?name="username"?value="root"></property>??????????<property?name="password"?value="1"></property>??????</bean>????????????????<bean?id="sessionFactory"?class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">??????????<property?name="dataSource"?ref="dataSource"?/>??????????<property?name="hibernateProperties">??????????????<props>??????????????????<prop?key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>??????????????????<prop?key="hibernate.hbm2ddl.auto">update</prop>??????????????????<prop?key="hibernate.show_sql">true</prop>??????????????????<prop?key="hibernate.format_sql">true</prop>??????????????</props>??????????</property>??????????<property?name="annotatedClasses">??????????????<list>??????????????????<value>com.tgb.entity.User</value>??????????????</list>??????????</property>??????</bean>????????????????<bean?id="transactionManager"?class="org.springframework.orm.hibernate4.HibernateTransactionManager">??????????<property?name="sessionFactory"?ref="sessionFactory"/>??????</bean>????????????????<bean?id="transactionProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"?abstract="true">????????????<property?name="transactionManager"?ref="transactionManager"></property>????????????<property?name="transactionAttributes">????????????????<props>????????????????????<prop?key="add*">PROPAGATION_REQUIRED,-Exception</prop>????????????????????<prop?key="modify*">PROPAGATION_REQUIRED,-myException</prop>????????????????????<prop?key="del*">PROPAGATION_REQUIRED</prop>????????????????????<prop?key="*">PROPAGATION_REQUIRED</prop>????????????????</props>????????????</property>????????</bean>???</beans>?? 然后配置關于SpringMVC的內容,下面配置中都有注釋說明,就不再贅述,spring-mvc.xml放在config.spring包下:
[html]?view plaincopy <?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.xsd??????http://www.springframework.org/schema/context??????http://www.springframework.org/schema/context/spring-context-3.2.xsd??????http://www.springframework.org/schema/mvc??????http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">????????????????<context:component-scan?base-package="com.tgb"?/>????????????<mvc:annotation-driven?/>????????????????<mvc:resources?location="/js/"?mapping="/js/**"/>????????????<bean?id="viewResolver"?class="org.springframework.web.servlet.view.InternalResourceViewResolver">??????????<property?name="prefix"?value="/"></property>??????????<property?name="suffix"?value=".jsp"></property>??????</bean>??</beans>?? 完成這些共用的配置之后,來配置web項目起點web.xml:
[html]?view plaincopy <?xml?version="1.0"?encoding="UTF-8"?>??<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">????<display-name>json_test</display-name>????<welcome-file-list>??????<welcome-file>login.jsp</welcome-file>????</welcome-file-list>??????????<context-param>??????<param-name>contextConfigLocation</param-name>??????<param-value>classpath*:config/spring/spring-*.xml</param-value>????</context-param>??????????<listener>??????<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>????</listener>??????????<servlet>??????<servlet-name>springMVC</servlet-name>??????<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>??????<init-param>??????????<param-name>contextConfigLocation</param-name>??????????<param-value>classpath*:config/spring/spring-mvc.xml</param-value>??????</init-param>??????<load-on-startup>1</load-on-startup>????</servlet>????<servlet-mapping>??????<servlet-name>springMVC</servlet-name>??????<url-pattern>/</url-pattern>????</servlet-mapping>??????????<filter>??????<filter-name>encodingFilter</filter-name>??????<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>??????<init-param>??????????<param-name>encoding</param-name>??????????<param-value>UTF-8</param-value>??????</init-param>??????<init-param>??????????<param-name>forceEncoding</param-name>??????????<param-value>true</param-value>??????</init-param>????</filter>????<filter-mapping>??????<filter-name>encodingFilter</filter-name>??????<url-pattern>/*</url-pattern>????</filter-mapping>??????????<filter>??????<filter-name>openSession</filter-name>??????<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>????</filter>????<filter-mapping>??????<filter-name>openSession</filter-name>??????<url-pattern>/*</url-pattern>????</filter-mapping>??</web-app>?? 讀者需自行下載jquery包,放到webContent文件夾下的js包下。然后創建幾個測試頁面,分別如下:
Login.jsp,項目的入口界面。
[html]?view plaincopy
<h5><a?href="/test_ssh/user/getAllUser">進入用戶管理頁</a></h5>?? Index.jsp,用戶管理的主界面
[html]?view plaincopy <%@?page?language="java"?contentType="text/html;?charset=UTF-8"??????pageEncoding="UTF-8"%>??<%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">??<html>??<head>??<script?type="text/javascript"?src="../js/jquery-1.7.1.js"></script>??<meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8">??<title>Insert?title?here</title>??<script?type="text/javascript">??????function?del(id){??????????$.get("/test_ssh/user/delUser?id="?+?id,function(data){??????????????if("success"?==?data.result){??????????????????alert("刪除成功");??????????????????window.location.reload();??????????????}else{??????????????????alert("刪除失敗");??????????????}??????????});??????}??</script>??</head>??<body>??????<h6><a?href="/test_ssh/user/toAddUser">添加用戶</a></h6>??????<table?border="1">??????????<tbody>??????????????<tr>??????????????????<th>姓名</th>??????????????????<th>年齡</th>??????????????????<th>操作</th>??????????????</tr>??????????????<c:if?test="${!empty?userList?}">??????????????????<c:forEach?items="${userList?}"?var="user">??????????????????????<tr>??????????????????????????<td>${user.userName?}</td>??????????????????????????<td>${user.age?}</td>??????????????????????????<td>??????????????????????????????<a?href="/test_ssh/user/getUser?id=${user.id?}">編輯</a>??????????????????????????????<a?href="javascript:del('${user.id?}')">刪除</a>??????????????????????????</td>??????????????????????</tr>???????????????????????????????</c:forEach>??????????????</c:if>??????????</tbody>??????</table>??</body>??</html>?? addUser.jsp,添加用戶界面
?
[html]?view plaincopy <%@?page?language="java"?contentType="text/html;?charset=UTF-8"??????pageEncoding="UTF-8"%>??<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">??<html>??<head>??<meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8">??<title>Insert?title?here</title>??<script?type="text/javascript">??????function?addUser(){??????????var?form?=?document.forms[0];??????????form.action?=?"/test_ssh/user/addUser";??????????form.method="post";??????????form.submit();??????}??</script>??</head>??<body>??????<h1>添加用戶</h1>??????<form?action=""?name="userForm">??????????姓名:<input?type="text"?name="userName">??????????年齡:<input?type="text"?name="age">??????????<input?type="button"?value="添加"?onclick="addUser()">??????</form>??</body>??</html>??
?
editUser.jsp,修改用戶信息界面。
[html]?view plaincopy <%@?page?language="java"?contentType="text/html;?charset=UTF-8"??????pageEncoding="UTF-8"%>??<%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>????<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">??<html>??<head>??<script?type="text/javascript"?src="../js/jquery-1.7.1.js"></script>??<meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8">??<title>Insert?title?here</title>??</head>??<body>??????<h1>編輯用戶</h1>??????<form?action="/test_ssh/user/updateUser"?name="userForm"?method="post">??????????<input?type="hidden"?name="id"?value="${user.id?}">??????????姓名:<input?type="text"?name="userName"?value="${user.userName?}">??????????年齡:<input?type="text"?name="age"?value="${user.age?}">??????????<input?type="submit"?value="編輯"?>??????</form>??</body>??</html>?? 還有success.jsp和error.jsp頁面,無代碼,就不再展示。
框架越來越多,越來越好用,但隨之而來的繁雜的、各成體系的配置怎么辦?項目大了感覺注解靠譜些。
?
這篇接著上篇,把沒貼完的代碼寫完,上篇主要完成了一些公共配置和界面的東西,這篇把后臺的代碼完成。
首先是web包下屬于的control層的類UserController,這相當于Struts中的Action,是重要的類:
[java]?view plaincopy package?com.tgb.web;????import?java.io.IOException;??import?java.io.PrintWriter;????import?javax.annotation.Resource;??import?javax.servlet.http.HttpServletRequest;??import?javax.servlet.http.HttpServletResponse;????import?org.springframework.stereotype.Controller;??import?org.springframework.web.bind.annotation.RequestMapping;????import?com.tgb.entity.User;??import?com.tgb.manager.UserManager;????@Controller??@RequestMapping("/user")??public?class?UserController?{????????@Resource(name="userManager")??????private?UserManager?userManager;????????@RequestMapping("/getAllUser")??????public?String?getAllUser(HttpServletRequest?request){????????????????????request.setAttribute("userList",?userManager.getAllUser());????????????????????return?"/index";??????}????????????@RequestMapping("/getUser")??????public?String?getUser(String?id,HttpServletRequest?request){????????????????????request.setAttribute("user",?userManager.getUser(id));????????????????return?"/editUser";??????}????????????@RequestMapping("/toAddUser")??????public?String?toAddUser(){??????????return?"/addUser";??????}????????????@RequestMapping("/addUser")??????public?String?addUser(User?user,HttpServletRequest?request){????????????????????userManager.addUser(user);????????????????????return?"redirect:/user/getAllUser";??????}????????????@RequestMapping("/delUser")??????public?void?delUser(String?id,HttpServletResponse?response){????????????????????String?result?=?"{\"result\":\"error\"}";????????????????????if(userManager.delUser(id)){??????????????result?=?"{\"result\":\"success\"}";??????????}????????????????????response.setContentType("application/json");????????????????????try?{??????????????PrintWriter?out?=?response.getWriter();??????????????out.write(result);??????????}?catch?(IOException?e)?{??????????????e.printStackTrace();??????????}??????}????????????@RequestMapping("/updateUser")??????public?String?updateUser(User?user,HttpServletRequest?request){????????????????????if(userManager.updateUser(user)){??????????????user?=?userManager.getUser(user.getId());??????????????request.setAttribute("user",?user);??????????????return?"redirect:/user/getAllUser";??????????}else{??????????????return?"/error";??????????}??????}??}?? 然后是屬于manager包下的業務邏輯類,接口UserManager:
[java]?view plaincopy package?com.tgb.manager;????import?java.util.List;????import?com.tgb.entity.User;????public?interface?UserManager?{????????public?User?getUser(String?id);????????????public?List<User>?getAllUser();????????????public?void?addUser(User?user);????????????public?boolean?delUser(String?id);????????????public?boolean?updateUser(User?user);??}?? 實現類UserManagerImpl:
[java]?view plaincopy package?com.tgb.manager;????import?java.util.List;????import?com.tgb.dao.UserDao;??import?com.tgb.entity.User;????public?class?UserManagerImpl?implements?UserManager?{????????private?UserDao?userDao;????????????public?void?setUserDao(UserDao?userDao)?{??????????this.userDao?=?userDao;??????}????????@Override??????public?User?getUser(String?id)?{??????????return?userDao.getUser(id);??????}????????@Override??????public?List<User>?getAllUser()?{??????????return?userDao.getAllUser();??????}????????@Override??????public?void?addUser(User?user)?{??????????userDao.addUser(user);??????}????????@Override??????public?boolean?delUser(String?id)?{????????????????????return?userDao.delUser(id);??????}????????@Override??????public?boolean?updateUser(User?user)?{??????????return?userDao.updateUser(user);??????}????}?? 最后是屬于dao包底下的DAO層,主要由Hibernate完成。接口UserDao:
[java]?view plaincopy package?com.tgb.dao;????import?java.util.List;????import?com.tgb.entity.User;????public?interface?UserDao?{????????public?User?getUser(String?id);????????????public?List<User>?getAllUser();????????????public?void?addUser(User?user);????????????public?boolean?delUser(String?id);????????????public?boolean?updateUser(User?user);??}?? 實現類UserDaoImpl:
[java]?view plaincopy package?com.tgb.dao;????import?java.util.List;????import?org.hibernate.Query;??import?org.hibernate.SessionFactory;????import?com.tgb.entity.User;????public?class?UserDaoImpl?implements?UserDao?{????????private?SessionFactory?sessionFactory;????????public?void?setSessionFactory(SessionFactory?sessionFactory)?{??????????this.sessionFactory?=?sessionFactory;??????}????????????@Override??????public?User?getUser(String?id)?{????????????????????String?hql?=?"from?User?u?where?u.id=?";??????????Query?query?=?sessionFactory.getCurrentSession().createQuery(hql);??????????query.setString(0,?id);????????????????????return?(User)query.uniqueResult();??????}????????@Override??????public?List<User>?getAllUser()?{????????????????????String?hql?=?"from?User";??????????Query?query?=?sessionFactory.getCurrentSession().createQuery(hql);????????????????????return?query.list();??????}????????@Override??????public?void?addUser(User?user)?{??????????sessionFactory.getCurrentSession().save(user);??????}????????@Override??????public?boolean?delUser(String?id)?{????????????????????String?hql?=?"delete?User?u?where?u.id?=??";??????????Query?query?=?sessionFactory.getCurrentSession().createQuery(hql);??????????query.setString(0,?id);????????????????????return?(query.executeUpdate()?>?0);??????}????????@Override??????public?boolean?updateUser(User?user)?{????????????????????String?hql?=?"update?User?u?set?u.userName?=??,u.age=??where?u.id?=??";??????????Query?query?=?sessionFactory.getCurrentSession().createQuery(hql);??????????query.setString(0,?user.getUserName());??????????query.setString(1,?user.getAge());??????????query.setString(2,?user.getId());????????????????????return?(query.executeUpdate()?>?0);??????}????}?? 最后外加一個配置spring-beans.xml,放在config.spring包下,負責為各層依賴注入需要的對象:
[html]?view plaincopy <?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.xsd">????????????<bean?id="userDao"?class="com.tgb.dao.UserDaoImpl">??????????<property?name="sessionFactory"?ref="sessionFactory"></property>??????</bean>????????<bean?id="userManagerBase"?class="com.tgb.manager.UserManagerImpl">??????????<property?name="userDao"?ref="userDao"></property>??????</bean>????????????????<bean?name="userManager"?parent="transactionProxy">??????????<property?name="target"?ref="userManagerBase"></property>??????</bean>?????</beans>?? 到此為止,所有的配置和代碼完成,部署—運行,運行結果如下圖:
轉載于:https://www.cnblogs.com/dirgo/p/5202417.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的[转]SpringMVC+Hibernate+Spring 简单的一个整合实例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。