ssm項目整合簡單入門(一)

本文主要是對於ssm項目整合簡單入門做一些介紹,並不深入瞭解,只接觸表面,對一些較複雜的內容也不過多描述。如文中有錯誤之處,望不吝賜教,謝謝~

一、SSM簡介

顧名思義,ssm即爲 spring+spring mvc+mybatis。ssm是這三種框架的集合,在開發中不單單使用某一框架,而使用多個框架,ssm恰好滿足了這一功能。
ssm在Java web項目中的結構如下所示:
圖片來自黑馬程序員

二、SSM簡單項目入門

(1)準備好數據庫
數據庫名爲test,有一張用戶表user

在這裏插入圖片描述
(2)新建maven項目
在這裏插入圖片描述
並且選擇好自己的maven配置以及倉庫.

(3)引入依賴
pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>ssm_study_demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>ssm_study_demo Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>

    <!--spring 版本號-->
    <spring.version>5.2.3.RELEASE</spring.version>

    <!--mybatis 版本號-->
    <mybatis.version>3.4.5</mybatis.version>

    <slf4j.version>1.6.6</slf4j.version>
    <log4j.version>1.2.12</log4j.version>
    <mysql.version>5.1.6</mysql.version>

  </properties>

  <dependencies>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.6.8</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

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

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- log start -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
    </dependency>

    <!-- log end -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>

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

    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>ssm_study_demo</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

(4)在mian目錄下創建java、resources文件夾並分別指明爲sources rootresources root。再在Java目錄下創建controller包(控制器層)、dao包(持久層)、service包(服務層)和domain包(實物對象)。
在這裏插入圖片描述
(5)在domain目錄下創建user類

package com.example.domain;

import java.io.Serializable;

public class User implements Serializable {

    //id
    private Integer id;

    //用戶名
    private String username;

    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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                '}';
    }
}

(6)在dao目錄下創建UserDao接口

package com.example.dao;

import com.example.domain.User;

public interface UserDao {

    //根據用戶名查詢用戶
    public User findByUsername(String username);
}

(7)在service目錄下創建UserService接口及其實現類UserServiceImpl

UserService

package com.example.service;

import com.example.domain.User;

public interface UserService {
    /**
     * 根據用戶名查詢用戶
     * @param username
     * @return
     */
    public User findByUsername(String username);
}

UserServiceImpl



(8)在controller目錄下編寫UserController類

(9)在resources目錄下創建spring配置文件applicationContext.xml

(10)在resources目錄下創建spring mvc配置文件springmva.xml

(11)在webapp下面的WEB-INF目錄下新建pages目錄,然後在pages目錄下新建user,jsp文件

<%--
  Created by IntelliJ IDEA.
  User: 51954
  Date: 2020/3/15
  Time: 19:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
       <h3>查詢到用戶</h3>
</body>
</html>

(12)將該項目部署到tomcat服務器上
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

(13)運行項目,點擊測試,轉到user.jsp頁面,說明controller(使用spring mvc)這部分成功。
在這裏插入圖片描述

在這裏插入圖片描述

(14)整合spring和spring mvc,由於spring mvc主要是在controller方面,而spring主要在service和dao方面,在此案例中若UserController可以成功調用userService中的方法,則可說明二者已經成功整合在一起去了。

  • 在web.xml文件中添加spring的監聽器,以便啓動spring的配置文件
<!--配置Spring的監聽器(以啓動spring的配置文件),默認只加載WEB-INF目錄下的applicationContext.xml配置文件-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!--設置配置文件的路徑-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  • 在UserController裏面調用UserService裏面的方法
package com.example.controller;

import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(path = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(path = "findByUsername")
    public String findByUsername(String username){
        //調用service方法
        System.out.println(userService.findByUsername("xiaoming"));

        return "user";

    }
}

再執行程序,發現結果與上面一致。注意控制檯輸出的null值是因爲此時還未連接數據庫,因此查不到數據,如果單純是爲驗證的話,可以將findByUsername函數裏面直接改爲輸出一段話,這樣測試起來更方便一些,這裏不這樣只是爲了後後面連接數據庫更好的銜接。

(15)在resources目錄下新建mybatis核心配置文件SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <!--配置環境-->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--引入映射配置文件-->
    <mappers>
        <package name="com.example.dao"/>
    </mappers>

</configuration>

(16)在UserDao中添加相應的註解來完成對數據庫的操作

package com.example.dao;

import com.example.domain.User;
import org.apache.ibatis.annotations.Select;

public interface UserDao {

    //根據用戶名查詢用戶
    @Select("select * from user where username=#{username}")
    public User findByUsername(String username);
}

(17)創建TestMybatis來驗證導入mybatis是否成功


package com.example.test;

import com.example.dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class TestMybatis {

    @Test
    public void run1() throws IOException {
        //加載配置文件
        InputStream in=Resources.getResourceAsStream("SqlMapConfig.xml");

        //創建SqlSessionFactory對象
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);

        //創建sqlSession對象
        SqlSession session=factory.openSession();

        //獲取代理對象
        UserDao userDao=session.getMapper(UserDao.class);

        //執行方法
        System.out.println(userDao.findByUsername("xiaoming"));

        //關閉資源
        session.close();
        in.close();
    }
}

輸出結果如下,說明成功使用了mybatis。
在這裏插入圖片描述
(18)整合mybatis,在spring的配置文件裏面配置有關mybatis的選項,並刪除之前的mybatis配置文件SqlMapConfig

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--開啓註解的掃描,希望處理service和dao,controller不需要Spring框架去處理而是用spring mvc-->
    <context:component-scan base-package="com.example" >
        <!--配置哪些註解不掃描-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

    <!--Spring整合MyBatis框架-->
    <!--配置連接池-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test"/>
        <property name="user" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <!--配置SqlSessionFactory工廠-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!--配置Dao接口所在包-->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.dao"/>
    </bean>

    <!--配置Spring框架聲明式事務管理-->
    <!--配置事務管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!--配置事務通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="*" isolation="DEFAULT"/>
        </tx:attributes>
    </tx:advice>

    <!--配置AOP增強-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.itcast.service.impl.*ServiceImpl.*(..))"/>
    </aop:config>

</beans>

(19)在UserDao上面添加@Repository註解,在UserServiceImpl裏面調用UserDao的函數

UserDao

package com.example.dao;

import com.example.domain.User;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

@Repository
public interface UserDao {

    //根據用戶名查詢用戶
    @Select("select * from user where username=#{username}")
    public User findByUsername(String username);
}

UserServiceImpl

package com.example.service.impl;

import com.example.dao.UserDao;
import com.example.domain.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    /**
     * 根據用戶名查詢用戶
     * @param username
     * @return
     */
    @Override
    public User findByUsername(String username) {
        return userDao.findByUsername(username);
    }
}

(20)啓動項目,運行結果與上面一致,說明mybatis整合成功。

三、總結

SSM項目整合以spring爲核心,並且spring mvc主要是處理控制器方面,mybatis主要是處理持久層方面,而spring是統籌這兩部分以及處理其他部分的內容。

在這裏插入圖片描述

2020.03.15

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