Kaola-Dubbo-Test工程引入MyBatis相关改动

达芬奇密码2018-08-06 09:19

1、目的

Dubbo接口测试中希望方便快捷的校验比对接口返回数据与数据库的实际存储值,将实际SQL语句和接口测试代码分离;

什么是 MyBatis ?  参考文档

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。


2、过程:
(1)pom.xml添加相关maven依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
(2)Resource资源目录下添加数据库连接配置及对应的属性值配置
applicationContext_database_inventory.xml:
<bean id="inventoryDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="username" value="${jdbc.inventory.username}" />
<property name="password" value="${jdbc.inventory.password}" />
<property name="driverClassName" value="${jdbc.common.driverClassName}" />
<property name="url" value="${jdbc.inventory.url}" />
<property name="maxActive" value="${jdbc.inventory.maximumConnectionCount}"/>
<property name="initialSize" value="${jdbc.inventory.minimumConnectionCount}"/>
<property name="minIdle" value="${jdbc.inventory.minimumConnectionCount}"/>
oracle.properties:
# inventory
jdbc.inventory.url=jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST ...
jdbc.inventory.username=global_app
jdbc.inventory.password=jReSebMb9Finw
jdbc.inventory.maximumConnectionCount=10
jdbc.inventory.minimumConnectionCount=2
jdbc.inventory.houseKeepingTestSql=select sysdate from DUAL
jdbc.inventory.readonly.url=jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST...
(3)编写dao文件(com.netease.qa.dao.InventoryDao)
public interface InventoryDao {
List<Inventory> getInventoryBySkuId(@Param("skuId") String skuId);
List<Inventory> getInventoryBySkuIdFromYZ(@Param("skuId") String skuId);
}
(4)dao对应XML文件,实际的SQL语句(Kaola-Dubbo-Test/src/main/resources/mappers/InventoryDao.xml)
<mapper namespace="com.netease.qa.dao.InventoryDao">
<select id="getInventoryBySkuId" parameterType="String" resultMap="inventoryMap">
SELECT *
FROM GLOBAL_PRODUCT.TB_INVENTORY
WHERE SKU_Id =#{skuId}
</select>
</mapper>
(5)实际dubbo接口测试中调用(com.netease.qa.dubboTest.inventory.ShadowTest)
public class ShadowTest extends BaseDubboTest {
    @Resource
    private StoreForOnlineFacade storeForOnlineFacade;
    @Resource
    private InventoryDao inventoryDao;   //依赖注入

    Long goodsId = 59081265L;
    String skuId = "59081265-ecc4090b639c47f89b453980923afb8e";

    @Test
    public void shadowTest_trace() throws InvException {
        List resultList = storeForOnlineFacade.queryInvBySkuIds(skuId);
        Assert.assertNotNull(resultList);
        Assert.assertTrue(resultList.get(0).getStore().equals(inventoryDao.getInventoryBySkuId(skuId).get(0).getStore()));  //dao调用
}

3、总结
(1)与JDBC相比,减少了很多工作量,不用关注连接/创建Statement/执行SQL/关闭连接等过程,更多关注SQL语句本身编写上
(2)SQL写在XML里面(也可通过注释方式),与其他测试代码分离,更容易管理维护,并可重用

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者陈伟授权发布。