IDEA MAVEN环境下 搭建 SSM 项目

15 篇文章 0 订阅
11 篇文章 0 订阅

本文介绍一下 IDEA MAVEN 环境下,搭建 SSM框架项目。本文含代码,篇幅较长,建议根据目录阅读,或直接点击本文末段的demo下载。

1. IDEA 创建Maven项目

IDEA 创建MAVEN 项目

2.项目结构

项目结构

3.Demo 开发详细步骤

3.1 maven引入必要依赖

maven porm.xml 文件配置如下(此处只引入了,demo所需要的必要依赖)

<?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>com.wys</groupId>
  <artifactId>demo_ssm</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>demo_ssm 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.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

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

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

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>

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

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

    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>

  </dependencies>

  <build>
    <finalName>demo_ssm</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.0.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.7.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.20.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.0</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>

3.2 编写Pojo

package com.wys.pojo;

/**
 * Created by wangyushuai@fang.com on 2018/4/19.
 */
public class Test {
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    private Integer id;
}

3.2 编写 Dao

在ssm框架中,我们使用Mybatis处理数据持久化。 Mybatis需要一个编写一个接口(TestMapper)和一个对应的xml文件(TestMappper.xml 文件规定了sql查询的sql语句)

xml文件中的sql语句将通过 Id 和 接口中的 方法签名对应起来。

下面是对应代码:

package com.wys.mapper;

import com.wys.pojo.Test;

import java.util.List;

/**
 * Created by wangyushuai@fang.com on 2018/4/19.
 */
public interface TestMapper {
    List<Test> allList();
}

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="com.wys.mapper.TestMapper">
    <select id="allList" resultType="Test">
        select id from  `user` order by id desc
    </select>
</mapper>

补充:

TestMapper.class和 TestMapper.xml 需要打包至同一个目录,所以我在Resources路径下建立了对应的路径。

(resources 属于Resources Root, 打包时,将直接打包至 classpath目录,这是需要注意下的尝试。)

3.3 编写Service层

Service层描述了 业务逻辑,由于我们demo逻辑只是一个查询功能,所以看起来比较简单。

先编写一个接口,而后实现接口。做到业务的清晰。

Service.class

package com.wys.service;

import com.wys.pojo.Test;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by wangyushuai@fang.com on 2018/4/19.
 */

public interface TestService {
    List<Test> getAllList();
}

ServiceImpl.class

package com.wys.service;

import com.wys.mapper.TestMapper;
import com.wys.pojo.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by wangyushuai@fang.com on 2018/4/19.
 */

@Service
public class TestServiceImpl implements TestService {
    @Autowired
    TestMapper mapper;//绑定mapper

    @Override
    public List<Test> getAllList() {
        return mapper.allList();
    }
}

3.4 编写Controller层

Controller层,个人理解,他的作用相当于中转站,负责调度作用,接收参数,传递参数,从Service 业务逻辑层获取到数据,然后将数据传至视图层。

package com.wys.controller;

import com.wys.pojo.Test;
import com.wys.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

/**
 * Created by wangyushuai@fang.com on 2018/4/19.
 */
@Controller
@RequestMapping("/")
public class TestController {

    @Autowired
    TestService service;

    @RequestMapping(value = "/index",method = RequestMethod.GET)
    public ModelAndView Index() {
        ModelAndView mv = new ModelAndView();
        List<Test> allUser =  service.getAllList();
        mv.setViewName("test");
        mv.addObject("userList",allUser);
        return mv;
    }
}

3.5 编写视图层

test.jsp 接收 Controller 传递来的数据,并将数据显示。

<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:forEach items="${userList}" var="item" varStatus="vs">
        <p>${item.id}</p>
    </c:forEach>
</body>
</html>

注意: 此处注意一下,我在这儿并没有使用 isELIgnored=”false”,这可能会导致你的视图层无法识别你的 JSTL表达式。

由于我在 web.xml 中已经配置过了,所以不再需要每个页面都写 JSTL表达式了。相关注意点,我们下篇博文分享。

3.6 Spring MVC 相关配置

上面我们已经编写完了业务代码,后面就是配置Spinrg了,这一块要尤其注意,配置错一点,就可能导致项目无法运行成功。

我们需要配置三个文件: SpringMVC.xml , applicationContext.xml, web.xml 文件

3.6.1 SpringMVC.xml

SpringMVC.xml 中主要干一下几件事儿。

  • 扫描Controller,并将其生命周期纳入Spring管理
  • 注解驱动,以使得访问路径与方法的匹配可以通过注解配置
  • 静态资源可访问,如 静态页面,如html,css,js,images可以访问
  • 视图定位(拼接逻辑等)

代码如下:

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


    <!--1. 扫描Controller,并将其生命周期纳入Spring管理 -->
    <context:annotation-config></context:annotation-config>
    <context:component-scan base-package="com.wys.controller">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
    </context:component-scan>

    <!--2. 注解驱动,以使得访问路径与方法的匹配可以通过注解配置-->
    <mvc:annotation-driven/>

    <!--3. 静态页面,如html,css,js,images可以访问-->
    <mvc:default-servlet-handler />

    <!--视图定位到/WEB/INF/jsp 这个目录下-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/pages/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

3.6.2 配置applicationContext.xml

applicationContext.xml 主要负责以下几件事儿。

  • Service声明周期 纳入Spring的管理
  • 配置数据源
  • 扫描存放SQL语句的[*]Mapper.xml 文件
  • 扫描Mapper,并将生命周期其纳入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"
       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">

    <context:annotation-config />
    <context:component-scan base-package="com.wys.service"/>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url">
            <value> jdbc:mysql://localhost:3306/_local_test?characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;useSSL=false</value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value>root</value>
        </property>
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="typeAliasesPackage" value="com.wys.pojo" />
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:com/wys/mapper/*.xml"/>
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.wys.mapper"/>
    </bean>

</beans>

3.6.3 配置web.xml 文件

web.xml 文件主要完成如下配置:

  • 通过ContextLoaderListener在web app启动的时候,获取contextConfigLocation配置文件的文件名applicationContext.xml,并进行Spring相关初始化工作

–有任何访问,都被DispatcherServlet所拦截,这就是Spring MVC那套工作机制了。

<?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"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  <display-name>Archetype Created Web Application</display-name>

    <!-- spring的配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- spring mvc核心:分发servlet -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- spring mvc的配置文件 -->
        <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>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

4 部署运行

部署至Tomcat

5 补充

在这个demo里,除了搭建SSM,我还加了记录日志的配置,resources下的log4j.properties文件。

这样我们就可以看到 Mybatis拼接的sql语句等日志了。

文件配置如下:

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.wys=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

6 运行效果:

运行效果

7 demo下载

https://github.com/wangyushuai/demo_ssm.git

8 参考博客

http://how2j.cn/k/ssm/ssm-tutorial/1137.html?p=28653

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值