SSM學習(一):基礎搭建

前言

學習SSM有一段時間了,今天來把他們三個整合一下。整和就是把SpringMVC和MyBatis都交給Spring來管理。

一、環境的準備

我們使用IDEA,首先創建一個Maven項目,然後在pom.xml中導入相關座標

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

	<!--Spring、SpringMVC相關基礎座標-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>
    
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>

    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

	<!--mybatis相關座標-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.4</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.3</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.19</version>
    </dependency>

    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.5</version>
    </dependency>

	<!--lombok相關配置-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.8</version>
    </dependency>

二、創建相關的包以及類

pojo、service、mapper、controller
我們在確保數據庫中有表的情況下,來創建pojo,要注意變量名與數據庫中的名一一對應。

這是Category的pojo:

package com.hty.pojo;

/**
 * @program: SSMMSS
 * @author: Semineces
 * @create: 2020-02-17 13:49
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Category {

    private Integer id;
    private String name;
}

這是Category的mapper:

package com.hty.mapper;

public interface CategoryMapper {

    List<Category> queryAll();
}

這是Category的service:

package com.hty.service;

public interface CategoryService {

    List<Category> queryAll();
}

CategoryService的實現類:

package com.hty.service.impl;

@Service
public class CategoryServiceImpl implements CategoryService {

    @Autowired
    private  CategoryMapper categoryMapper;

    @Override
    public List<Category> queryAll() {
        return categoryMapper.queryAll();
    }
}

我們在controller下面寫一個查詢所有Category的方法:

package com.hty.controller;

@Controller
public class CategoryController {

    @Autowired
    private CategoryMapper categoryMapper;

	//查詢所有並將其發送視圖到queryAll
    @RequestMapping(value = "/queryAll", method = RequestMethod.GET)
    public ModelAndView queryAll() {
        ModelAndView modelAndView = new ModelAndView();
        List<Category> categoryList = categoryMapper.queryAll();
        modelAndView.addObject("categoryList", categoryList);
        return modelAndView;
    }
}

三、配置SSM相關XML

完成了java代碼的編寫,就得開始配置SSM的環境了。

先給Category創建一個他的xml,裏面寫與數據庫交互的相關sql語句:

<?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="com.hty.mapper.CategoryMapper">
    <select id="queryAll" resultType="Category">
        select * from category
    </select>
</mapper>

在resources下創建SpringMVC的配置文件:

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

    <context:annotation-config />

    <!--所有註解所在的包,也可以寫一起-->
    <context:component-scan base-package="com.hty.controller">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <context:component-scan base-package="com.hty.service">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    </context:component-scan>

    <mvc:annotation-driven />

    <mvc:default-servlet-handler />

    <!--視圖定位-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
    
</beans>

創建Spring的核心配置文件applicationContext.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
	<!--這裏個人喜歡寫全,以免以後用哪個找哪個很麻煩-->

    <context:annotation-config />

    <!--關聯數據庫-->
    <context:property-placeholder location="classpath:db.properties" />
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${driverClass}" />
        <property name="jdbcUrl" value="${jdbcUrl}" />
        <property name="user" value="${user}"/>
        <property name="password" value="${password}" />

        <!--c3p0連接池的私有屬性-->
        <property name="maxPoolSize" value="30" />
        <property name="minPoolSize" value="10" />
        <!--關閉連接後不自動commit-->
        <property name="autoCommitOnClose" value="false" />
        <!--獲取連接超時時間-->
        <property name="checkoutTimeout" value="10000" />
        <!--當獲取連接失敗重試次數-->
        <property name="acquireRetryAttempts" value="2" />
    </bean>

    <!--在SpringIoC容器中創建MyBatis的核心類SqlSessionFactory-->
    <bean name="sessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--數據源-->
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.hty.pojo" />
        <!--映射文件-->
        <property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>

    <!--Spring整合MyBatis,把SqlSessionFactory交給Spring管理-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sessionFactoryBean" />
        <property name="basePackage" value="com.hty.mapper" />
    </bean>
    
</beans>

最後配置web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--Spring的配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--SpringMVC的和興:dispatcherServlet-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--SpringMVC的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:SpringMVC.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--配置中文以防止亂碼問題-->
    <filter>
        <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
</web-app>

四、寫我們的視圖頁面

在index.jsp中寫如下內容:

<%@page contentType="text/html;charset=UTF-8" %>
<html>
<body>
<h2>Hello World!</h2>
<a href="${pageContext.request.contextPath}/queryAll">進入列表</a>
</body>
</html>

在WEB-INF下的jsp文件夾下創建queryAll.jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table align="center" border="1" cellspacing="0">
    <tr>
        <td>id</td>
        <td>name</td>
    </tr>
    <c:forEach items="${categoryList}" var="c">
        <tr>
            <td>${c.id}</td>
            <td>${c.name}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

基本上大功告成了,現在配置好tomcat然後跑一下試試~
在這裏插入圖片描述
點擊進入列表~
在這裏插入圖片描述我們數據庫中的信息都查出來顯示在頁面上了,表明搭建成功~

五、注意事項

1.我們用jstl標籤和el表達式的時候,需要把其相關的標籤放在WEB-INF文件夾下,否則會報錯
這是相關文件結構
在這裏插入圖片描述
2.IDEA自帶的web.xml並不是我們想要的,我們需要在項目設置中重新創建一個。
3.SSM項目搭建中配置是關鍵,所以相關的配置信息一定要熟練,剩下的就是相關框架的知識,還是需要多學多練!

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