SSM項目之電商項目easymall(一)

一 環境準備

軟件環境:
css

   1 jdk1.8
       JAVA_HOME:是給軟件用的,各類啓動的軟件都會尋找JAVA_HOME的環境變量;
       Path:給windows用的;
   2 eclipse marS2/neon
       解壓的無中文路徑,無空格的文件夾中;防止讀取相對路徑時出現亂碼
       若是當前系統的JAVA_HOME對應版本是支持neon的啓動的,那麼就能夠直接啓動eclipse
       設置workspace,無中文路徑,無空格
   3 maven3.5
       解壓到無中文路徑,無空格的文件夾便可(後續會介紹,配置,和使用等)
   4 tomcat 9
      tomcat7 沒有自動處理亂碼,tomcat8以上的版本,無需管理亂碼(servlet沒有驗證)
   5 mysql5.5
       若是是5.5無需變更,若是不是,須要刪除從新安裝;5.0沒法導入5.5備份的數據;
       刪除:只裝過一次5.0,直接刪除服務(控制面板的卸載程序)
       安裝sqlYog,數據庫客戶端;
html

二 分析SSM三大框架

Spring框架:
    
工廠類建立對象
    加在xml的標籤建立對象
    經過配置文件掃描註解
    @Controller 控制層對象
    @Service 業務層對象
    @Component 普通對象
    對象的建立交給Spring
    控制反轉: 對象我框架包了
    
    java基礎複用的方法
    方法封裝被調用
    子繼承父類,直接調用
    Spring框架節點
    Spring管理的全部對象中相互注入使用
    @Resource
    @Autowired
    注入依賴:哪用對象,跟我說,注入就直接用
    
Springmvc
    
處理頁面和程序的交互(升級了servlet的使用)
    前端控制器(springmvc,dispatcherServlet,映射mapping "/")
    適配器映射器(handleMapping)(尋找RequestMapping的接收地址)
    適配器協調器(handleAdapter):轉給handler
    處理器(handler): 調用RequestMapping的方法所在類的對象,執行方法,返回
    字符串渲染: WEB-INF/views/index.jsp
    顯式頁面想添加數據: Model 模板對象 addAttribute
    
    Springmvc爲何和spring整合?
        1 實現代碼中的三層結構;controller,service,mapper依賴注入
        2 處理持久層困難(spring能夠整合mybatis)
    Springmvc是怎麼整合的?
        須要:看到配置文件了
        不須要:無縫整合;controller直接注入service使用,造成service調用mapper(前提是spring整合了mybatis),三層項目結構
        
mybatis:
  
 JDBC
    mybatis功能:
        自動封裝(提交的參數,返回的結果,無需手動jdbc處理resultSet)
        sql語句是經過映射文件xml綁定(bind)接口mapper的同名方法;
        配置文件
        駝峯命名,分頁插件
    
    和spring整合
        配置文件(spring_mybatis)
        datasource:數據庫鏈接中的參數,url,username,password,數據庫鏈接池
        sqlSession:datasource
    
    整合一塊兒使用的SSM框架的配置文件
    spring:管理spring容器的配置文件
    spring-mvc:springmvc配置文件
    mybatis:mybatis持久層配置文件
    spring-mybatis:整合spring和mybatis的配置文件
   
前端

三 將easymall項目與SSM框架整合

3.1框架SSM結構  

 

3.2數據庫的設計

  建立easymalldb數據庫java

1 商品相關--t_product
        ○ 展現所有商品的分頁信息
        ○ 某個商品的信息
        ○ 後臺的商品管理增刪改查
  商品表格
mysql

 

  •  product_id:商品的id,全局惟一,主鍵,char,UUID
  •     product_name: 商品的名稱,varchar
  •     product_price: 商品價格 double
  •     product_category: 商品類目
  •     product_imgurl: 商品圖片的url鏈接地址
  •     product_num: 商品的庫存
  •     product_description: 商品的簡介

2 用戶相關---t_user
      • 登陸 (查詢單個user)
      • 註冊 (新增)
      • 註冊的用戶名校驗(查詢)
  用戶表格
git

  •   user_id: 全局惟一的主鍵,uuid
  •    user_name:用戶名稱
  •    user_password:密碼
  •    user_nickname: 暱稱
  •    user_email: 用戶郵箱
  •    user_type: 用戶類型,於權限有關;

3 購物車相關--t_cart
   • 添加購物車
   • 查詢當前用戶的全部購物車商品
   • 修改購物車數量
   • 刪除購物車

     購物車表格
github

  •     id:購物車id int
  •     user_id:當前商品屬於的用戶id
  •     product_id:當前商品id
  •     product_image:商品的圖片
  •     product_name:商品名稱
  •     product_price:商品價錢
  •     num:購物車中商品數量

 

  1.     user_id
  2.     product_id
  3.     複合主鍵;經過2個字段的同時使用,能夠惟一的定位
  4.     到一條購物車商品數據;

4 訂單相關--t_order和t_order_item(主從表的關係,order爲主,item爲從,1對多的關係)
     • 個人所有訂單
    • 新增訂單
    • 刪除訂單
    主表t_order

web

  •     order_id: 主鍵,也是t_order_item關聯的鍵
  •     order_money: 訂單支付金額
  •     order_receiverinfo: 收信人信息
  •     order_paystate: 支付狀態
  •     order_time:建立時間
  •     user_id: 用戶關聯的

表格代碼 能夠直接經過sqlyong導入數據庫(想要數據庫設計sql代碼留言私發,這裏不支持上傳)redis

 

 

 

 

四 maven工具管理項目框架

 4.1web項目的管理方式的弊端:
        myeclipse生成一個web應用的項目結構,servlet直接開發代碼
        若是用到三大框架的內容:
        1 jar的管理不規範
            把jar包先找到,徹底是憑藉測試和經驗完成的;
        2 直接整合外界的第三方tomcat進行war包的運行
spring

        3 項目管理的結構
            src:代碼
            webroot:web應用相關
            ssm框架的配置文件????
            src管理配置文件;          

 4.2 maven介紹  

  Maven項目對象模型(POM),能夠經過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具軟件是一個軟件,而且能夠實現各類項目結構的管理功能--工具;
        快速搭建項目(java普通工程,web應用工程)
        能夠經過引入的各類插件完成豐富的外接功能(例如maven的tomcat插件能夠直接在項目內部啓動插件的tomcat運行web工程)
        對工程的管理結構很是嚴格:
            java工程:
            src/main/java:編寫代碼的文件夾
            src/main/resouces:配置文件(ssm框架,properties等)
            src/test/java:測試代碼,在打包時不會進行包裝
            pom.xml:經過一小段描述來管理項目(管理依賴的jar包,是經過dependency完成)
            web應用工程:
            和java工程同樣:
            main的文件夾下,有webapp的管理,web應用所在的路徑;
    有了maven就能夠方便快速的搭建咱們想要的各類工程結構,從而經過對pom文件中描述信息的修改(標籤),完成項目的各類管理功能;

       

五 maven的安裝和環境配置

    http://www.javashuo.com/article/p-ptxspaor-da.html

六 easymall工程的搭建

1 選擇骨架(webapp)
2 web的應用結構
    src/main/java:當前easymall的ssm框架的全部運行代碼都在這個文件夾
    src/main/resources: 存放配置文件的位置
    src/test/java:測試內容
3 pom的依賴
    maven主要就是管理jar包的依賴,當前SSM框架須要依賴的東西很是多;
    spring,springmvc,mybatis,一些工具的依賴;

 

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jt</groupId>
  <artifactId>easymall-ssm</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>easymall-ssm Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <!-- spring的版本號 -->
    <spring.version>4.3.7.RELEASE</spring.version>
    <!-- mybatis的版本號 -->
    <mybatis.version>3.4.5</mybatis.version>
    <!-- log日誌管理 -->
    <slf4j.version>1.7.12</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
    <pagehelper.version>3.4.2</pagehelper.version>
    <jsqlparser.version>0.9.1</jsqlparser.version>
  </properties>
  <dependencies>
  <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
    <!-- spring context -->
      <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- spring mvc -->
      <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>
      <!-- spring mvc 輔助包 jackson -->
      <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.1</version>
    </dependency>
      <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.1</version>
    </dependency>
    <!--servlet依賴 -->
        <dependency>
            <groupId>javax.servlet</groupId>
               <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    <!-- Spring tx -->
      <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
      <!-- Spring jdbc -->
      <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
      <!-- Spring aop -->
      <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
      <!-- aspectj -->
      <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.7</version>
    </dependency>
    <!-- mybatis -->
      <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
      
      <!-- mybatis-spring -->
      <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>
      <!-- mysql 驅動 -->
      <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.0.8</version>
    </dependency>
      <!-- junit -->
      <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
      <!-- 阿里巴巴數據庫鏈接池 -->
      <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.14</version>
    </dependency>
    <!-- 阿里巴巴的json工具 -->
      <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.7</version>
    </dependency>
    
    <!-- commons fileupload -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.2</version>
    </dependency>
    <!-- jstl -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- Apache poi -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.13</version>
    </dependency>
    <!-- 分頁插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>${pagehelper.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>${jsqlparser.version}</version>
        </dependency>
    <!-- shiro -->  
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-all</artifactId>
      <version>1.2.3</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
        <plugin>
             <artifactId>maven-compiler-plugin</artifactId>
             <configuration>
                 <source>1.8</source>
                 <target>1.8</target>
             </configuration>
        </plugin>
        <plugin>
               <groupId>org.apache.tomcat.maven</groupId>
               <artifactId>tomcat7-maven-plugin</artifactId>
               <version>2.2</version>
               <configuration>
                   <port>80</port>
                   <path>/</path>
               </configuration>
        </plugin>
   </plugins>
  </build>
</project>

 

4 拷貝靜態資源
    easymall-ssm的靜態文件拷貝到當前工程中,從navigator保存

  這裏要關閉eclipse自帶的web前端的各類校驗

  

  (須要靜態資源留言)
5 準備ssm框架的配置文件
    spring自己的配置文件
    spring整合mybatis配置文件
    springmvc配置文件
    mybatis配置文件

   5.1 web.xml

  tomcat容器啓動時會加載當前工程的web.xml文件,會根據web.xml文件中的配置,設置當前加載各類其餘資源,listener,初始化參數,配置spring和springmvc配置文件

  

 1     <context-param>
 2         <param-name>contextConfigLocation</param-name>
 3         <param-value>
 4                   classpath:spring/spring*.xml;              
 5         </param-value>
 6     </context-param>
 7     
 8     指定當前tomcat啓動時須要加載的配置文件,classpath=target/classes;
 9     成功加載配置文件以後,若是有依賴的jar包,就能夠正確啓動spring springmvc容器了;
10     
11     <servlet>
12             <servlet-name>springmvc</servlet-name>
13             <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
14             <init-param>
15                 <param-name>contextConfigLocation</param-name>
16                 <param-value>classpath:spring/spring_mvc.xml</param-value>
17             </init-param>
18             <load-on-startup>1</load-on-startup>
19     </servlet>
20     <servlet-mapping>
21         <servlet-name>springmvc</servlet-name>
22         <url-pattern>/</url-pattern>
23     </servlet-mapping>
  建立springmvc中的dispatcherServlet,實現讀取springmvc的配置文件,當前的servlet就會提供給springmvc的邏輯使用;
  當前dispatcherServlet接收全部的請求地址 "/"

 

 

 

  web.xml是通知tomcat在啓動時加載全部的須要配置的文件;SSM框架

  5.2 spring.xml

  

 1     <bean
 2             class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 3             <!-- 容許JVM參數覆蓋 -->
 4             <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
 5             <!-- 忽略沒有找到的資源文件 -->
 6             <property name="ignoreResourceNotFound" value="true" />
 7             <!-- 配置資源文件 -->
 8             <property name="locations">
 9                 <list>
10                     <value>classpath:mysql.properties</value>
11                 </list>
12             </property>
13         </bean>
14     <!-- 掃描全部com.jt的包-->
15    <context:component-scan base-package="com.jt"></context:component-scan>

 

 

 

  利用加載的spring容器,建立一個PropertyPlaceHolder的對象,讀取mysql.properties的數據(key-value鍵值對),其中的數據就是配置加載的datasource的內容,在配置的指定上進行解耦,能夠修改properties變更鏈接數據庫的信息.

  掃描包的路徑,全部當前工程已com.jt開始的包中只要存在註解都會被spring容器掃描到,像@Component,@Service等就會自動建立對象

  5.3 spring_mvc.xml

   

<!-- 在restful模式下,添加靜態資源 若是刪除致使頁面沒有js效果-->
        <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
        <mvc:resources location="/" mapping="/**"></mvc:resources>

 

      
    保持當前jsp等頁面資源加載成功js,css等內容

       
    <!-- 掃描spring的組件 -->
        <context:component-scan base-package="com.jt.easymall.controller"></context:component-scan><!-- 掃描 spring mvc的註解 @RequestMapping @ResponseBody -->
        <mvc:annotation-driven></mvc:annotation-driven>
        

 

 

   springmvc掃描的spring建立的對象,完成和spring的整合;requestMapping映射就能夠加載全部com.jt.easymall.controller的類中;
    啓動responseBody requestMapping requestParam requestBody
    

    <!-- spring mvc處理響應的jsp -->
        <bean id="viewResolver"
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>

 

 


    頁面渲染時拼接的先後綴名稱,/WEB-INF/views/保存着全部頁面;
    

    <!-- spring mvc 文件上傳 -->
        <bean id="multipartResolver"
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!--能配置多少個property,能夠查文檔和查詢源代碼 -->
            <!--最大上傳文件的大小 -->
            <property name="maxUploadSize" value="8388608"></property>
            <property name="resolveLazily" value="true"></property>
        </bean>

 

 


    MultipartFile是springmvc的包中的類,處理頁面上傳的文件;
    大小定義,和懶加載,接收的其實是流對象;

  5.4 spring-mybatis整合

 

 1     <!-- 數據庫鏈接池 commons-dbcp ,c3p0,proxool,阿里巴巴druid -->
 2         <bean id="alibabaDataSource"
 3               class="com.alibaba.druid.pool.DruidDataSource"
 4               init-method="init"
 5               destroy-method="close">
 6             <!-- 數據庫鏈接的4項 -->
 7             <property name="driverClassName">
 8                 <value>${jdbc_driverClass}</value>
 9             spring啓動時,PropertiesPlaceHolder加載了mysql.properties文件 定義的jdbc_driverClass
10             </property>
11             <property name="url">
12                 <value>${jdbc_url}</value>
13             </property>
14             <property name="username">
15                 <value>${jdbc_userName}</value>
16             </property>
17             <property name="password">
18                 <value>${jdbc_userPassword}</value>
19             </property>
20             <!-- 鏈接池中的最大鏈接數 -->
21             <property name="maxActive">
22                 <value>5</value>
23             </property>
24             <!-- 初始化的鏈接數 -->
25             <property name="initialSize">
26                 <value>2</value>
27             </property>
28             <!-- 獲取鏈接的最大等待時間 -->
29             <property name="maxWait">
30                 <value>6000</value>
31             </property>
32             <!-- 鏈接池的最大空閒 -->
33             <property name="maxIdle">
34                 <value>2</value>
35             </property>
36             <!-- 鏈接池的最小空閒 -->
37             <property name="minIdle">
38                 <value>2</value>
39             </property>
40             <!-- 自動清除無用的鏈接 -->
41             <property name="removeAbandoned">
42                 <value>true</value>
43             </property>
44             <!-- 自動清除無用的鏈接的等待時間 -->
45             <property name="removeAbandonedTimeout">
46                 <value>180</value>
47             </property>
48             <!-- 鏈接屬性 -->
49             <property name="connectionProperties">
50                 <value>clientEncoding=UTF-8</value>
51             </property>      
52         </bean>
53     
54     <!-- 實例化MyBatis的SqlSessionFactoryBean對象-->
55         <!--mybatis配置,讀取配置文件(掃描配置文件)-->
56         <bean id="sqlSessionFactory"
57             class="org.mybatis.spring.SqlSessionFactoryBean"
58             p:dataSource-ref="alibabaDataSource" //綁定的數據源
59             p:mapperLocations="classpath:mapper/*.xml"> //映射文件mapper.xml的位置 src/main/resources
60             <!-- mybatis-config.xml -->
61             <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/> //指向mybatis的內容配置文件
62             <!-- 定義當前工程的別名包 -->
63             <property name="typeAliasesPackage" value="com.jt.easymall.pojo"/> //持久層封裝對象時,無需指定類的全路徑名稱 resultType="Product"
64         </bean>

 

 

 

  spring管理的整合持久層對象sqlSession;沒有這個對象動態代理沒法完成接口類方法的實現和xml映射文件中sql語句的綁定關係

 

  5.5 mybatis.xml

  

        <settings>
            <!-- 開啓駝峯自動映射 -->
            <setting name="mapUnderscoreToCamelCase" value="true" />
            <!-- 二級緩存的總開關  redis完成緩存的功能.不使用數據庫自身的緩存-->
            <setting name="cacheEnabled" value="false" />
</settings>

 

 

 

  到此SSM項目框架搭建成功(搭建過程當中可能會出現不一樣的問題,一些常見的問題已經整理好 請查看https://www.cnblogs.com/nanlinghan/p/9973495.html解決)

七 測試工程(easymall首頁顯示)

  邏輯:
  首頁index.jsp存儲在 WEB-INF/views/index.jsp
  訪問url:localhost:port/直接訪問

  代碼邏輯
  編寫在一個被spring和springmvc掃描到的controller裏

 1 @RequestMapping("/")
 2 public String goIndex(){
 3     return "index";}
 4     
 5 package com.jt.easymall.controller;
 6 @Controller
 7 public class IndexController {
 8     
 9     //添加首頁的映射地址"/"
10     @RequestMapping("/")
11     public String goIndex(){
12         return "index";//WEB-INF/views/index.jsp
13 }}

 

Maven的tomcat插件

  maven內部能夠引入tomcat的插件,執行當前工程的啓動功能,無需外部的tomcat容器來加載當前工程的war包執行了;
  pom中經過描述信息,引入maven的tomcat插件

    

  配置啓動maven工程的debug模式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 完成配置以後,能夠點擊debug測試當前工程的啓動

相關文章
相關標籤/搜索