SpringMVC 08 -SSM整合

SpringMVC-SSM整合

  • 1 整合思路
  • 2 SSM整合依赖
  • 3 配置文件
    • 3.1 web.xml
    • 3.2 springmvc配置
    • 3.3 spring-service配置
    • 3.4 spring-tx配置
    • 3.5 spring-dao配置
    • 3.6 mybatis配置
    • 3.7 数据源配置
  • 4 Mapper层
    • 4.1 Mapper接口
    • 4.2 Mapper映射文件
  • 5 Service层
  • 6 Controller层
  • 7 前端JSP
  • 8 整合测试
    • 8.1 声明式事务测试
    • 8.2 整合后注解扫描问题

1 整合思路

Spring整合MyBatis,将MyBatis的实例交给Spring进行管理

Spring整合AOP声明式事务管理

Spring整合SpringMVC,无需额外配置操作

启动tomcat,加载Spring的配置文件

2 SSM整合依赖

  1. 数据库相关
    1. mysql驱动依赖
    2. mybatis依赖
    3. druid连接池
    4. Spring整合Mybatis依赖
    5. Mybatis分页插件依赖
    6. Mybatis分页插件依赖
  2. Spring相关
    1. spring的核心依赖
    2. springAOP依赖
    3. spring整合持久层依赖
    4. spring整合单元测试依赖
    5. spring声明式事务依赖
    6. spring织入依赖aspectjweaver
    7. springmvc相关的依赖
    8. JSON交互依赖jackson-databind
  3. 文件上传相关依赖
    1. fileupload 文件上传的依赖
    2. 依赖排除
  4. servlet依赖
  5. jsp依赖
  6. jstl依赖3个
    1. jstl
    2. standard
    3. jstl-api
  7. lombok的依赖lombok
<dependencies>
    

    
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>5.1.47version>
    dependency>
    
    <dependency>
        <groupId>org.mybatisgroupId>
        <artifactId>mybatisartifactId>
        <version>3.5.4version>
    dependency>
    
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druidartifactId>
        <version>1.1.10version>
    dependency>
    
    <dependency>
        <groupId>org.mybatisgroupId>
        <artifactId>mybatis-springartifactId>
        <version>1.3.2version>
    dependency>
    
    <dependency>
        <groupId>com.github.pagehelpergroupId>
        <artifactId>pagehelperartifactId>
        <version>5.1.10version>
    dependency>


    

    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>5.3.6version>
    dependency>
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-aspectsartifactId>
        <version>5.3.6version>
    dependency>
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-jdbcartifactId>
        <version>5.3.6version>
    dependency>
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-testartifactId>
        <version>5.3.6version>
    dependency>
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-txartifactId>
        <version>5.3.6version>
    dependency>
    <dependency>
        <groupId>org.aspectjgroupId>
        <artifactId>aspectjweaverartifactId>
        <version>1.9.6version>
    dependency>
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-webmvcartifactId>
        <version>5.3.6version>
    dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.coregroupId>
        <artifactId>jackson-databindartifactId>
        <version>2.12.2version>
    dependency>
    
    <dependency>
        <groupId>commons-iogroupId>
        <artifactId>commons-ioartifactId>
        <version>2.4version>
    dependency>
    
    <dependency>
        <groupId>commons-fileuploadgroupId>
        <artifactId>commons-fileuploadartifactId>
        <version>1.3.3version>
        
        <exclusions>
            <exclusion>
                <groupId>javax.servletgroupId>
                <artifactId>servlet-apiartifactId>
            exclusion>
        exclusions>
    dependency>
    
    <dependency>
        <groupId>javax.servletgroupId>
        <artifactId>javax.servlet-apiartifactId>
        <version>3.1.0version>
        <scope>providedscope>
    dependency>
    
    <dependency>
        <groupId>javax.servletgroupId>
        <artifactId>jsp-apiartifactId>
        <version>2.0version>
        <scope>providedscope>
    dependency>

    
    <dependency>
        <groupId>javax.servlet.jsp.jstlgroupId>
        <artifactId>jstlartifactId>
        <version>1.2version>
    dependency>
    <dependency>
        <groupId>taglibsgroupId>
        <artifactId>standardartifactId>
        <version>1.1.2version>
    dependency>
    <dependency>
        <groupId>javax.servlet.jsp.jstlgroupId>
        <artifactId>jstl-apiartifactId>
        <version>1.2version>
    dependency>

    
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <version>1.18.12version>
    dependency>

dependencies>

3 配置文件

3.1 web.xml


<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">
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    listener>
    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:spring/applicationContext-*.xmlparam-value>
    context-param>
    
    <filter>
        <filter-name>encodingFilterfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        <init-param>
            <param-name>encodingparam-name>
            <param-value>utf-8param-value>
        init-param>
    filter>
    <filter-mapping>
        <filter-name>encodingFilterfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>

    
    <servlet>
        <servlet-name>dispatcherServletservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        <init-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:spring/springmvc.xmlparam-value>
        init-param>
    servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServletservlet-name>
        <url-pattern>/url-pattern>
    servlet-mapping>

web-app>

3.2 springmvc配置

  • 开启Spring的注解扫描
  • 开启SpringMVC的注解扫描
  • 配置视图解析器
  • 配置文件上传解析器

<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.ying.controller"/>
    
    <mvc:annotation-driven/>

    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
    bean>
    
    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10000000"/>
        <property name="maxUploadSizePerFile" value="2000000"/>
        <property name="defaultEncoding" value="utf-8"/>
    bean>
beans>

3.3 spring-service配置


<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"
       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">
    
     <context:component-scan base-package="com.ying"/>
beans>

3.4 spring-tx配置


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx
       https://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">

    <import resource="classpath:spring/applicationContext-dao.xml"/>

    
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        
        <property name="dataSource"  ref="dataSource"/>
    bean>
    




    
    
    <tx:advice id="myAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="select*" isolation="DEFAULT" propagation="SUPPORTS" timeout="-1"/>
            <tx:method name="find*" isolation="DEFAULT" propagation="SUPPORTS" timeout="-1"/>
            <tx:method name="get*" isolation="DEFAULT" propagation="SUPPORTS" timeout="-1"/>
            <tx:method name="query*" isolation="DEFAULT" propagation="SUPPORTS" timeout="-1"/>

            <tx:method name="*" isolation="DEFAULT" propagation="REQUIRED" timeout="-1"/>
        tx:attributes>
    tx:advice>
    
    <aop:config>
        <aop:pointcut id="pc" expression="execution(* com.ying.service..*.*(..))"/>
        <aop:advisor advice-ref="myAdvice" pointcut-ref="pc"/>
    aop:config>
beans>

3.5 spring-dao配置


<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"
       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">
    

    
    <context:property-placeholder location="classpath:mybatis/db.properties"/>

    
    <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}"/>
    bean>

    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        
        <property name="dataSource" ref="dataSource"/>
        
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
     bean>

    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ying.mapper"/>
    bean>

beans>

3.6 mybatis配置


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.ying.pojo"/>
    typeAliases>
    
    <plugins>
        
        <plugin interceptor="com.github.pagehelper.PageInterceptor">plugin>
    plugins>
configuration>

3.7 数据源配置

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///test
jdbc.username=root
jdbc.password=123456

4 Mapper层

4.1 Mapper接口

public interface EmpMapper {
    List<Emp> getAll();
}

4.2 Mapper映射文件

<mapper namespace="com.ying.mapper.EmpMapper">
    <select id="getAll" resultType="EmP">
        select * from emp
    select>
mapper>

5 Service层

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

    @Override
    public List<Emp> getAll() {
        return empMapper.getAll();
    }
}

6 Controller层

@Controller
@RequestMapping("/emp")
public class EmpController {
    @Autowired
    private EmpService empService;
    @RequestMapping("/getAll")
    public String getAll(Model model){
        List<Emp> empList = empService.getAll();
        //empList.forEach(System.out::println);
        model.addAttribute("empList",empList);
        return  "empList";
    }    
}

7 前端JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>


    Title


    
            
员工编号 员工图片 员工姓名 员工经理 员工职位 入职日期 员工工资 员工奖金 部门编号 操作
${emp.empno} ${emp.ename} ${emp.mgr} ${emp.job} ${emp.sal} ${emp.comm} ${emp.deptno} 删除修改

8 整合测试

8.1 声明式事务测试

  • 在service层编写更新(增删改)操作,然后编写异常代码。测试事务是否生效

8.2 整合后注解扫描问题

此时项目中有两个工厂

  • DispatcherServlet 启动的springMVC工厂==负责生产Controller及springMVC自己的系统组件
  • ContextLoaderListener 启动的spring工厂==负责生产其他所有组件
  • springMVC的工厂会被设置为spring工厂的子工厂,可以随意获取spring工厂中的组件

两个工厂不能有彼此侵入,即,生产的组件不能有重合。

SpringMVC工厂


<context:component-scan base-package="com.ying" use-default-filters="false">
    
    <context:include-filter 
         type="annotation" 
         expression="org.springframework.stereotype.Controller"/>
context:component-scan>

Spring工厂

<context:component-scan base-package="com.ying" use-default-filters="true" >
     
    <context:exclude-filter 
                            type="annotation" 
                            expression="org.springframework.stereotype.Controller"/>
context:component-scan>

你可能感兴趣的:(Java,#,框架演进,mybatis,spring,java)