000610 spring系笔记-SSM框架搭建

idea + maven + ssm( spring-framework( spring基础组件(spring-core spring-beans等)+ springMVC  ) + 第三方ORM: mybatis)

一 准备工作:

1. idea安装, maven安装

2. idea集成maven

 idea界面下, File-Settings-Build, Execution, Deployment-Build Tools-Maven, 右边只勾选 Execute goals recursively, 并设置你的Maven home directory为本地目录

   

,然后进入Maven home directory指向的目录, 按我的是"D:/idea/plugins/maven/lib/maven3", 在这个目录下有一个conf目录,里面有settings.xml, 找到<mirros>标签,写入如下配置并保存

    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
     <mirror>
        <id>maven-net-cn</id>
        <name>Maven China Mirror</name>
        <url>http://mvnrepository.com/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
        <id>CN</id>
        <name>OSChina Central</name>
        <url>http://maven.oschina.net/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>

三个镜像点,阿里作为主力,后面两个作为补充

这样一来,File-Settings-Build, Execution, Deployment-Build Tools-Maven-Repository下面的远程地址地址是否"Update"也无所谓了,不过是顶部的是Local本地的仓库地址,有时候如果版本异常,可以尝试选中后,右边"Update"一下

 

 二   下面我们构建第一个以ssm框架人底板的rbac系统,主体以imooc.com中jimin老师的企业级权限系统为主体:

   课程地址: https://coding.imooc.com/learn/list/149.html

   其中 ssm框架的集成在第5章,而权限系统的开发前设计分析在第4章.这里, 我们先按第5章搭建ssm

   idea-create new project-Maven-上方选择jdk版本,勾选Create from archetype-选中下方maven-archetype-webapp-点击next

  

   然后是设置GroupId(相当于包名), ArtifactId(相当于项目名)

  

  设置Maven home directory

  

  下一步,修改默认生成的项目名称和地址(注,目录需要提前建好,而且,先改地址,再改项目名称)

  

  点击Finish,这时候idea开始建立maven新项目,会在右下角提示是否自动导入,选择自动导入

  

  BUILD SUCCESS,Maven执行完成.下面我们先从pom.xml的依赖配置入手,开始配置工作

  在pom.xml中写入

  

<properties>
    <springframework.verion>4.3.10.RELEASE</springframework.verion>
</properties>

  <dependencies>
    <!--dependency>
      <groupId>com.mine</groupId>
      <artifactId>[the artifact id of the block to be mounted]</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency-->
    <dependency>
      <!-- spring核心 -->
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${springframework.verion}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${springframework.verion}</version>
    </dependency>
    <!-- springMVC + spring web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${springframework.verion}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${springframework.verion}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${springframework.verion}</version>
    </dependency>

这里是定义spring-framework的版本, 然后引入本项目的核心模块.接下来,加入数据库相关的依赖:

<!-- mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.0</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>
    <!-- druid -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.20</version>
    </dependency>
    <!-- mysql -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.30</version>
    </dependency>

然后我们加入便利代码编写的辅助依赖:

 <!-- lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.12</version>
    </dependency>
    <!-- jackson -->
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-guava</artifactId>
      <version>2.5.3</version>
    </dependency>

 下面我们进行web.xml的配置,首先,清空原有的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"
         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>Archetype Created Web Application</display-name>


</web-app>

然后在<web-app></web-app>中间开始写配置:

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

然后写入,并在 resources 目录下建立 applicationContext.xml , 并在 WEB-INF 下建立 spring-servlet.xml (注意,这里的中横线前的名字spring是与<servlet-name>中的值是对应的) (图片要是看不清, 就下载图片看,是大的):

<!-- spring beans 配置文件所在目录 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <!-- spring mvc 配置文件所在目录 -->
  <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

 

最后,我们在web.xml中写入:

<!-- encoding 配置 -->
  <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>

  <!-- 项目未明确指定加载文件时,使用以下配置 -->
  <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

现在我们在main目录下建立java目录,把java目录右键 Mark Direcotory As, 选择 source root,并参照下图建立好各级目录:

下面我们来配置spring-servlet.xml, 内容如下,注释清楚,注意阅读

<!-- 启动注解驱动的spring mvc 功能 -->
    <mvc:annotation-driven/>

    <!-- 启动包扫描功能 -->
    <context:component-scan base-package="com.mine.controller" />

    <!-- 作用:为 我们定义好的RequestMapping注解 指定 对应的处理代码 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />

    <!-- 作用:当来一个请求之后,我该以什么样的数据返回,可以返回.pdf .css .js json等 -->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />

    <!-- 作用:如果RequestMapping对应代码处理后以json返回,则以下面的这个类来处理. 注意,这个id必须是 jsonView -->
    <bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />

    <!-- 作用:如果RequestMapping对应代码处理后以jsp返回,则以下面的这个类来处理. 注意,这个id必须是 jsonView -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 目标返回文件的父目录 -->
        <property name="prefix" value="/views/" />
        <!-- 目标返回文件的后缀,即文件格式 -->
        <property name="suffix" value=".jsp" />
    </bean>

 下面进行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:tx="http://www.springframework.org/schema/tx"
       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.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.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.mine.service" />

    <!-- 读取properties文件,给dataSource使用 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="locations">
            <list>
                <value>classpath:settings.properties</value>
            </list>
        </property>
    </bean>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close" >
        <property name="driverClassName" value="${db.driverClassName}" />
        <property name="url" value="${db.url}" />
        <property name="username" value="${db.username}" />
        <property name="password" value="${db.password}" />
        <property name="initialSize" value="3" />
        <property name="minIdle" value="3" />
        <property name="maxActive" value="20" />
        <property name="maxWait" value="60000" />
        <property name="filters" value="stat" />
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定mybatis的配置文件 -->
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <!-- 指定数据连接 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 指定mapper地址为 resources/mapper/目录下所有的.xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.mine.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>


    <!-- 上面的是核心配置,下面先配置事务 tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- druid 配置 -->
    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
        <property name="slowSqlMillis" value="3000" />
        <property name="logSlowSql" value="true" />
        <!-- 使用换行的sql写成一行,方便查看 -->
        <property name="mergeSql" value="true" />
    </bean>
    <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
        <property name="dbType" value="mysql" />
    </bean>

</beans>

同时要在resources目录下建立setttings.properties文件,内容写入以下,密码和数据库名根据自己的情况来写,同时也在mysql中建立数据库,我这里是 spring-base-ssm-permission

db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/spring-base-ssm-permission?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
db.username=root
db.password=123456

 同时要在resources目录下建立mapper文件夹,并在mapper下随便先放一个空的test.xml

 下面,我们进行 druid 的配置,打开web.xml, 添加:

<!-- durid监控界面访问配置 -->
  <servlet>
      <servlet-name>DruidStatServlet</servlet-name>
      <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
      <init-param>
          <param-name>loginUsername</param-name>
          <param-value>druid</param-value>
      </init-param>
      <init-param>
          <param-name>loginPassword</param-name>
          <param-value>druid</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>DruidStatServlet</servlet-name>
      <url-pattern>/sys/druid/*</url-pattern>
  </servlet-mapping>
  <filter>
      <filter-name>DruidStatFilter</filter-name>
      <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
      <!-- 过滤掉我们不需要拦截的请求,比如 .css .js等 -->
      <init-param>
          <param-name>exclusions</param-name>
          <param-value>*.js,*.css,*.jpg,*.png,*.gif,*.ico,/sys/druid/*</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>DruidStatFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

 下面来配置mybatis, 打开mybatis-config.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>

    <settings>
        <setting name="safeRowBoundsEnabled" value="true"/>
        <setting name="cacheEnabled" value="false" />
        <setting name="useGeneratedKeys" value="true" />
    </settings>

    <!--<typeAliases>-->
        <!---->
    <!--</typeAliases>-->

    <!--<plugins>-->
        <!--<plugin interceptor=""></plugin>-->
    <!--</plugins>-->

    <!--<typeHandlers>-->
        <!---->
    <!--</typeHandlers>-->

</configuration>

 接下来,我们加入logback日志管理, 打开pom.xml,加入logback的依赖:

<!-- logback (是log4j的改进版) -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.2.1</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.1</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>

然后,我们在resources目录下建立logback.xml,并写入以下内容

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <!--<appender name="permission" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
        <!--<file>${catalina.home}/logs/permission.log</file>-->
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
            <!--<FileNamePattern>${catalina.home}/logs/permission.%d{yyyy-MM-dd}.log.gz</FileNamePattern>-->
        <!--</rollingPolicy>-->
        <!--<layout class="ch.qos.logback.classic.PatternLayout">-->
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>-->
        <!--</layout>-->
    <!--</appender>-->
    <!---->
    <!--<logger name="xxx" level="INFO">-->
        <!--<appender-ref ref="permission"/>-->
    <!--</logger>-->

    <!-- 追踪日志的等级: TRACE < DEBUG < INFO < WARN < ERROR -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

 

下面进行配置的测试:

首先,在Controller目录下新建class, 名字叫 TestController,内容如下:

package com.mine.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/test")
@Slf4j
public class TestController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        log.info("hello");
        return "hello, permission";
    }


}

然后在Dao目录下新建一个接口TestDao, 内容如下:

package com.mine.dao;

public interface TestDao {
}

然后在mapper.xml下建立TestMapper.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.mine.dao.TestDao">

</mapper>

然后对工程进行配置(这部分细节可以看视频 5-8 https://coding.imooc.com/lesson/149.html#mid=7937,也可以看下面的文本图片说明):

首先是tomcat配置,我这里是配置本地的tomcat7

然后选择deployment,点击绿色加号按钮,点击 Artifact, 选择 spring-base-ssm-permission:war exploded, 点击下方的Apply,再点击OK保存.

再进行project的配置 

File-Project Structure, 点击Project, 把Project language level设置为 8, 如图

 点击Modules,在右边的Sources下设置language level为8, 点击Dependencies,把Module SDK选定为本地的java 1.8,如下两图

选择OK保存

打开项目目录下的.idea/compiler.xml,把 target="1.5" 改成 target="1.8"

然后,我们重要编译项目, 菜单Build-Build Project, 编译完成后,浏览器访问 http://localhost:8080/test/hello, 输出 hello, permission, 控制台也打印logback日志

------------------------------

 

下面进入实际的编码阶段

posted @ 2019-08-10 14:35  站在菠萝的肩膀上  阅读(160)  评论(0)    收藏  举报