SSM框架——SpringMVC+Spring+Mybatis框架整合詳細教程

1、基本概念

1.1、Spring

        Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是爲了解決企業應用開發的複雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於服務器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說,Spring是一個輕量級的控制反轉(IoC)和麪向切面(AOP)的容器框架。

1.2、SpringMVC  

        Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裏面。Spring MVC 分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定製。

1.3、MyBatis

       MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名爲MyBatis 。MyBatis是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

 

2.需要的jar包

   需要的jar包主要分爲以下幾類:

      1.mysql數據庫驅動包以及數據庫連接池相關包

      2.mybatis框架包和mybatis+spring框架整合包

      3.spring包

jar包如下圖所示:

3.配置school-mybatis.xml

      該配置文件默認存放在src目錄下,school-mybatis.xml具體配置如下所示:

複製代碼

<?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:mybatis="http://mybatis.org/schema/mybatis-spring"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
       http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd  
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">      
    
     <!-- 自動掃描 -->  
    <context:component-scan base-package="cn.wallance" />  
    <!-- 引入配置文件 -->  
    <bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="classpath:jdbc.properties" />  
    </bean>  
  
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
        destroy-method="close">  
        <property name="driverClassName" value="${driver}" />  
        <property name="url" value="${url}" />  
        <property name="username" value="${username}" />  
        <property name="password" value="${password}" />  
        
        <!-- 配置連接池的初始值 -->
        <property name="initialSize" value="1" />
        <!-- 連接池的最大值 -->
        <!-- <property name="maxActive" value="500"/> -->
        <!-- 最大空閒時,當經過一個高峯之後,連接池可以將一些用不到的連接釋放,一直減少到maxIdle爲止 -->
        <!-- <property name="maxIdle" value="2"/> -->
        <!-- 當最小空閒時,當連接少於minIdle時會自動去申請一些連接 -->
        <property name="minIdle" value="1" />
        <property name="maxActive" value="100" />
        <property name="maxIdle" value="20" />
        <property name="maxWait" value="1000" /> 
    </bean>  
    
    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <!-- 自動掃描mapping.xml文件 -->  
        <property name="mapperLocations" value="classpath:cn/wallance/mapping/*.xml"></property>  
    </bean>  
  
    <!-- DAO接口所在包名,Spring會自動查找其下的類 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="cn.wallance.dao" />  
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
    </bean>  
  
    <!-- (事務管理)transaction manager, use JtaTransactionManager for global tx -->  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>    
         </beans>

複製代碼

ps:jdbc.properties文件內容如下所示:

 

4.配置school-servlet.xml文件

  school-servlet.xml文件中主要配置spring框架的信息,具體如下所示:

  

複製代碼

<?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.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

      <!-- 開啓註解 -->
      <mvc:annotation-driven/>
      <!-- 設置組件掃描的基礎包 -->
      <context:component-scan base-package="cn.wallance.web"/>
      
      <!-- 配置視圖解析器 -->
      <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="prefix" value="/WEB-INF/school/" />
          <property name="suffix" value=".jsp" />
      </bean>
      
      

        </beans>

複製代碼

 

 5.配置web.xml,整合SSM框架

   web.xml文件如下所示:

  

複製代碼

<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 
  <!-- 配置DispatcherServlet -->
  <servlet>
     <servlet-name>school</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
     <servlet-name>school</servlet-name>
     <url-pattern>/</url-pattern>
  </servlet-mapping>
  
 
  <!-- Spring 的監聽器可以通過這個上下文參數來獲取school-mybatis.xml的位置 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:school-mybatis.xml</param-value>   
  </context-param>
  
    <!-- 創建Spring的監聽器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  

  
  <!-- 創建字符過濾器 -->
  <filter>
     <filter-name>CharacterFilter</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>
  </filter>
  
  <filter-mapping>
      <filter-name>CharacterFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  </web-app>

複製代碼

 

6.項目整體框架

6.1 dao包介紹

   主要是數據庫操作(基於mybatis),分別是一個dao接口和一個dao類。

   IUserDao接口:

複製代碼

package cn.wallance.dao;import java.util.List;import cn.wallance.domain.User;public interface IUserDao {    public abstract List<User> selectAll();
}

複製代碼

  IUSerDaoImpl類:

複製代碼

package cn.wallance.dao;import java.util.List;import javax.annotation.Resource;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.support.SqlSessionDaoSupport;import org.springframework.stereotype.Repository;import cn.wallance.domain.User;

@Repository("userDao")public class UserDaoImpl extends SqlSessionDaoSupport implements IUserDao {
    
    
    @Resource    public void setSuperSessionFactory(SqlSessionFactory sessionFactory){        this.setSqlSessionFactory(sessionFactory);
    }    
    
    public List<User> selectAll() {        // TODO Auto-generated method stub
        List<User> users = this.getSqlSession().selectList("getUser");        return users;
    }

}

複製代碼

   6.2 service包

    IUSerService接口:

複製代碼

package cn.wallance.service;import java.util.List;import cn.wallance.domain.User;public interface IUserService {    public abstract List<User> selectAll();

}

複製代碼

  UserServiceImpl類:

複製代碼

package cn.wallance.service;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import cn.wallance.dao.IUserDao;import cn.wallance.domain.User;


@Service("userService")public class UserServiceImpl implements IUserService {    private IUserDao userDao;    
    
    public IUserDao getUserDao() {        return userDao;
    }

    @Resource    public void setUserDao(IUserDao userDao) {        this.userDao = userDao;
    }


    @Override    public List<User> selectAll() {        // TODO Auto-generated method stub
        return userDao.selectAll();
    }

}

複製代碼

    6.3 mapping包

  該包下主要是mapper文件

  usermapper.xml映射文件如下所示:

複製代碼

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.wallance.mapping.classMapper">
    <select id="getUser" resultType="cn.wallance.domain.User">
        select * from users    </select></mapper>

複製代碼

    6.4 domain包

      該包下主要是實體類。

     USer類如下所示:

複製代碼

package cn.wallance.domain;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;


@Entitypublic class User {    private int id;    private String name;    private int age;    
    public User(){
    }    
    public User(int id, String name, int age) {        super();        this.id = id;        this.name = name;        this.age = age;
    }
    
    @GeneratedValue
    @Id    public int getId() {        return id;
    }    public void setId(int id) {        this.id = id;
    }    
    
    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public int getAge() {        return age;
    }    public void setAge(int age) {        this.age = age;
    }
    
    

}

複製代碼

   6.5.web包

    該包下主要是contrller類: 

複製代碼

package cn.wallance.web;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import cn.wallance.domain.User;import cn.wallance.service.IUserService;


@Controllerpublic class HomeController {    private IUserService userService;    
    
    public IUserService getUserService() {        return userService;
    }

    @Resource    public void setUserService(IUserService userService) {        this.userService = userService;
    }


    @RequestMapping(value="/",method=RequestMethod.GET)    public String home(Model model){
        List<User> users = userService.selectAll();
        model.addAttribute("users", users);        return "home";
    }

}

複製代碼

   6.6 Jsp頁面

複製代碼

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">    -->
  </head>
  
  <body>
    <table>
       <tr>
        <td>ID</td>
        <td>NAME</td>
        <td>AGE</td>
       </tr>
       <c:forEach items="${users}" var="user">
       <tr>
       <td>${user.id}</td>
       <td>${user.name}</td>
       <td>${user.age}</td>
       </tr>
       </c:forEach>
    </table>
  </body></html>

複製代碼

 

7.項目實際運行效果

至此,SSM框架整合工作已經全部完成,大家可以在此基礎上進行進一步的功能擴展!

 

寫在最後:

     代碼GitHub地址:https://github.com/bywallance01/SSM_School_System

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章