zoukankan      html  css  js  c++  java
  • SSM项目之电商项目easymall(一)

    一 环境准备

    软件环境:

       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,数据库客户端;

    二 分析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数据库

    1 商品相关--t_product
            ○ 展示全部商品的分页信息
            ○ 某个商品的信息
            ○ 后台的商品管理增删改查
      商品表格

    •  product_id:商品的id,全局唯一,主键,char,UUID
    •     product_name: 商品的名称,varchar
    •     product_price: 商品价格 double
    •     product_category: 商品类目
    •     product_imgurl: 商品图片的url连接地址
    •     product_num: 商品的库存
    •     product_description: 商品的简介

    2 用户相关---t_user
          • 登录 (查询单个user)
          • 注册 (新增)
          • 注册的用户名校验(查询)
      用户表格

    •   user_id: 全局唯一的主键,uuid
    •    user_name:用户名称
    •    user_password:密码
    •    user_nickname: 昵称
    •    user_email: 用户邮箱
    •    user_type: 用户类型,于权限有关;

    3 购物车相关--t_cart
       • 添加购物车
       • 查询当前用户的所有购物车商品
       • 修改购物车数量
       • 删除购物车

         购物车表格

    •     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

    •     order_id: 主键,也是t_order_item关联的键
    •     order_money: 订单支付金额
    •     order_receiverinfo: 收信人信息
    •     order_paystate: 支付状态
    •     order_time:创建时间
    •     user_id: 用户关联的

    表格代码 可以直接通过sqlyong导入数据库(想要数据库设计sql代码留言私发,这里不支持上传)

     

     

    四 maven工具管理项目框架

     4.1web项目的管理方式的弊端:
            myeclipse生成一个web应用的项目结构,servlet直接开发代码
            如果用到三大框架的内容:
            1 jar的管理不规范
                把jar包先找到,完全是凭借测试和经验完成的;
            2 直接整合外界的第三方tomcat进行war包的运行

            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的安装和环境配置

        https://www.cnblogs.com/nanlinghan/p/9968806.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测试当前工程的启动

  • 相关阅读:
    8.10
    今日头条笔试题 1~n的每个数,按字典序排完序后,第m个数是什么?
    Gym 100500B Conference Room(最小表示法,哈希)
    CodeForces 438D The Child and Sequence(线段树)
    UVALIVE 6905 Two Yachts(最小费用最大流)
    Gym Conference Room (最小表示法,哈希)
    hdu 2389 Rain on your Parade(二分图HK算法)
    Codeforces Fox And Dinner(最大流)
    zoj 3367 Counterfeit Money(dp)
    ZOJ3370. Radio Waves(2-sat)
  • 原文地址:https://www.cnblogs.com/nanlinghan/p/9968871.html
Copyright © 2011-2022 走看看