• 當前位置:首頁 > IT技術 > 其他 > 正文

    SSM配置-Example
    2022-08-29 23:51:33

    SSM配置

    目錄結構

    tree /f > catalogTree.txt
    

    │ generatorConfig.xml
    │ pom.xml
    ├─src
    │ ├─main
    │ ├─java
    │ │ │ └─com
    │ │ │ └─xxx
    │ │ │ ├─controller
    │ │ │ ├─dao
    │ │ │ ├─entity
    │ │ │ ├─listener
    │ │ │ ├─mapper
    │ │ │ ├─service
    │ │ │ └─utils
    │ │ ├─resources
    │ │ │ │ applicationContext.xml
    │ │ │ │ dbConfig.properties
    │ │ │ │ logback.xml
    │ │ │ │ mybatisConfig.xml
    │ │ │ └─mapper
    │ │ └─webapp
    │ │ │ index.html
    │ │ ├─static
    │ │ └─WEB-INF
    │ │ │ dispatcherServlet-servlet.xml
    │ │ │ web.xml
    │ │ └─views
    ..

    配置

    generatorConfig.xml

    generatorConfig.xml (src 同級)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
            PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
    <generatorConfiguration>
    
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <!--        默認是false:添加注釋,這個標簽必須放在最前面   -->
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!--        數據庫連接信息-->
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/project_xxx"
                            userId="root"
                            password="0101">
            </jdbcConnection>
            <javaTypeResolver>
                <!--
                    默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer
                        true,把JDBC DECIMAL 和 NUMERIC 類型解析為java.math.BigDecimal
                -->
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
    
            <!--        指定Entity生成位置-->
            <javaModelGenerator targetPackage="com.xxx.entity"
                                targetProject="srcmainjava">
                <property name="enableSubPackages" value="true"/>
            </javaModelGenerator>
    
            <!--        指定Mapper.xml文件生成位置-->
            <sqlMapGenerator targetPackage="mapper" targetProject="srcmain
    esources">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
    
            <!--        指定dao接口生成位置-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.xxx.dao" targetProject="srcmainjava">
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
    
            <!--        指定每個表的生成策略  -->
            <table tableName="表名" domainObjectName="生成類的類名"/>
        </context>
    
    </generatorConfiguration>
    

    dispatcherServlet-servlet.xml

    dispatcherServlet-servlet.xml (WEB-INF下)

    <?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">
    
        <!--    spring mvc配置文件  包含網站跳轉邏輯控制-->
        <!--掃描業務邏輯組件-->
        <context:component-scan base-package="com.xxx" use-default-filters="false">
            <!-- 只掃描控制器-->
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
    
        <!--    視圖解析器,方便頁面返回-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views/"/>
            <property name="suffix" value=".html"/>
        </bean>
    
        <!--兩個標準配置  -->
        <!-- 將spring mvc不能處理的請求交給tomcat -->
        <mvc:default-servlet-handler/>
        <!-- 能支持spring mvc更高級的一些功能,JSR303校驗,快捷的ajax...映射動態請求 -->
        <mvc:annotation-driven/>
    
    </beans>
    

    dispatcherServlet-servlet.xml

    web.xml (WEB-INF下)

    <!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="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
             version="2.5">
      <!--  啟動 spring 的容器-->
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    
      <!--  字符編碼過濾器 注意放在所有過濾器之前-->
      <filter>
        <filter-name>CharacterEncodingFilter</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>
        <init-param>
          <param-name>forceEncoding</param-name>
          <param-value>true</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <!--    又有請求都處理編碼格式-->
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
      <!--    使用Rest風格的URI 處理頁面發過來的請求,如普通的post轉delete或put-->
      <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
      <!--    處理PUT請求     HiddenHttpMethodFilter已被棄用-->
      <filter>
        <filter-name>formContentFilter</filter-name>
        <filter-class>org.springframework.web.filter.FormContentFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>formContentFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
      <!--  spring mvc 的前端控制器 攔截所有請求 -->
      <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--指定mvc位置 如果不配置,需要有與web.xml文件同級的springDispatcherServlet-servlet.xml-->
        <!--            <init-param>-->
        <!--              <param-name>contextConfigLocation</param-name>-->
        <!--              <param-value></param-value>-->
        <!--            </init-param>-->
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <!--    攔截路徑 所有-->
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
    </web-app>
    
    

    applicationContext.xml

    applicationContext.xml (resources 下)

    <?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: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.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd ">
        <!--  配置文件,主要配置和業務邏輯有關的-->
    
    
        <!--  解決亂碼  Content-Type: text/plain;charset=ISO-8859-1  -->
        <!--    <bean class="org.springframework.http.converter.StringHttpMessageConverter">-->
        <!--        <property name="supportedMediaTypes">-->
        <!--            <list>-->
        <!--                <value>text/plain;charset=UTF-8</value>-->
        <!--            </list>-->
        <!--        </property>-->
        <!--    </bean>-->
    
    
        <!--    掃描包  除了控制器以外的所有-->
        <context:component-scan base-package="com.xxx">
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
        <!--    引入配置文件-->
        <context:property-placeholder location="classpath:dbConfig.properties"/>
        <!--    destroy-method="close"  注銷區東程序 防止內存泄漏   -->
        <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
            <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
            <property name="driverClass" value="${jdbc.class}"/>
            <property name="user" value="${jdbc.user}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>
    
        <!--================== 配置和MyBatis的整合=============== -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 指定mybatis全局配置文件的位置 -->
            <property name="configLocation" value="classpath:mybatisConfig.xml"/>
            <property name="dataSource" ref="pooledDataSource"/>
            <!-- 指定mybatis,mapper文件的位置 -->
            <property name="mapperLocations" value="classpath:mapper/*.xml"/>
        </bean>
    
        <!-- 配置掃描器,將mybatis接口的實現加入到ioc容器中 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--掃描所有dao接口的實現,加入到ioc容器中 -->
            <property name="basePackage" value="com.xxx.dao"/>
            <!--        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />-->
        </bean>
    
        <!-- 配置一個可以執行批量(select,update等。。。)的sqlSession -->
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
            <!-- 將defaultExecutorType配置為BATCH,可以批量更新操作緩存SQL以提高性能,
                    但是有個缺陷就是無法獲取update、delete返回的行數。-->
            <constructor-arg name="executorType" value="BATCH"/>
        </bean>
        <!--=============================================  -->
    
        <!--     實現的接口放到ioc中-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--   掃描接口-->
            <property name="basePackage" value="com.xxx.dao"/>
        </bean>
    
        <!--    事務控制    -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!--   控制的數據源-->
            <property name="dataSource" ref="pooledDataSource"/>
        </bean>
        <!--  開啟基于注解的事務     -->
        <aop:config>
            <!--  切入點表達式-->
            <aop:pointcut id="txPoint" expression="execution(* com.xxx.service..*(..))"/>
            <!--  配置事務增強-->
            <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
        </aop:config>
        <!--   事務增強,切入方法    -->
        <tx:advice id="txAdvice">
            <tx:attributes>
                <!--   所有方法都是事務方法-->
                <tx:method name="*"/>
                <!--   認為是獲取的方法,只讀-->
                <tx:method name="get*" read-only="true"/>
            </tx:attributes>
        </tx:advice>
    
    </beans>
    

    dbConfig.properties

    dbConfig.properties (resources 下)

    jdbc.jdbcUrl = 
    jdbc.class = 
    jdbc.user = 
    jdbc.password = 
    

    logback.xml

    logback.xml (resources 下)

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 從高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
    <!-- 日志輸出規則  根據當前 ROOT 級別,日志輸出時,級別高于root默認的級別時 會輸出 -->
    <!-- 以下 每個配置的 filter 是過濾掉輸出文件里面,會出現高級別文件,依然出現低級別的日志信息,通過filter 過濾只記錄本級別的日志-->
    
    <!-- 屬性描述
    scan:設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true
    scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。
    當scan為true時,此屬性生效。默認的時間間隔為1分鐘。
    debug:當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。
    -->
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    
        <!--定義日志文件的存儲地址 -->
        <!--    <property name="LOG_HOME" value=""/>-->
    
        <!-- 控制臺輸出 -->
        <appender name="ConsoleLog" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!--Info文件輸出-->
        <!-- 按照每天和固定大小(5MB)生成日志文件【最新的日志,是日期最大數字最大的】 -->
        <!--    <appender name="FileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
        <!--        &lt;!&ndash;如果只是想要 Info 級別的日志,只是過濾 info 還是會輸出 Error 日志,因為 Error 的級別高,-->
        <!--      所以我們使用下面的策略,可以避免輸出 Error 的日志,這種方式不能避免warn&ndash;&gt;-->
        <!--        &lt;!&ndash; 過濾日志 &ndash;&gt;-->
        <!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
        <!--            &lt;!&ndash;過濾 Error&ndash;&gt;-->
        <!--            <level>ERROR</level>-->
        <!--            &lt;!&ndash;匹配到就禁止&ndash;&gt;-->
        <!--            <onMatch>DENY</onMatch>-->
        <!--            &lt;!&ndash;沒有匹配到就允許&ndash;&gt;-->
        <!--            <onMismatch>ACCEPT</onMismatch>-->
        <!--        </filter>-->
    
    
        <!--        &lt;!&ndash;只輸出INFO&ndash;&gt;-->
        <!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
        <!--            &lt;!&ndash;過濾 INFO&ndash;&gt;-->
        <!--            <level>INFO</level>-->
        <!--            &lt;!&ndash;匹配到就禁止&ndash;&gt;-->
        <!--            <onMatch>ACCEPT</onMatch>-->
        <!--            &lt;!&ndash;沒有匹配到就允許&ndash;&gt;-->
        <!--            <onMismatch>DENY</onMismatch>-->
        <!--        </filter>-->
    
    
        <!--        &lt;!&ndash;滾動策略&ndash;&gt;-->
        <!--        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
        <!--            &lt;!&ndash;日志文件輸出的文件名&ndash;&gt;-->
        <!--            <FileNamePattern>${LOG_HOME}/Info/DenseTubeManage_Info_%d{yyyy-MM-dd}.%i.log</FileNamePattern>-->
        <!--            &lt;!&ndash;日志文件保留天數&ndash;&gt;-->
        <!--            <MaxHistory>30</MaxHistory>-->
        <!--            &lt;!&ndash;日志文件最大的大小&ndash;&gt;-->
        <!--            <MaxFileSize>5MB</MaxFileSize>-->
        <!--        </rollingPolicy>-->
        <!--        &lt;!&ndash;格式化輸出&ndash;&gt;-->
        <!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
        <!--            &lt;!&ndash;格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符&ndash;&gt;-->
        <!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
        <!--            <charset>UTF-8</charset>-->
        <!--        </encoder>-->
        <!--    </appender>-->
    
        <!--Error文件輸出-->
        <!-- 按照每天和固定大小(5MB)生成日志文件【最新的日志,是日期最大數字最大的】 -->
        <!--    <appender name="FileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
        <!--        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
        <!--            &lt;!&ndash;設置日志級別,過濾掉info日志,只輸入error日志&ndash;&gt;-->
        <!--            <level>ERROR</level>-->
        <!--        </filter>-->
        <!--        &lt;!&ndash;滾動策略&ndash;&gt;-->
        <!--        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
        <!--            &lt;!&ndash;日志文件輸出的文件名&ndash;&gt;-->
        <!--            <FileNamePattern>${LOG_HOME}/Error/DenseTubeManage_Error_%d{yyyy-MM-dd}.%i.log</FileNamePattern>-->
        <!--            &lt;!&ndash;日志文件保留天數&ndash;&gt;-->
        <!--            <MaxHistory>30</MaxHistory>-->
        <!--            &lt;!&ndash;日志文件最大的大小&ndash;&gt;-->
        <!--            <MaxFileSize>5MB</MaxFileSize>-->
        <!--        </rollingPolicy>-->
        <!--        &lt;!&ndash;格式化輸出&ndash;&gt;-->
        <!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
        <!--            &lt;!&ndash;格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符&ndash;&gt;-->
        <!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
        <!--            <charset>UTF-8</charset>-->
        <!--        </encoder>-->
        <!--    </appender>-->
    
        <!--日志等級設置-->
        <logger name="org.springframework" level="ALL"/>
    
        <root level="ALL">
            <appender-ref ref="ConsoleLog"/>
        </root>
    
        <logger name="com.xxx" level="ALL">
            <appender-ref ref="FileInfoLog"/>
            <appender-ref ref="FileErrorLog"/>
        </logger>
    
    </configuration>
    

    mybatisConfig.xml

    mybatisConfig.xml (resources 下)

    <?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="mapUnderscoreToCamelCase" value="true"/>
    
            <!--        <setting name="logImpl" value="LOG4J"/>-->
            <!-- 全局映射器啟用緩存 -->
            <!--        <setting name="cacheEnabled" value="true" />-->
            <!--        &lt;!&ndash; 查詢時,關閉關聯對象即時加載以提高性能 &ndash;&gt;-->
            <!--        <setting name="lazyLoadingEnabled" value="true" />-->
            <!--        &lt;!&ndash; 設置關聯對象加載的形態,此處為按需加載字段(加載字段由SQL指定),不會加載關聯表的所有字段,以提高性能 &ndash;&gt;-->
            <!--        <setting name="aggressiveLazyLoading" value="false" />-->
            <!--        &lt;!&ndash; 對于未知的SQL查詢,允許返回不同的結果集以達到通用的效果 &ndash;&gt;-->
            <!--        <setting name="multipleResultSetsEnabled" value="true" />-->
            <!--        &lt;!&ndash; 允許使用列標簽代替列名 &ndash;&gt;-->
            <!--        <setting name="useColumnLabel" value="true" />-->
            <!--        &lt;!&ndash; 允許使用自定義的主鍵值(比如由程序生成的UUID 32位編碼作為鍵值),數據表的PK生成策略將被覆蓋 &ndash;&gt;-->
            <!--        <setting name="useGeneratedKeys" value="true" />-->
            <!--        &lt;!&ndash; 給予被嵌套的resultMap以字段-屬性的映射支持 &ndash;&gt;-->
            <!--        <setting name="autoMappingBehavior" value="FULL" />-->
            <!--        &lt;!&ndash; 對于批量更新操作緩存SQL以提高性能  &ndash;&gt;-->
            <!--        <setting name="defaultExecutorType" value="SIMPLE" />-->
            <!-- 數據庫超過25000秒仍未響應則超時 -->
            <!--        <setting name="defaultStatementTimeout" value="30" />-->
        </settings>
    
        <!--    別名-->
        <typeAliases>
            <package name="com.xxx.entity"/>
        </typeAliases>
    
        <!--    注冊分頁插件-->
        <plugins>
            <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
        </plugins>
    </configuration>
    

    本文摘自 :https://www.cnblogs.com/

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码