• SSM总结


    一.框架

    1.总体框架

    在这里插入图片描述

    2.总体流程

    ①配置文件

    • 创建表,引入依赖
    • 配置web.xml文件
      • 配置springmvc前端控制器(获取请求并响应)
      • 配置springmvc的配置文件的位置
      • 配置spirng监听器(初始化父类IOC容器)
      • 配置spring的配置文件的位置
      • 配置spring的编码过滤器(get,put编码不正常)
      • 配置springmvc的处理请求方式的过滤器
        (有PUT,DELETE)
    • 配置springmvc文件
      • 扫描Controller组件
      • 配置视图解析器
      • 配置访问首页的视图控制
      • 配置默认servlet处理静态资源
      • 开启mvc注解驱动
    • 配置spring配置文件
      • 扫描除controller之外的组件
      • 配置数据库组件
        • 引入jdbc.properties
        • 配置德鲁伊数据源
        • 配置创建sqlsessionfactory的工厂bean
        • 配置mapper接口的扫描,可以将包下的mapper接口的动态代理交给IOC容器的bean管理
    • 配置jdbc.properties
      • driver
      • url
      • user
      • password
    • 配置mybatis-cofig
      • 配置下划线到小驼峰
      • 配置分页插件
    • 配置mapper映射文件
      • sql的唯一表示 命名空间(类名)
      • sql的唯一表示 id(方法名)
      • sql结果的返回集

    ②具体类和接口

    • pojo
      • Employee类
    • controller
      • EmployeeController类
        • @Controller
        • @Autowired
        • @RequestMapping
    • service
      • 接口EmployeeService
      • 实现类EmployeeServiceImpl
        • @Service
        • @Autowired
    • mapper
      • 抽象方法

    二.实现过程

    1.配置web.xml

    ①配置原理

    • 服务器启动的初始化顺序
      • context-param -> listener -> filter -> servlet
      • 即服务器先读取web.xml中的 context-param和listener并创建一个servletcontext配置一个全局信息存储
      • 在利用listener来加载context-param的配置文件,并创建一个WebApplicationContext(springIOC容器中)存储在ServletContext全局存储信息
      • 最后springIOC容器初始化web.xml中的过滤器和servlet并为其初始化其上下文。并将IOC容器设置为该容器的父容器
    • 配置顺序
      • 先配置监听器和context-param初始化springIOC容器
      • 配置过滤器和servlet

    ②配置代码

    
    
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    listener>
    
    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:spring.xmlparam-value>
    context-param>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    
        
        <filter>
            <filter-name>CharacterEncodingFilterfilter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
            <init-param>
                <param-name>encodingparam-name>
                <param-value>UTF-8param-value>
            init-param>
            <init-param>
                <param-name>forceEncodingparam-name>
                <param-value>trueparam-value>
            init-param>
        filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilterfilter-name>
            <url-pattern>/*url-pattern>
        filter-mapping>
        
        <filter>
            <filter-name>HiddenHttpMethodFilterfilter-name>
            <filter-class>org.springframework.web.filter.HiddenHttpMethodFilterfilter-class>
        filter>
        <filter-mapping>
            <filter-name>HiddenHttpMethodFilterfilter-name>
            <url-pattern>/*url-pattern>
        filter-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
     
        
        <servlet>
            <servlet-name>DispatcherServletservlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
            
            <init-param>
                <param-name>contextConfigLocationparam-name>
                <param-value>classpath:springmvc.xmlparam-value>
            init-param>
            
            <load-on-startup>1load-on-startup>
        servlet>
        <servlet-mapping>
            <servlet-name>DispatcherServletservlet-name>
            <url-pattern>/url-pattern>
        servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2.配置springmvc.xml

    ①配置原理

    • 配置控制器来处理跳转资源
      • 静态资源 配置默认servlet
      • 访问index的视图控制器
      • 注解+扫描(controller)
    • 配置视图解析器来解析跳转资源
    • 开启注解驱动(否则只会处理默认servlet和视图控制器)

    ②配置代码

       
        
        
        <context:component-scan base-package="com.controller">
        context:component-scan>
        
        <mvc:default-servlet-handler />
        
        <mvc:view-controller path="/" view-name="index">mvc:view-controller>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
      
        
        <bean id="viewResolver"
              class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
            <property name="order" value="1"/>
            <property name="characterEncoding" value="UTF-8"/>
            <property name="templateEngine">
                <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                    <property name="templateResolver">
                        <bean
                                class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                            
                            <property name="prefix" value="/WEB-INF/templates/"/>
                            
                            <property name="suffix" value=".html"/>
                            <property name="templateMode" value="HTML5"/>
                            <property name="characterEncoding" value="UTF-8" />
                        bean>
                    property>
                bean>
            property>
        bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
      
        
        <mvc:annotation-driven />
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.配置spring.xml

    ①配置原理

    • 初始化IOC容器
      • 注解+扫描(除了controller)
    • 整合mybatis
      • 配置数据源(引入properties)
      • 配置mapper代理实现类(sqlsessionfactorybean和扫描mapper并创建代理实现类)
      • 配置事务管理器

    ②配置代码

     
        
        <context:component-scan base-package="com">
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        context:component-scan>
    
    • 1
    • 2
    • 3
    • 4
    • 5
      
        
        
        <context:property-placeholder location="classpath:jdbc.properties">context:property-placeholder>
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="driverClassName" value="${jdbc.driver}">property>
            <property name="url" value="${jdbc.url}">property>
            <property name="username" value="${jdbc.username}">property>
            <property name="password" value="${jdbc.password}">property>
        bean>
    
    
       
        
        <bean class="org.mybatis.spring.SqlSessionFactoryBean">
            
            <property name="configLocation" value="classpath:mybatis-config.xml">property>
            
            <property name="dataSource" ref="dataSource">property>
            
            
            
            
        bean>
        
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.mapper">property>
        bean>
    
    
        
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource">property>
        bean>
        
        <tx:annotation-driven transaction-manager="transactionManager">tx:annotation-driven>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    四.写具体的类

    1.创建需要的包

    • pojo
    • mapper(对应java和resources)
    • service
    • controller

    2.自上而下需求书写

    ②查询所有员工(自上而下)

    • index.html中a标签访问地址为/employee/list
    • controller中写EmployeeController类
      • 声明为controller组件@Controller
      • 自动装配EmployeeService@Autowired
      • 设置访问地址和访问方式@RequestMapping(value = “/employee/list”,method = RequestMethod.GET)
      • 实现功能(例如需要获取所有员工)
      • 查询结果list加入requst域利用model,返回地址employee_list
    • 写employee_list.html并循环输出employee的信息
    • service
      • 在EmployeeService声明抽象方法
      • 在impl.EmployeeServiceImpl实现抽象方法
        • 声明为service组件@Service
        • 自动装配employeeMapper@Autowired
        • 重写抽象方法中的方法(调用employeeMapper实现类的方法)
    • mapper
      • 在java.com.mapper 的接口中 声明方法
      • 在resources.com.mapper 的配置文件xml中 定义唯一sql语句

    五.开发实际过程中重点!

    1.html到servlet(表单条目-类的属性)

    • 注意表单的name必须等于类的属性名

    2.servlet到mapper(类的属性到数据库的字段)

    • 参数设置注解来共sql语句访问,类可以直接访问其属性
    • 返回值可以通过设置来直接封装到类中
  • 相关阅读:
    Git如何统计代码行数
    国产数据库四十年磨一剑,达梦数据科创板上市
    定义视频播放按钮 音量键
    面试突击34:如何使用线程池执行定时任务?
    可以用商城源码做什么?
    tkinter-TinUI-xml实战(11)多功能TinUIxml编辑器
    Maven配置单仓库与多仓库(Nexus)
    spring boot 自定redis缓存注解
    记一次惊险的CDH6.3.2集群断电后重启的过程
    Linux的so组件设计框架及逻辑
  • 原文地址:https://blog.csdn.net/qq_44724899/article/details/127776554