【测试开发】知识点-mybatis,主要使用方式:接口式编程

简介: 【测试开发】知识点-mybatis,主要使用方式:接口式编程

昨天写了一个 mybatis 的helloWord,虽然能跑起来,但是那种方式还是会存在一些问题。


1268169-20211111223208132-254350038.png


  • 每次进行增删改查,方法里传入的 sql 唯一标识id 就好长一串。
  • 再者就是传入的查询入参类型是一个object,也就是什么都可以往里面传,如果传"a",肯定查不出来数据。


那么,mybatis 还提供了另一种更高级的使用方式:接口式编程,这也是后续开发中主要使用的方式。


我们可以使用一个接口来描述一个给定的sql语句,它的参数和返回值。


一、接口与配置文件动态绑定


在测试平台项目下的 dao 层新建一个接口com.pingguo.bloomtest.dao.UserMapper:


package com.pingguo.bloomtest.dao;
import com.pingguo.bloomtest.pojo.User;
public interface UserMapper {
    User getUserById(Integer id);
}


定义好了接口,里面有一个方法getUserById,顾名思义就是通过id查询数据,返回 User 对象。


按照以往,定义好了接口,接下来还需要定义出接口的实现类。


但是现在这个接口就是用来查询出 user 表记录数据并封装成 User 对象返回,而在之前定义好的 sql 映射文件UserMapper.xml里,<select>标签里的 sql 也是做这个事情。


<mapper namespace="org.mybatis.example.UserMapper">
    <select id="selectUser" resultType="com.pingguo.bloomtest.pojo.User">
      select * from user where id = #{id}
    </select>
</mapper>


那么,现在就可以把接口与配置文件进行动态绑定:


  • namespace:不要随便写了,对应接口的全类名
  • id: 对应接口里的方法名


改完之后应该是这样了:


<mapper namespace="com.pingguo.bloomtest.dao.UserMapper">
    <select id="getUserById" resultType="com.pingguo.bloomtest.pojo.User">
      select * from user where id = #{id}
    </select>
</mapper>


再写一个测试方法查询一下:


@Test
    void test2() throws IOException {
        // 根据配置文件,创建一个 SqlSessionFactory 对象
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        // 获取 SqlSession 实例,可以执行已经映射的 sql 语句
        SqlSession session = sqlSessionFactory.openSession();
        // 获取接口的实现类对象
        UserMapper userMapper = session.getMapper(UserMapper.class);
        User user = userMapper.getUserById(4);
        System.out.println(user);
    }


getMapper方法可以获取到这个接口的实现对象。


第一步因为要经常使用,所以抽出去了:


public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }


执行测试,查询成功。


1268169-20211111231805241-1418368372.png


那么问题来了,这个接口还没写实现类,那么


`UserMapper userMapper = session.getMapper(UserMapper.class);`


获取到的是什么?


加个打印System.out.println(userMapper.getClass());看下输出。


1268169-20211111232317863-2018541925.png


原来是个代理对象


所以说,只要把接口和 xml文件进行动态绑定,mybatis 会为接口自动创建一个代理对象,然后由代理对象去执行增删改查方法。


二、关于 SqlSession


SqlSession代表和数据库的一次会话。用完必须关闭,我上面的事例应该加上session.close();


另外,SqlSession也是非线程安全


  • 线程安全:就是在多线程环境下也不会出现数据不一致,
  • 非线程安全: 就有可能出现数据不一致的情况。


所以不能像这样写:


1268169-20211111233309965-842532762.png


如果这样写,可能会出现A线程 用了 SqlSession,然后关掉了,但是线程B 还在用。所以每次使用都应该去获取新的对象,不要放在成员变量中。

相关文章
|
6天前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
6天前
|
存储 测试技术 数据库
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。
|
6天前
|
Web App开发 JSON 测试技术
API测试工具集合:让接口测试更简单高效
在当今软件开发领域,接口测试工具如Postman、Apifox、Swagger等成为确保API正确性、性能和可靠性的关键。Postman全球闻名但高级功能需付费,Apifox则集成了API文档、调试、Mock与自动化测试,简化工作流并提高团队协作效率,特别适合国内用户。Swagger自动生成文档,YApi开源但功能逐渐落后,Insomnia界面简洁却缺乏团队协作支持,Paw仅限Mac系统。综合来看,Apifox是国内用户的理想选择,提供中文界面和免费高效的功能。
|
1月前
|
人工智能 自然语言处理 前端开发
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜
CodeArena 是一个在线平台,用于测试和比较不同大型语言模型(LLM)的编程能力。通过实时显示多个 LLM 的代码生成过程和结果,帮助开发者选择适合的 LLM,并推动 LLM 技术的发展。
66 7
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜
|
1月前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
106 11
|
2月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
46 1
|
2月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
83 3
|
3月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
95 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
4月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
62 2
|
4月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
67 5