zoukankan      html  css  js  c++  java
  • SSM整合案例

    使用IDEA整合SSM

    spring核心配置文件:beans_core.xml/applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                                http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
                                http://www.springframework.org/schema/context
                                http://www.springframework.org/schema/context/spring-context-4.1.xsd
                                http://www.springframework.org/schema/aop
                                http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
                                http://www.springframework.org/schema/tx
                                http://www.springframework.org/schema/tx/spring-tx-4.1.xsd ">
    
    
        <!-- 开启spring的注解模式 1 -->
        <context:annotation-config/>
        <!--  扫描具体的注解包 1 -->
        <context:component-scan base-package="com.ujiuye.*"></context:component-scan>
        <!--  读取外部的数据库连接条件文件  2 -->
        <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
        <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driverClassName}"></property>
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="user" value="${jdbc.user}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
    
        <!-- spring 整合mybatis 使用的工具类 2 -->
        <bean name="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"/>
            <property name="dataSource" ref="dataSource"/>
            <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/>
        </bean>
    
    
        <!-- 扫描 mapper接口 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.ujiuye.mapper"/>
        </bean>
    
    
        <!--  引入spring提供的事务管理 -->
        <bean name="manager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <tx:advice id="myDriver" transaction-manager="manager">
            <tx:attributes>
                <!---->
                <tx:method name="save*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
                <tx:method name="add*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
                <tx:method name="insert*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
                <!---->
                <tx:method name="delete*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
                <!---->
                <tx:method name="update*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
                <!---->
                <tx:method name="get*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
                <tx:method name="find*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
            </tx:attributes>
    
        </tx:advice>
    
        <!-- 那种类型 -->
        <aop:config>
            <aop:pointcut id="pc" expression="execution(* com.ujiuye.service.*.*(..))"></aop:pointcut>
            <aop:advisor advice-ref="myDriver" pointcut-ref="pc"/>
        </aop:config>
    
    </beans>

    配置文件理解:

    1.为什么已经扫描具体的注解包了 还需要开启spring的注解模式?是不是重复了。

      这个问题其实不写下面这句也不会有任何问题,但是官方介意先开启spring注解模式

    <!-- 开启spring的注解模式 -->
    <context:annotation-config/>

    2.SqlSessionFactoryBean是整合mybatis的一个很重要的类,他的具体功能。

      一、数据库的连接(mybatis毕竟是一个持久层框架)

      二、扫描mybatis核心配置文件

      三、mybatis逆向生成的mapper.xml文件(或者是自己写的mapper.xml文件)。

        如果mapper.xml文件和mapper接口放在同一个文件夹中则不需要此操作,但是介意将配置文件放在同一个配置文件夹中管理(Mybatis反向工程位置

        需要注意的是这个文件夹不是普通的文件夹,需要将文件夹变成Resources资源文件夹如下图

              

      四、事务管理

      

    springmvc配置文件 springmvc.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:p="http://www.springframework.org/schema/p"
        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-4.1.xsd
                           http://www.springframework.org/schema/mvc 
                           http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context-4.1.xsd">
    
         <!-- 扫描具体控制层注解 -->
        <context:component-scan base-package="com.ujiuye.controller"/>
        <!--  开启springmvc的注解驱动模式 2 -->
        <mvc:annotation-driven/>
        <!-- 解决静态资源无法访问的问题 1 -->
        <mvc:default-servlet-handler/>
        <!--  视图解析器 2 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
    </beans>

    配置文件理解:

    1、静态文件问题

      产出原因:由于我们在web.xml文件中配置了servlet,并且<url-pattern>/</url-pattern>会拦截静态支援文件,因为优先级问题  /* > *.jsp >/    造成静态资源被servlet拦截,将我们的静态文件当初一个请来处理,所以在cotroller根本处理不了,所以会报一个404找不到的错误。

      解决方法:在springmvc.xml文件中配置  <mvc:default-servlet-handler/>  这个标签会将我们cotroller处理不了的丢给默认tomcat中一个默认的DefaultServlet来处理。

      我们都知道tomcat自身本来就有一个web.xml文件,而我们也写了一个servlet,程序会采用就近原则选择我们写的servle来执行所以就将原来默认的servlet覆盖掉。所以就造成了静态资源访问不到的问题

      下图是默认web.xml源码

        

    2.视图解析器:

      我们先来了解一个spring servlet执行流程

       

    图片来源https://www.jianshu.com/p/0f981efdfbbd

      一、用户发送一个请求spring的DispatchServlet(前置控制器)接收到请求后就会RequestMappingHandlerMapping(处理映射器)中寻找有没有符何条件的servlet就好像一张菜单。然后再返回到(前置控制器)如果有

      二、DispatchServlet将拿到的结果到RequestMappingHandlerAdapter(处理器适配器)中寻找具体的那个servlet,返回一个ModelAndView 到(前置控制器)中,然后(前置控制器)在将ModelAndView给InternalResourceViewResolver(视图解析器)(视图解析器)进行处理将

      三、将一个具体的视图返回到(前置控制器)中最后进行视图处理将结果返回给用户。(哇,很烦)。

      接下来就会有人有疑问为什么。配置文件中没有看到  

      (处理映射器)  (处理器适配器)  而只有  (视图解析器)

      因为只要我们开启springmvc注解模式,就不需要配置这两个是配置了

    mybatis核心配置文件 sqlMapConfig.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="logImpl" value="STDOUT_LOGGING" />
    </settings>

    <typeAliases>
    <package name="com.ujiuye.cus.bean"></package>
    <package name="com.ujiuye.pro.bean"></package>
    <package name="com.ujiuye.emp.bean"></package>
    <package name="com.ujiuye.mdo.bean"></package>
    </typeAliases>



    </configuration>

    配置文件理解:

    1、需要在mybatis中填写的内容,声明也不写也可以(因为最主要的配置已经在spring核心配置文件中配置了)  但是一定要有这个文件。如果有器大需要配置的:懒加载、缓存。。。就需要在这个文件中配置

     作者:Pei-Qi
    
     博客:https://www.cnblogs.com/hwxxbc/

    github:https://github.com/Pei-Qi
    本人是一个刚刚接触IT行业的新人,有什么不到位的地方还请原谅,如果写的有什么错误的地方希望能够指出,蟹蟹。。。。

      

  • 相关阅读:
    无废话WPF系列9: Binding的源
    无废话WPF系列7:WPF布局控件
    无废话WPF系列6:各类控件家族详解
    无废话WPF系列13:路由事件
    无废话WPF系列4: x名称空间
    无废话WPF系列12: 依赖属性和附加属性
    用C++设计一个不能被继承的类
    HMM的介绍及实现
    C语言综合实验3—计算器四则运算
    机器学习基础
  • 原文地址:https://www.cnblogs.com/hwxxbc/p/10548564.html
Copyright © 2011-2022 走看看