SSM整合
17.1 SSM整合思路
17.1.1 Spring+SpringMVC
- 组件扫描冲突
- SpringMVC组件扫描,只扫描Controller层
- Spring组件扫描,排除Controller层
- 容器对象管理问题【Listener>Filter>Servlet】
- SpringMVC容器对象,由DispatcherServlet管理
- Spring容器对象,由ContextLoaderListener管理
- 注册上下文参数:contextConfigLocation,设置spring.xml配置文件路径
17.1.2 Spring+Mybatis
- 数据源及事务管理问题
- Spring和Mybatis都支持管理事务及数据源,最终应该交个Spring管理
- Mybatis核心对象管理应该交个Spring管理
- SqlSessionFactory
- XXXMapper的代理对象
项目结构
17.2 SSM整合步骤
17.2.1 Spring+SpringMVC整合
2.1.1 导入jar包
<!--spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<!-- 导入thymeleaf与spring5的整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
<!--servlet-api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
2.1.2 配置文件
-
web.xml
- 一个上下文参数:设置spring.xml配置文件路径
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param>
- 一个监听器:管理spring容器对象
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
- 两个过滤器【1. 处理请求乱码 2. 支持REST风格】
<!--配置CharacterEncodingFilter过滤器,目的是为了解决POST请求的请求乱码问题--> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--给encoding属性赋值--> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!--给forceRequestEncoding属性赋值--> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--配置HiddenHttpMethodFilter过滤器,目的是为了将POST请求转换为Put或Delete请求--> <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>
-
一个Servlet:管理SpringMVC容器对象
<!--配置前端控制器DispatcherServlet--> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</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>
-
springmvc.xml
<!--配置自动扫描的包--> <context:component-scan base-package="com.atguigu.ssm" use-default-filters="false"> <!--配置只扫描Controller--> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!--配置视图解析器--> <bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver" id="viewResolver"> <!--配置字符集--> <property name="characterEncoding" value="UTF-8"></property> <!--配置模板引擎--> <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/views/"></property> <!--配置后缀--> <property name="suffix" value=".html"></property> <!--配置字符集--> <property name="characterEncoding" value="UTF-8"></property> </bean> </property> </bean> </property> </bean> <!-- 装配视图控制器--> <mvc:view-controller path="/" view-name="index"></mvc:view-controller> <!--配置处理静态资源--> <mvc:default-servlet-handler></mvc:default-servlet-handler> <!--配置了处理静态资源之后必须配置以下标签--> <mvc:annotation-driven></mvc:annotation-driven>
-
spring.xml
开启组件扫描【排除扫描Controller层】
<!-- 开启组件扫描,排除Controller层--> <context:component-scan base-package="com.atguigu.ssm"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
17.2.2 Spring+Mybatis
2.2.1 jar包
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.8</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--导入druid的jar包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--导入mysql的jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!--spring-orm-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.1</version>
</dependency>
<!--spring-aspects-->
<!-- <dependency>-->
<!-- <groupId>org.springframework</groupId>-->
<!-- <artifactId>spring-aspects</artifactId>-->
<!-- <version>5.3.1</version>-->
<!-- </dependency>-->
<!--mybatis-spring-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!--lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!-- Junit5测试框架-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<!-- Spring5 test-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.1</version>
</dependency>
2.2.2 配置文件
-
mybatis配置文件
- mybatis-config.xml
- xxxMapper.xml
-
日志文件【logback.xml】
-
德鲁伊配置文件[db.properties]
-
spring配置文件
-
开启组件扫描
-
加载外部属性文件
-
装配DruidDataSource
-
装配DataSourceTransactionManager
-
开启事务注解支持
-
装配SqlSessionFactoryBean【管理SqlSessionFactory】
-
装配MapperScannerConfigurer管理代理对象
-
17.3 优化SSM整合
17.3.1 优化spring.xml配置
- 优化spring.xml配置,代替mybatis-config配置
<!-- - 装配**SqlSessionFactoryBean**【管理SqlSessionFactory】-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 设置数据源-->
<property name="dataSource" ref="dataSource"></property>
<!-- 设置别名-->
<property name="typeAliasesPackage" value="com.atguigu.pojo"></property>
<!-- 加载所有映射文件-->
<property name="mapperLocations" value="classpath:/mapper/*.xml"></property>
<!-- 设置mybatis-config.xml配置文件路劲-->
<!-- <property name="configLocation" value="classpath:mybatis-config.xml"></property>-->
<!-- 设置mybatis-config中settings-->
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<!--开启驼峰式命名映射-->
<property name="mapUnderscoreToCamelCase" value="true"></property>
<!-- 开启延迟加载 -->
<property name="lazyLoadingEnabled" value="true"></property>
<!-- 开启二级缓存-->
<property name="cacheEnabled" value="true"></property>
</bean>
</property>
<!-- 添加分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<!-- 设置 reasonable 为 true 表示将页码进行合理化修正。页码的有效范围:1~总页数 -->
<prop key="reasonable">true</prop>
<!-- 数据库方言:同样都是 SQL 语句,拿到不同数据库中,在语法上会有差异 -->
<!-- 默认情况下,按照 MySQL 作为数据库方言来运行 -->
<prop key="helperDialect">mysql</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
17.3.2 添加分页插件
- 添加PageUtils工具类
package com.atguigu.ssm.utils;
import javax.servlet.http.HttpServletRequest;
import com.atguigu.ssm.pojo.Employee;
import com.github.pagehelper.PageInfo;
/**
* @author Chunsheng Zhang
* 组件化分页工具类
*/
public class PageUtils {
/**
* 将分页功能所有信息拼接到一个字符串中,作为返回结果,直接传递到jsp页面使用,拼接效果如下:
* 首页 上一页 1 2 3 4 5 下一页 尾页
*/
public static String getPageInfo(PageInfo<Employee> pageInfo , HttpServletRequest request ) {
//String basePath = "/当前项目名/";
String basePath = request.getContextPath() + "/";
//定义结果字符串StringBuilder
StringBuilder builder = new StringBuilder();
//拼接首页
builder.append("<a href='"+basePath+"emps/1'>首页</a>");
builder.append(" ");
//拼接上一页
if(pageInfo.isHasPreviousPage()) {
builder.append("<a href='"+basePath+"emps/"+(pageInfo.getPageNum()-1)+"'>上一页</a>");
builder.append(" ");
}else {
builder.append("上一页");
builder.append(" ");
}
//拼接页码超链接 1 2 3 4 5
int [] nums = pageInfo.getNavigatepageNums();
for (int i : nums) {
if(i == pageInfo.getPageNum()) {
builder.append("<a style='text-decoration: none;' href='"+basePath+"emps/"+i+"'><font style='color:#FFD700;'>"+ i +"</font></a>");
builder.append(" ");
}else {
builder.append("<a href='"+basePath+"emps/"+i+"'>"+ i +"</a>");
builder.append(" ");
}
}
//拼接下一页
if(pageInfo.isHasNextPage()) {
builder.append("<a href='"+basePath+"emps/"+(pageInfo.getPageNum()+1)+"'>下一页</a>");
builder.append(" ");
}else {
builder.append("下一页");
builder.append(" ");
}
//拼接尾页
builder.append("<a href='"+basePath+"emps/"+pageInfo.getPages()+"'>尾页</a>");
return builder.toString();
}
}
- EmployeeController
@GetMapping("/emps/{pageNum}")
public String getAllEmps(@PathVariable("pageNum")Integer pageNum,
HttpServletRequest request,
Map<String,Object> map){
int pn = 1;
if(pageNum != null){
pn = pageNum;
}
//开启分页
PageHelper.startPage(pn,3);
//调用service获取所有员工信息
List<Employee> empList = employeeService.getAllEmps();
//查询之后,封装pageInfo
PageInfo<Employee> pageInfo = new PageInfo<>(empList,5);
//使用PageUtils获取分页信息
String pageRs = PageUtils.getPageInfo(pageInfo, request);
//将数据共享到域
map.put("empList",empList);
map.put("pageRs",pageRs);
return "list";
}
17.3.3 添加事务
@Override
@Transactional(propagation = Propagation.REQUIRED,
isolation = Isolation.READ_COMMITTED,
readOnly = true
)
public List<Employee> getAllEmps() {
return employeeMapper.selectAllEmps();
}
17.4 SSM配置文件总结
17.4.1 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm0418</artifactId>
<groupId>com.atguigu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>day12_SSM</artifactId>
<packaging>war</packaging>
<dependencies>
<!--spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<!-- 导入thymeleaf与spring5的整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
<!--servlet-api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.8</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--导入druid的jar包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--导入mysql的jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!--spring-orm-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.1</version>
</dependency>
<!-- mybatis与spring整合关联jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!--lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!-- Junit5测试框架-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<!-- Spring5 test-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>
</project>
17.4.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">
<!-- 注册上下文参数:设置spring.xml配置文件路径contextConfigLocation-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<!-- 一个监听器:管理spring容器对象ContextLoaderListener-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 两个过滤器【1. 处理请求乱码 2. 支持REST风格】-->
<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>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
<!-- 一个Servlet:管理SpringMVC容器对象-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</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>
17.4.3 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: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">
<!-- 开启组件扫描-->
<context:component-scan base-package="com.atguigu.controller"></context:component-scan>
<!-- 装配视图解析器-->
<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="characterEncoding" value="UTF-8"></property>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<property name="characterEncoding" value="UTF-8"></property>
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".html"></property>
</bean>
</property>
</bean>
</property>
</bean>
<!-- 装配视图控制器-->
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>
<!-- 装配静态资源加载器-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!-- 解决后续问题-->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
17.4.4 spring.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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
<!-- 开启组件扫描【排除扫描Controller层】-->
<context:component-scan base-package="com.atguigu">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- - 加载外部属性文件-->
<context:property-placeholder location="classpath:druid.properties"></context:property-placeholder>
<!-- - 装配DruidDataSource-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${db.driverClassName}"></property>
<property name="url" value="${db.url}"></property>
<property name="username" value="${db.username}"></property>
<property name="password" value="${db.password}"></property>
</bean>
<!-- - 装配DataSourceTransactionManager-->
<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>
<!-- - 装配**SqlSessionFactoryBean**【管理SqlSessionFactory】-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 设置数据源-->
<property name="dataSource" ref="dataSource"></property>
<!-- 设置别名-->
<property name="typeAliasesPackage" value="com.atguigu.pojo"></property>
<!-- 加载所有映射文件-->
<property name="mapperLocations" value="classpath:/mapper/*.xml"></property>
<!-- 设置mybatis-config.xml配置文件路劲-->
<!-- <property name="configLocation" value="classpath:mybatis-config.xml"></property>-->
<!-- 设置mybatis-config中settings-->
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<!--开启驼峰式命名映射-->
<property name="mapUnderscoreToCamelCase" value="true"></property>
<!-- 开启延迟加载 -->
<property name="lazyLoadingEnabled" value="true"></property>
<!-- 开启二级缓存-->
<property name="cacheEnabled" value="true"></property>
</bean>
</property>
<!-- 添加分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<!-- 设置 reasonable 为 true 表示将页码进行合理化修正。页码的有效范围:1~总页数 -->
<prop key="reasonable">true</prop>
<!-- 数据库方言:同样都是 SQL 语句,拿到不同数据库中,在语法上会有差异 -->
<!-- 默认情况下,按照 MySQL 作为数据库方言来运行 -->
<prop key="helperDialect">mysql</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
<!-- - 装配**MapperScannerConfigurer**管理代理对象-->
<!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">-->
<!-- <property name="basePackage" value="com.atguigu.mapper"></property>-->
<!-- </bean>-->
<!-- Spring会为当前包下的所有接口创建代理对象,并装配到IOC容器中-->
<mybatis-spring:scan base-package="com.atguigu.mapper"></mybatis-spring:scan>
</beans>
17.4.5 xxxMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mapper.EmployeeMapper">
<select id="selectAllEmps" resultType="employee">
select
id,
last_name,
email,
salary
from
t_employee
</select>
</mapper>
17.4.6 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>
<!-- 加载外部属性文件-->
<!-- <properties resource="druid.properties"></properties>-->
<!-- <settings>-->
<!-- <!–开启驼峰式命名映射–>-->
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/>-->
<!-- <!– 开启延迟加载 –>-->
<!-- <setting name="lazyLoadingEnabled" value="true"/>-->
<!-- <!– 设置加载的数据是按需加载–>-->
<!-- <setting name="aggressiveLazyLoading" value="false"/>-->
<!-- <!– 开启二级缓存–>-->
<!-- <setting name="cacheEnabled" value="true"/>-->
<!-- </settings>-->
<!-- <typeAliases>-->
<!--为当前包下所有pojo,定义别名-->
<!-- <package name="com.atguigu.pojo"/>-->
<!-- </typeAliases>-->
<!-- 加载分页插件-->
<!-- <plugins>-->
<!-- <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>-->
<!-- </plugins>-->
<!-- <environments default="development">-->
<!-- <environment id="development">-->
<!-- <!–事务管理器–>-->
<!-- <transactionManager type="JDBC"/>-->
<!-- <!–数据源–>-->
<!-- <dataSource type="POOLED">-->
<!-- <property name="driver" value="${db.driverClassName}"/>-->
<!-- <property name="url" value="${db.url}"/>-->
<!-- <property name="username" value="${db.username}"/>-->
<!-- <property name="password" value="${db.password}"/>-->
<!-- </dataSource>-->
<!-- </environment>-->
<!-- </environments>-->
<!-- <mappers>-->
<!-- <mapper resource="mapper/DeptMapper.xml"></mapper>-->
<!-- <mapper resource="mapper/EmployeeMapper.xml"></mapper>-->
<!-- </mappers>-->
</configuration>
17.4.7 druid.properties
#key=value
db.driverClassName=com.mysql.cj.jdbc.Driver
#db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/dbw220418?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true
#url=jdbc:mysql://localhost:3306/mysqldb
db.username=root
db.password=root
17.4.8 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 指定日志输出的位置 -->
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 日志输出的格式 -->
<!-- 按照顺序分别是:时间、日志级别、线程名称、打印日志的类、日志主体内容、换行 -->
<pattern>[%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger] [%msg]%n</pattern>
</encoder>
</appender>
<!-- 设置全局日志级别。日志级别按顺序分别是:DEBUG、INFO、WARN、ERROR -->
<!-- 指定任何一个日志级别都只打印当前级别和后面级别的日志。 -->
<root level="INFO">
<!-- 指定打印日志的appender,这里通过“STDOUT”引用了前面配置的appender -->
<appender-ref ref="STDOUT" />
</root>
<!-- 根据特殊需求指定局部日志级别 -->
<logger name="org.springframework.web.servlet.DispatcherServlet" level="DEBUG" />
<!--包级别的日志设置 -->
<logger name="com.atguigu.controller" level="DEBUG"></logger>
<logger name="com.atguigu.serivce" level="DEBUG"></logger>
<logger name="com.atguigu.mapper" level="DEBUG"></logger>
</configuration>
mybatis-config.xml配置文件已在spring.xml文件中包含,不必创建。