`

myBatis 从 spring分离 进行快速单元测试

    博客分类:
  • TDD
 
阅读更多

项目采用mybatis + spring开发,这是以前的测试代码, 【运行需要30s】

private static MemberService memberService;
	@BeforeClass
	public static void setUp() throws Exception{
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		memberService = (MemberService)context.getBean("memberService");

 

 这种方式的不好,要实例化整个spring容器,如果项目很大,一个单元测试运行的时间将会很长;

 下面我把myBatis从spring进行分离,分离后进行单元测试速度很快:下面是改进后的测试类,【运行只需3s】

 

private static MemberService memberService;
	@BeforeClass
	public static void setUp() throws Exception{
		MemberDao memberDao = new MemberDao();
		memberDao.setMemberMapper((MemberMapper)SessionFactory.getMapper(MemberMapper.class));
		MemberServiceImpl memberServiceimpl = new MemberServiceImpl();
		memberServiceimpl.setMemberDao(memberDao);
		memberService = memberServiceimpl;

1,configuration 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>
        <!-- changes from the defaults -->
        <setting name="lazyLoadingEnabled" value="false" />
    </settings>
    <typeAliases>
       
        <!-- 会员实体begin -->
        <typeAlias alias="member" type="com.***.project.member.domain.Member" />
        <!-- 会员实体end -->
        
    </typeAliases>
    <plugins>  
        <!-- 指定数据库分页方言Dialect, 其它方言:OracleDialect,SQLServerDialect,SybaseDialect,DB2Dialect,PostgreSQLDialect,MySQLDialect,DerbyDialect-->  
        <plugin interceptor="com.***.project.common.mybatis.interceptor.OffsetLimitInterceptor">  
            <property name="dialectClass" value="com.***.project.common.mybatis.dialect.OracleDialect"/>  
        </plugin>  
    </plugins>
	<environments default="develop">
		<environment id="develop">
			<transactionManager type="com.***.project.utils.TransactionManager">
			</transactionManager>
			<dataSource type="POOLED" >
				<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
				<property name="url" value="jdbc:oracle:thin:@****:***" />
				<property name="username" value="***" />
				<property name="password" value="***" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="mappers/MemberMapper.xml"/>
	</mappers>
</configuration>

2, TransactionManager类 自定义事务管理,主要是用作自动提交,autoCommit

 

public class TransactionManager implements TransactionFactory {

	@Override
	public Transaction newTransaction(Connection conn, boolean autoCommit) {
		Transaction  tx = new JdbcTransaction(conn, true);
		return tx;
	}

	@Override
	public void setProperties(Properties arg0) {
		
	}

}

 3,下面是我的核心类 ,主要是获取sqlSession与Mapper接口

 

public class SessionFactory {
	
	private static SqlSessionFactory sessionFactory;
	private SessionFactory(){
	}
	static{
		String resource = "com/***/project/utils/mybatis.xml";
		Reader reader;
		try {
			reader = Resources.getResourceAsReader(resource);
			sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}
	public static SqlSession getSqlSession(){
		return sessionFactory.openSession();
	}
	public static Object getMapper(Class cls){
		return MapperProxy.newMapperProxy(cls, getSqlSession());
	}
}

小结:把dao层分离可以进行快速的单元测试(严格来说是集成测试),但如果自动化运行所有的测试,也可以直接从spring容器中获取service进行测试,可参昭我的文章http://mingliang-luo.iteye.com/blog/1237351

分享到:
评论

相关推荐

    mybatis与spring整合全部jar包

    这个“mybatis与spring整合全部jar包”包含了这三个框架整合所需的所有依赖库,使得开发者可以快速搭建SSM项目。 首先,让我们深入了解一下这三个组件: 1. **Spring**:Spring 是一个全面的Java企业级应用开发...

    mybatis整合spring 实例

    此外,这种整合还带来了更好的测试性,因为我们可以轻松地对单个Mapper接口进行单元测试。 这个实例中的"mybatis整合spring实例(完整版)"文件可能包含了上述所有步骤的源代码,包括Spring的配置文件、MyBatis的...

    mybatis-spring整合开发jar包.zip

    总的来说,这个压缩包提供的组件是构建基于Mybatis和Spring的Java Web应用的基础,通过它们可以轻松实现数据访问层与业务逻辑层的分离,提高代码的可维护性和可测试性。同时,Mybatis-Spring的整合使得两者的协同...

    Mybatis-Spring-master

    Mybatis-Spring也支持使用TestNG进行集成测试,模拟数据库交互。 9. **日志管理**:项目可能包含日志配置,如log4j或logback,用于记录应用程序的运行信息,帮助调试和优化。 10. **数据库连接池**:为了提高性能...

    MyBatis+Spring+Maven的简单整合Demo

    在测试阶段,你可以使用Spring的TestContext框架,创建一个测试类,通过@Autowired注解注入需要的Bean,进行单元测试或者集成测试,验证MyBatis和Spring的整合是否成功。 总之,这个"MyBatis+Spring+Maven的简单...

    mybatis与spring整合全部jar包(包括springmvc

    9. **单元测试**:整合后的项目更容易编写单元测试,通过Spring的TestContext框架,可以方便地模拟数据源和事务环境,进行数据库操作的测试。 10. **性能优化**:整合MyBatis和Spring可以利用Spring的缓存机制,...

    MyBatis做读写分离

    ### MyBatis 实现读写分离 #### 一、读写分离的概念与优势 在数据库设计与应用领域,“读写分离”...通过以上步骤和技术细节,可以有效地利用 MyBatis 和 Spring 实现数据库的读写分离,进而提升系统的性能和稳定性。

    mybatis整合spring所有jar包

    通过以上步骤,MyBatis和Spring就能成功整合,开发者可以在不编写任何DAO类的情况下,直接使用Mapper接口进行数据库操作。这种方式提高了代码的可读性和可维护性,同时也使得业务逻辑与数据访问层分离,符合Spring...

    mybatis + spring + springMVC整合jar包.zip

    MyBatis、Spring和SpringMVC是Java开发中三大核心框架,它们的整合使得企业级应用的开发变得更加高效和便捷。下面将详细讲解这三个框架以及它们整合的关键知识点。 MyBatis是一个优秀的持久层框架,它支持定制化SQL...

    mybatis-spring-1.1.0.zip

    6. **支持 Spring 的测试框架**: 在测试环境中,MyBatis-Spring 可以帮助快速设置和清理数据库状态,便于单元测试。 使用 mybatis-spring-1.1.0.zip,你需要解压文件并将其包含的 JAR 文件添加到你的项目类路径中。...

    mybatis与spring整合jar包

    3. 提高代码的可测试性,通过Spring的Mock对象可以方便地进行单元测试。 四、整合步骤 1. 添加依赖:在项目的pom.xml或build.gradle文件中添加mybatis-spring和mybatis、spring的相关依赖。 2. 配置...

    MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件

    这有助于开发者快速搭建测试环境,验证MyBatis与Spring Boot集成后的功能是否正常运行。 `spring-boot-MyBatis`这个文件可能是项目的主要源代码包,其中应该包含了Spring Boot的配置文件(如`application.yml`或`...

    mybatis与spring整合全部jar包(包括springmvc).rar

    SSM(Spring、Spring MVC、MyBatis...这个压缩包提供的jar包涵盖了SSM整合所需的全部基础库,包括Spring、Spring MVC、MyBatis以及它们的依赖,使得开发者可以快速搭建起一个完整的开发环境,进行Java Web应用的开发。

    SpringMybatisSpringMvc整合包

    这些jar包涵盖了运行Spring、Mybatis和Spring MVC应用所需的全部依赖,可以帮助开发者快速搭建一个包含数据库访问、业务逻辑处理和Web接口的完整系统。 在使用这个整合包时,开发者首先需要配置Spring的上下文文件...

    Mybatis与Spring整合全部jar包

    6. **测试**:通过Spring的测试框架或者JUnit进行集成测试,验证Mybatis和Spring的整合是否成功。 在"mybatis与spring整合全部jar包(包括springmvc)"的压缩包中,你可能会找到以下关键的jar文件: - `mybatis-x.x....

    spring-mybatis-spring-2.1.0.zip

    - 利用Spring的@Test注解编写单元测试,对数据访问层进行独立测试。 - 使用Mockito等工具模拟数据源,避免实际数据库操作,提高测试效率。 - 结合日志工具(如Log4j或Logback),跟踪和分析程序运行状态。 通过...

    MAVEN-Mybatis+spring+springMVC

    【标题】"MAVEN-Mybatis+spring+springMVC" 涵盖了现代Java Web开发中的核心组件,这是一个基于Maven构建的项目,它整合了Mybatis、Spring和Spring MVC三大框架,用于实现高效、灵活且可维护的Web应用。 **1. Maven...

    mybatis和spring约束.zip

    8. **测试支持**:Spring Test模块提供了一套完整的测试框架,可以帮助开发者编写针对MyBatis和Spring集成的单元测试和集成测试,通过模拟数据库环境,保证代码的正确性。 9. **最佳实践**:在实际开发中,为了提高...

    mybatis+spring示例

    在这个压缩包文件`mybatis-spring-demo`中,很可能是提供了一个完整的示例项目,帮助开发者理解如何将MyBatis与Spring进行集成。 MyBatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者通过SQL语句直接操作...

Global site tag (gtag.js) - Google Analytics