ssm集成(maven)& 分模塊開發--詳細教程

1 maven版本的ssm

1.1 最簡單的版本步驟:

(1) 建立maven web項目html

(2) 在pom.xml中導入依賴的jar包前端

(3) 再寫配置文件:vue

web.xmljava

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<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"
         version="3.0">
  <display-name>crm</display-name>
  <!-- Spring的配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <!--Spring監聽器 ApplicationContext 載入 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- Spring MVC 核心配置開始 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!-- 編碼過濾器 -->
  <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>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

applicationContext.xmlmysql

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

    <!--掃描的包-->
    <context:component-scan base-package="cn.itsource.crm.service"/>

    <!-- Jdbc配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />

    <!-- 數據源dataSource -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <!--maxActive: 最大鏈接數量 -->
        <property name="maxActive" value="150" />
        <!--minIdle: 最小空閒鏈接 -->
        <property name="minIdle" value="5" />
        <!--maxIdle: 最大空閒鏈接 -->
        <property name="maxIdle" value="20" />
        <!--initialSize: 初始化鏈接 -->
        <property name="initialSize" value="30" />
        <!--maxWait: 超時等待時間以毫秒爲單位 1000等於60秒 -->
        <property name="maxWait" value="1000" />
        <!-- 在空閒鏈接回收器線程運行期間休眠的時間值,以毫秒爲單位. -->
        <property name="timeBetweenEvictionRunsMillis" value="10000" />
        <!-- 在每次空閒鏈接回收器線程(若是有)運行時檢查的鏈接數量 -->
        <property name="numTestsPerEvictionRun" value="10" />
        <!-- 1000 * 60 * 30 鏈接在池中保持空閒而不被空閒鏈接回收器線程 -->
        <property name="minEvictableIdleTimeMillis" value="10000" />
        <property name="validationQuery" value="SELECT NOW() FROM DUAL" />
    </bean>

    <!--Mybatis核心對象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入數據源 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 配置mybatis (mapper)映射器路徑 -->
        <property name="mapperLocations" value="classpath*:cn/itsource/crm/mapper/*Mapper.xml" />
        <!-- 配置mybatis 類型別名 -->
        <property name="typeAliasesPackage">
            <value>
                cn.itsource.crm.domain
                cn.itsource.crm.query
            </value>
        </property>
    </bean>

    <!--注入映射器,一勞永逸的作法-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.itsource.crm.mapper"></property>
    </bean>

    <!--事務管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--以註解的方式進行事務管理-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

applicationContext-mvc.xmlios

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

    <!-- 自動掃描該包,使SpringMVC認爲包下用了@controller註解的類是控制器 -->
    <context:component-scan base-package="cn.itsource.crm.web.controller" />

    <!-- 啓動SpringMVC的註解功能 -->
    <mvc:annotation-driven/>

    <!--靜態資源放行-->
    <mvc:default-servlet-handler/>

    <!-- 定義跳轉的文件的先後綴 ,視圖解析器配置-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 配置文件上傳解析器 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 默認編碼 -->
        <property name="defaultEncoding" value="utf-8" />
        <!-- 文件大小最大值 -->
        <property name="maxUploadSize" value="10485760000" />
    </bean>
</beans>

db.propertiesweb

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///crm?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

log4j.propertiesajax

log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
log4j.logger.cn.itsource=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

(4) 搭建service層,mapper層,controller層spring

(5) 進行測試sql

1.2 抽取一些公共的內容的版本

(1) 抽取BaseMapper

  把公共的crud方法抽取到BaseMapper裏面。

(2) 抽取IBaseService和BaseServiceImpl

  把公共的crud方法抽取到BaseService裏面,經過BaseServiceImpl去實現BaseService裏面的方法。

(3) 抽取BaseDomain

  抽取公共的id。

2 maven項目的分模塊開發

2.1 爲何須要分模塊開發

使用傳統的ssm結構,在隨着項目的進行,咱們可能遇到下面一系列的問題:

(1) 大部分的domain或者一些service以及mapper在多個項目中是通用的

(2) pom.xml中的依賴愈來愈長

(3) build整個項目的時間愈來愈長,儘管你只是一直在web層工做,可是不得不build整個項目

(4)  某個模塊,好比mapper,你只想讓一些經驗豐富的人來維護,可是如今每一個開發者都能修改這個模

塊,這致使關鍵模塊的代碼質量達不到你的要求

2.2 什麼是分模塊開發

    一個大項目拆分爲多個小項目(maven模塊)組成,並且它們是有依賴關係的。

2.3 怎麼去分模塊開發

寫項目寫代碼儘可能知足如下內容:

(1) 開閉原則

  對擴展開放

  對修改關閉-->公共的不要亂修改

(2) 高內聚:好比一個方法(方法就應該完成一個方法該乾的事情) -- 最多40行

  低耦合:儘可能的分層開發  mapper  service  controller(方便維護)

拆分:

  按照層次結構拆分

  按照業務功能拆分:電商、訂單、物流……

(1) 代碼拆分

  basic-util 工具類

  basic-core 公共內容

  crm-common 具體項目公共內容

  crm-mapper 項目裏面具體mapper

  crm-service 項目裏面service類

  crm-web 項目的controller層

  ……

  pss-common

 

 

(2) 配置文件拆分

web.xml  /  applicationContext-mvc.xml --> crm-web模塊

applicationContext.xml --> crm-service模塊

(3) 效果

 

 

 3 RESTful風格

  RESTful是一種開發理念是設計風格而不是標準。 REST描述的是在網絡中client和server的一種交互形式;REST自己不實用,實用的是如何設計 RESTful API(REST風格的網絡接口),一種萬維網軟件架構風格。

前端代碼 --> 後端代碼進行交互,交互的時候前端代碼(axios)發送請求到後端代碼

axios --> get / post / put / delete / patch

3.1 RESTful風格理解

<a href="/xxx"> --> get

<form method="post"> --> post

ajax --> get/post

除了get/post之外,還支持其餘請求 put/delete/patch  --> http協議擴展出來的

沒有RESTful之前:

  /addUser?name='Bob'&age=38  -- get

  /delete?id=1

=====================================華麗的分割線=============================================

RESTful風格:傳輸請求風格寫法  --  http get/post/patch/put/delete  完成增刪改查:

(1) put動做 + /user(資源路徑) {"name":"Bob","age":28} --> 新增

(2) post動做 + /user(資源路徑) {"name":"Bob","age":28} --> 修改

(3) delete 動做 +/user/1 --> 表示刪除id爲1的用戶

(4) get 動做 + /user/10 --> 查詢id爲10的用戶

(5) patch 動做 + /user --> 批量查詢

 

那麼爲何要使用RESTful?

安全性好一點,如今比較流行的風格,不會暴露動做

3.2 RESTful代碼實現

如下爲測試代碼:

新增:

/**
 * 新增數據
 */
@RequestMapping(method = RequestMethod.PUT)
@ResponseBody
public AjaxResult save(@RequestBody Department department) {
    System.out.println("新增數據爲:" + department);
    return new AjaxResult();
}

修改:

/**
 * 修改數據
 */
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public AjaxResult update(@RequestBody Department department) {
    System.out.println("修改數據爲:" + department);
    return new AjaxResult();
}

刪除:

/**
 * 刪除數據
 */
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
@ResponseBody
public AjaxResult delete(@PathVariable Long id) {
    System.out.println("刪除一條數據id爲:" + id);
    return new AjaxResult();
}

查詢一條:

/**
 * 查詢一條數據
 */
@RequestMapping(value = "{id}", method = RequestMethod.GET)
@ResponseBody
public AjaxResult findOne(@PathVariable Long id) {
    System.out.println("查詢一條數據id爲:" + id);
    return new AjaxResult();
}

查詢全部:

/**
 * 查詢全部
 */
@RequestMapping(value = "/list",method = RequestMethod.PATCH)
@ResponseBody
public List<Department> findAll() {
    return departmentService.findAll();
}

4 swagger(前端人員使用不少)

實現

  <springfox.version>2.4.0</springfox.version>

    <dependencies>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox.version}</version>
        </dependency>
package cn.itsource.crm.web.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration //至關於寫一個配置文件 application.xml
@EnableWebMvc // 開啓springmvc
@EnableSwagger2 //開啓swagger2
@ComponentScan(basePackages="cn.itsource.crm.web.controller")
public class SwaggerConfig {
    //至關於 <bean ><property name="">   </bean>
    @Bean
    public Docket api(){
        //生成接口信息
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(this.apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("cn.itsource.crm.web.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    //api的 註解 javaweb 文檔的描述信息
    private ApiInfo apiInfo(){
        @SuppressWarnings("deprecation")
        ApiInfo info=new ApiInfo(
                "API接口測試文檔",
                "接口測試",
                "1.0",
                "http://www.itsource.cn",
                "itsource",
                "123",
                "http://www.itsource.cn");
        return info;
    }
}

和spring整合,根據controller 生成的接口的文檔,經過頁面訪問

運行:http://localhost/swagger-ui.html

5 postman

postman就是一個工具,能夠來發送各類http請求,能夠用它來測試http協議接口。

postman就是http協議接口測試工具。

測試 put/get/post/delete/patch這些請求:

6 前端vue-element-admin

基於 vue-cli 和 elementui 搭建出來一個模塊框架,框架基本功能,路由,插件,國際化等

搭建模板:

(1) 解壓文件 --修更名稱

(2) 使用idea 打開

(3) 執行命令 npm install 安裝依賴

(4) 啓動 npm run dev

(5) 訪問

相關文章
相關標籤/搜索