程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Spring+SpringMVC+Hibernate簡單整合(轉),springmvchibernate

Spring+SpringMVC+Hibernate簡單整合(轉),springmvchibernate

編輯:JAVA綜合教程

Spring+SpringMVC+Hibernate簡單整合(轉),springmvchibernate


SpringMVC又一個漂亮的web框架,他與Struts2並駕齊驅,Struts出世早而占據了一定優勢,下面同樣做一個簡單的應用實例,介紹SpringMVC的基本用法,接下來的博客也將梳理一下Struts2和SpringMVC的一些異同,通過梳理和舊知識的聯系,讓學習的成本變低,花很短的時間就可以了解一門貌似新的技術,其實本質沒變。

原文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>  
  •       
  •     <!-- 配置SessionFactory -->  
  •     <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 />  
  •       
  •     <!-- 靜態資源(js/image)的訪問 -->  
  •     <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>  
  •     
  •   <!-- 配置Spring監聽 -->  
  •   <listener>  
  •     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  •   </listener>  
  •     
  •   <!-- 配置SpringMVC -->  
  •   <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>  
  •     
  •   <!-- 配置Session -->  
  •   <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

    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>  


  • 到此為止,所有的配置和代碼完成,部署—運行,運行結果如下圖:

     

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved