SSM架構配置
文章目錄
- SSM架構配置
- 先來看看總圖
-
- 1、Maven檔案配置
-
- 1.1、所需jar包
- 1.2、maven配置
-
- 1.2.1、父工程
- 1.2.2、配置檔案所需包資訊
- 2、tomcat配置
- 3、增加配置檔案
- 目錄結構
- 步驟
-
- 3.1 建立db.properties放入resource檔案夾
- 3.2 springmvc-servlet.xml配置
-
- 3.2.1 springmvc目錄結構
- 3.2.2 springMVC的配置
- 3.3 mybatis-config.xml配置
- 3.4 application.xml配置 (spring配置)
- 各配置檔案的關系
- 最終目錄結構
- 內建其他功能
-
- 1 Druid擁有自己獨立的sql監控界面(擁有獨立的servlet)
-
- 開啟druid這的“監控界面“的配置
- 2 配置日志logback.xml
- 3 分頁插件Pagehelper
先來看看總圖

1、Maven檔案配置
1.1、所需jar包
servlet-api
spring-MVC:
mybatis
mybatis-spring:打通Mybatis和
druid:配置資料源要用
(ps:這裡不用引spring是因為依賴之間是可以傳遞的,spring-MVC會自動引進來)
1.2、maven配置
1.2.1、父工程
ps:不同于往常用的是pom,這裡用到了war
1.2.2、配置檔案所需包資訊
<dependencies>
<!-- 測試相關 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- springmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<!--檔案上傳-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.2</version>
</dependency>
<!-- mybatis 相關 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- 資料庫連接配接驅動 相關 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!-- 提供了對JDBC操作的完整封裝 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- 織入 相關 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!-- spring,mybatis整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!-- 內建德魯伊使用 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.18</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.18</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source> <!-- 源代碼使用的JDK版本 -->
<target>1.8</target> <!-- 需要生成的目标class檔案的編譯版本
-->
<encoding>utf-8</encoding><!-- 字元集編碼 -->
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
2、tomcat配置
3、增加配置檔案
目錄結構
步驟
3.1 建立db.properties放入resource檔案夾
db.properties配置 (資料源配置)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root
filters=wall,stat
maxActive=20
initialSize=3
maxWait=5000
minIdle=3
maxIdle=15
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 'x'
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
maxOpenPreparedStatements=20
removeAbandoned=true
removeAbandonedTimeout=1800
logAbandoned=true
3.2 springmvc-servlet.xml配置
3.2.1 springmvc目錄結構
3.2.2 springMVC的配置
<?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
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 讓Spring MVC不處理靜态資源 等價于下面的一系列mvc:resources配置-->
<!-- <mvc:default-servlet-handler />-->
<!-- 所有的js檔案夾下的所有檔案都打入到/static/js/-->
<!-- 這樣子這些資源都不會走視圖解析器、過濾器等等 因為在這些資源不會進去DispatcherServlet-->
<mvc:resources mapping="/js/**" location="/static/js/"/>
<mvc:resources mapping="/css/**" location="/static/css/"/>
<mvc:resources mapping="/img/**" location="/static/img/"/>
<!-- 讓springmvc自帶的注解生效 -->
<mvc:annotation-driven >
</mvc:annotation-driven>
<!--檔案上傳配置-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 請求的編碼格式,必須和jSP的pageEncoding屬性一緻,以便正确讀取表單的内容,
預設為ISO-8859-1 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 上傳檔案大小上限,機關為位元組(10485760=10M) -->
<property name="maxUploadSize" value="10485760"/>
<property name="maxInMemorySize" value="40960"/>
</bean>
<!-- 處理映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 處理器擴充卡 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--視圖解析器:DispatcherServlet給他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="InternalResourceViewResolver">
<!--字首-->
<property name="prefix" value="/WEB-INF/page/"/>
<!--字尾 若是别的模闆引擎,字尾可以跟着相應的換掉 如:.html
這裡隻是因為用jsp渲染頁面所有字尾用的.jsp-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3.2 web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--注冊DispatcherServlet,這是springmvc的核心,就是個servlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</init-param>
<!--加載時先啟動-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--/ 比對所有的請求;(不包括.jsp)-->
<!--/* 比對所有的請求;(包括.jsp)-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3.3 mybatis-config.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="lazyLoadingEnabled" value="true"/>
<!-- 級聯懶加載-->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 下劃線轉駝峰式 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 日志相關-->
<setting name="logPrefix" value="sql."/>
</settings>
<!-- 起别名-->
<typeAliases>
<package name="com.ysl.entity"/>
</typeAliases>
</configuration>
3.4 application.xml配置 (spring配置)
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
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
https://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">
// 引入db.properties
<!-- 加載外部的資料庫資訊 classpath:不叫會報錯具體原因下邊解釋-->
<context:property-placeholder location="classpath:db.properties"/>
// 引入springmvc-servlet.xml
<!-- 加入springmvc的配置 其實這裡就引入了spring配置-->
<import resource="classpath:springmvc-servlet.xml"/>
<context:component-scan base-package="cn.itnanls"/>
<!-- Mapper 掃描器 (與mybatis相關)-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 掃描 cn.wmyskxz.mapper 包下的元件 -->
<!-- mapper都是在dao層下的 掃描到就會自動生成動态代理-->
<property name="basePackage" value="com.ysl.dao"/>
</bean>
<!--配置資料源:資料源有非常多,可以使用第三方的,也可使使用Spring的-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name = "filters" value = "${filters}" />
<!-- 最大并發連接配接數 -->
<property name = "maxActive" value = "${maxActive}" />
<!-- 初始化連接配接數量 -->
<property name = "initialSize" value = "${initialSize}" />
<!-- 配置擷取連接配接等待逾時的時間 -->
<property name = "maxWait" value = "${maxWait}" />
<!-- 最小空閑連接配接數 -->
<property name = "minIdle" value = "${minIdle}" />
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接配接,機關是毫秒 -->
<property name = "timeBetweenEvictionRunsMillis" value
="${timeBetweenEvictionRunsMillis}" />
<!-- 配置一個連接配接在池中最小生存的時間,機關是毫秒 -->
<property name = "minEvictableIdleTimeMillis" value
="${minEvictableIdleTimeMillis}" />
<!-- <property name = "validationQuery" value =
"${validationQuery}" /> -->
<property name = "testWhileIdle" value = "${testWhileIdle}" />
<property name = "testOnBorrow" value = "${testOnBorrow}" />
<property name = "testOnReturn" value = "${testOnReturn}" />
<property name = "maxOpenPreparedStatements" value
="${maxOpenPreparedStatements}" />
<!-- 打開 removeAbandoned 功能 -->
<property name = "removeAbandoned" value = "${removeAbandoned}" />
<!-- 1800 秒,也就是 30 分鐘 -->
<property name = "removeAbandonedTimeout" value
="${removeAbandonedTimeout}" />
<!-- 關閉 abanded 連接配接時輸出錯誤日志 -->
<property name = "logAbandoned" value = "${logAbandoned}" />
</bean>
// 引入mybatis-config.xml
<!--配置SqlSessionFactory(在給mybatis做內建)-->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--關聯Mybatis-->
<!--引入mybatis配置檔案-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--引入mappers的xml檔案-->
<property name="mapperLocations" value="classpath:mappers/*.xml"/>
</bean>
<!--注冊sqlSessionTemplate , 關聯sqlSessionFactory-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--利用構造器注入-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!-- 事務管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置事務通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--配置哪些方法使用什麼樣的事務,配置事務的傳播特性-->
<!--事務傳播性:
REQUIRED:用于所有的增删改
SUPPORTS:所有的“查”都用這個 read-only可以避免鎖增強帶來的問題,提高效率-->
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="search*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--配置aop織入事務-->
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* cn.itnanls.service.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
</beans>
各配置檔案的關系
最終目錄結構
內建其他功能
1 Druid擁有自己獨立的sql監控界面(擁有獨立的servlet)
開啟druid這的“監控界面“的配置
(在web.xml中追加配置)
<!-- 連接配接池 啟用 Web 監控統計功能 start-->
<!--這個過濾器在springmvc之前加設的-->
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>DruidStatView </servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<!-- 自己定義登入的 使用者名 -->
<param-name>loginUsername</param-name>
<param-value>ysl</param-value>
</init-param>
<init-param>
<!-- 自己定義登入的 密碼 -->
<param-name>loginPassword</param-name>
<param-value>123</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
2 配置日志logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定義參數常量 -->
<!-- 日志級别 TRACE<DEBUG<INFO<WARN<ERROR -->
<!-- logger.trace("msg") logger.debug... -->
<property name="log.level" value="debug" />
<property name="log.maxHistory" value="30" />
<!-- 日志存放的路徑-->
<property name="log.filePath" value="E:/log" />
<!-- 日志存放的檔案名格式-->
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
%logger{50} - %msg%n" />
<!-- 控制台輸出設定 定義輸出器名字name 用對應的class輸出-->
<appender name="consoleAppender"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- DEBUG級别檔案記錄 -->
<appender name="debugAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 檔案路徑 -->
<file>${log.filePath}/debug.log</file>
<!-- 滾動日志檔案類型,就是每天都會有一個日志檔案 -->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 檔案名稱 -->
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 檔案最大儲存曆史數量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- INFO -->
<appender name="infoAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 檔案路徑 -->
<file>${log.filePath}/info.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 檔案名稱 -->
<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 檔案最大儲存曆史數量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- com.ysl開頭的日志都會使用 下面appender-ref對應的追加器 -->
<logger name="com.ysl" level="${log.level}" additivity="true">
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
</logger>
<!-- <root> 是必選節點,用來指定最基礎的日志輸出級别,隻有一個level屬性 -->
<root level="info">
<appender-ref ref="consoleAppender"/>
</root>
<!-- 捕捉sql開頭的日志 -->
<appender name="MyBatis"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.filePath}/sql_log/mybatis-sql.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.filePath}/sql_log/mybatis-sql.log.%d{yyyy-MM-dd}</FileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%thread|%d{yyyy-MM-dd
HH:mm:ss.SSS}|%level|%logger{36}|%m%n</pattern>
</encoder>
</appender>
<!-- 所有以sql.開頭的資訊,都當做日志列印到輸出源-->
<logger name="sql" level="DEBUG">
<appender-ref ref="MyBatis"/>
</logger>
</configuration>
調用代碼
Logger logger = LoggerFactory.getLogger(UserController.class);
logger.info("這是info");
logger.trace("this is trace");
logger.debug("this is debug");
logger.warn("this is warn");