SSM 통합 문서] III. 제 II + 통합 + 거래 단위 테스트의 경우 SSM (사 장)

봄 + SpringMvc + MyBatis로는 두 번째 장 담당 ++ 단위 테스트 케이스를 통합

GitHub의源码(day56-SSM-거래) https://github.com/1196557363/ideaMavenProject

일부 지식은 기준 이해할 수없는 SSM]는 기사를 통합 할 수 있습니다. 봄 + SpringMvc +의 MyBatis 간단한 케이스

챕터에 연결된 경우 [SSM] 통합 세 기사. SSM 통합 문제 + + 유닛 테스트 케이스 첫번째 챕터 (네 장)

5. 구성 문제

5.1 정의 I ... 서비스 및 그 구현 클래스 ServiceImpl에서는 (구현 클래스 플러스 내가 접두사가없는)

5.1.1 IDeptService 및 DeptServiceImpl

인터페이스 정의 IDeptService

package com.wpj.service;

import org.springframework.stereotype.*;

/**
 * ClassName: IDeptService
 * Description:
 *
 * @author JieKaMi
 * @version 1.0
 * @date: 2020\1\8 0008 19:46
 * @since JDK 1.8
 */
public interface IDeptService {
}

DeptServiceImpl 구현 클래스 정의 주입 다오 (구현 클래스 플러스 @Service 기억)

package com.wpj.service.impl;

import com.wpj.dao.*;
import com.wpj.service.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.stereotype.*;

/**
 * ClassName: DeptServiceImpl
 * Description:
 *
 * @author JieKaMi
 * @version 1.0
 * @date: 2020\1\8 0008 20:00
 * @since JDK 1.8
 */
@Service
public class DeptServiceImpl implements IDeptService {
    @Autowired
    private IDeptDao iDeptDao;
}
5.1.1 IEmpService 및 EmpServiceImpl

인터페이스 정의 IEmpService

package com.wpj.service;

/**
 * ClassName: IEmpService
 * Description:
 *
 * @author JieKaMi
 * @version 1.0
 * @date: 2020\1\8 0008 19:47
 * @since JDK 1.8
 */
public interface IEmpService {

}

DeptServiceImpl 구현 클래스 정의 주입 다오 (구현 클래스 플러스 @Service 기억)

package com.wpj.service.impl;

import com.wpj.dao.*;
import com.wpj.service.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.stereotype.*;

/**
 * ClassName: EmpServiceImpl
 * Description:
 *
 * @author JieKaMi
 * @version 1.0
 * @date: 2020\1\8 0008 20:03
 * @since JDK 1.8
 */
@Service
public class EmpServiceImpl implements IEmpService {
    @Autowired
    private IEmpDao iEmpDao;
}

5.2 주석 및 구성 스캔 업무

위의 로딩 jdbc.properties에 스캔 코멘트

<?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: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/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 4.扫描注解 use-default-filters="false" 关闭默认机制 默认true -->
    <context:component-scan base-package="com.wpj" use-default-filters="false">
        <!-- 4.1 只扫描Serivce -->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
    </context:component-scan>
    
    <!-- 1. 加载jdbc.properties -->
    <!-- 2. 创建数据源 -->
    <!-- 3. Spring跟MyBatis整合 -->

    <!-- 5. 事务的配置 -->
    <!-- 5.1 事务管理器 负责事务的提交(需要连接数据库)-->
    <bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 5.1.1 设置数据源 -->
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 5.2 事务的策略 id:唯一标识 transaction-manager:事务管理器 -->
    <tx:advice id="txAdvice" transaction-manager="tx">
        <tx:attributes>
            <!--
                name:方法名称,支持通配符
                isolation:事务隔离级别
                propagation:传播级别
                read-only:是否只读
            -->
            <!-- 写操作 -->
            <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <!-- 读操作 -->
            <tx:method name="get*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/>
            <tx:method name="query*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/>
            <tx:method name="find*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/>
            <tx:method name="select*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    <!-- 5.3 事务AOP的配置 -->
    <aop:config>
        <!--  advice-ref: 指向事务的策略 -->
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.wpj.service.*.*(..))" />
    </aop:config>
</beans>

5.3 시험 (에만 성공 서비스의 분사 여부 테스트)

import com.wpj.service.*;
import org.apache.ibatis.session.*;
import org.junit.*;
import org.junit.runner.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.test.context.*;
import org.springframework.test.context.junit4.*;

import javax.sql.*;

/**
 * ClassName: SSMTest
 * Description:
 *
 * @author JieKaMi
 * @version 1.0
 * @date: 2020\1\8 0008 17:51
 * @since JDK 1.8
 */

@RunWith(value= SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "classpath:spring-context.xml")
public class SSMTest {

    @Autowired
    private IEmpService iEmpService;

    @Test
    public void testIEmpService(){
        System.out.println(iEmpService);
    }
}

5.4 결과

오류 또는 null가 어디로 가야 앞에 확인해야하는 경우 잘못된 아래 아래로 이동합니다.
가능한 잘못된 장소

  1. @Service를 추가하지 IMPL
  2. DAO를 주입 @Autowired를 추가하지 않은
  3. 스캔 프로파일 잘못을 포장
  4. 충분하지 않은 경우, 트랜잭션이 일시적으로 제거 될 수 있습니다
    그림 삽입 설명 여기

6. 시험 봄 MyBatis로 통합 환경 EMP (행 예)

6.1 프록시 DAO 층을 만드는

<!-- 6. 创建dao层的代理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- 6.1 Mapper接口的包名 -->
	<property name="basePackage" value="com.wpj.dao" />
	<!-- 6.2 sqlSessionFactoryBeanName-->
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

6.2 DAO는 방법을 추가

public interface IEmpDao {
    /**
     * 获取所有的Emp
     * @return
     */
    List<Emp> getAllEmp();
}

SQL 6.3 매퍼 매핑 정의

<?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.wpj.dao.IEmpDao">
		<!-- 配属性和字段的映射,将来写级联查询会用到-->
        <resultMap id="empMap" type="emp">
                <id property="empId" column="emp_id"/>
                <result property="empName" column="emp_name" />
                <result property="job" column="job" />
                <result property="superId" column="superId" />
                <result property="deptNo" column="deptNo" />
        </resultMap>

        <select id="getAllEmp" resultMap="empMap">
                select * from emp
        </select>
</mapper>

6.4 serivce 대응 방법은 DAO에 정의 된

public interface IEmpService {
    /**
     * 获取所有的Emp
     * @return
     */
    List<Emp> getAllEmp();
}

DAO 주입 메소드를 호출 ServiceImpl에서는 6.5

@Service
public class EmpServiceImpl implements IEmpService {
    @Autowired
    private IEmpDao iEmpDao;

    public List<Emp> getAllEmp() {
        return iEmpDao.getAllEmp();
    }
}

6.6 테스트

import com.wpj.bean.*;
import com.wpj.service.*;
import org.apache.ibatis.session.*;
import org.junit.*;
import org.junit.runner.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.test.context.*;
import org.springframework.test.context.junit4.*;

import javax.sql.*;
import java.util.*;

@RunWith(value= SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "classpath:spring-context.xml")
public class SSMTest {
    @Autowired
    private IEmpService iEmpService;
    @Test
    public void testGetAllEmp() {
        List<Emp> empList = iEmpService.getAllEmp();
        for (Emp emp : empList) {
            System.out.println(emp);
        }
    }
}

6.7 결과

다시 말하지만, 오류 또는 null가 잘못 아래에 내려 가서 어디에 앞에 확인해야합니다.
가능한 잘못된 장소

  1. 다오 층 매퍼 구성 및 배치 sqlSessionFactoryBeanName
  2. 아이디는 SQL DAO 메소드 이름의 매핑 및 프로파일이 일치하지 않았다
  3. resultMap는 재산 및 필드 매핑 잘못
    그림 삽입 설명 여기
계속합니다. . . .
  1. 테스트 트랜잭션이 성공적으로 구성되어 있는지 여부 [SSM] 통합 세 기사. SSM 통합 + + 단위 테스트의 경우 업무 제 III (사 장)
게시 42 개 원래 기사 · 원 찬양 8 · 전망 2439

추천

출처blog.csdn.net/TheNew_One/article/details/103896990