【测试开发】知识点-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 还在用。所以每次使用都应该去获取新的对象,不要放在成员变量中。

相关文章
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1776 23
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2449 24
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
448 0
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
1356 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
1164 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
SQL 测试技术
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
846 2
|
存储 JSON API
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
|
存储 测试技术 数据库
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。
|
Web App开发 JSON 测试技术
API测试工具集合:让接口测试更简单高效
在当今软件开发领域,接口测试工具如Postman、Apifox、Swagger等成为确保API正确性、性能和可靠性的关键。Postman全球闻名但高级功能需付费,Apifox则集成了API文档、调试、Mock与自动化测试,简化工作流并提高团队协作效率,特别适合国内用户。Swagger自动生成文档,YApi开源但功能逐渐落后,Insomnia界面简洁却缺乏团队协作支持,Paw仅限Mac系统。综合来看,Apifox是国内用户的理想选择,提供中文界面和免费高效的功能。