SSM整合

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("&nbsp;&nbsp;");
      
      //拼接上一页
      if(pageInfo.isHasPreviousPage()) {
         builder.append("<a href='"+basePath+"emps/"+(pageInfo.getPageNum()-1)+"'>上一页</a>");
         builder.append("&nbsp;&nbsp;");
      }else {
         builder.append("上一页");
         builder.append("&nbsp;&nbsp;");
      }
      
      //拼接页码超链接  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("&nbsp;&nbsp;");
         }else {
            builder.append("<a href='"+basePath+"emps/"+i+"'>"+ i +"</a>");
            builder.append("&nbsp;&nbsp;");
         }
      }
      
      //拼接下一页
      if(pageInfo.isHasNextPage()) {
         builder.append("<a href='"+basePath+"emps/"+(pageInfo.getPageNum()+1)+"'>下一页</a>");
         builder.append("&nbsp;&nbsp;");
      }else {
         builder.append("下一页");
         builder.append("&nbsp;&nbsp;");
      }
      
      //拼接尾页
      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>-->
<!--        &lt;!&ndash;开启驼峰式命名映射&ndash;&gt;-->
<!--        <setting name="mapUnderscoreToCamelCase" value="true"/>-->
<!--        &lt;!&ndash; 开启延迟加载 &ndash;&gt;-->
<!--        <setting name="lazyLoadingEnabled" value="true"/>-->
<!--        &lt;!&ndash; 设置加载的数据是按需加载&ndash;&gt;-->
<!--        <setting name="aggressiveLazyLoading" value="false"/>-->
<!--        &lt;!&ndash; 开启二级缓存&ndash;&gt;-->
<!--        <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">-->
<!--            &lt;!&ndash;事务管理器&ndash;&gt;-->
<!--            <transactionManager type="JDBC"/>-->
<!--            &lt;!&ndash;数据源&ndash;&gt;-->
<!--            <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文件中包含,不必创建。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值