MyBatis执行SQL的两种方式

2023-09-20 10:54:06

MyBatis 有两种执行 SQL 语句的方式,如下:

  1. 通过 SqlSession 发送 SQL
  2. 通过 SqlSession 获取 Mapper 接口,通过 Mapper 接口发送 SQL

SqlSession发送SQL

有映射器之后就可以通过 SqlSession 发送 SQL 了。我们以 getWebsite 这条 SQL 为例看看如何发送 SQL。

Website website = (Website)sqlSession.selectOne("net.biancheng.mapper.WebsiteMapper.getWebsite",1);

MyBatis 常用的查询方法有 2 种,分别为 selectOne 和 selectList。

1)selectOne 

selectOne 方法表示使用查询并且只返回一个对象,必须指定查询条件。只能查询 0 或 1 条记录,大于 1 条记录则运行错误。常用格式如下(也有其它重载方法,根据需要选择)。

sqlSession.selectOne(String arg0, Object arg1)
2)selectList 

selectList 方法表示使用查询并且返回一个列表。可以查询 0 或 N 条记录。常用格式如下。

sqlSession.selectOne(String arg0)

也可指定参数

sqlSession.selectList(String arg0, Object arg1)

以上语法格式中,String 对象由一个命名空间加 SQL id 组合而成,它完全定位了一条 SQL,这样 MyBatis 就会找到对应的 SQL。Object 对象为需要传递的参数,也就是查询条件。

selectOne 实现的 selectList 都可以实现,即 list 中只有一个对象。但 selectList 能实现的,selectOne 不一定能实现。

Mapper接口发送 SQL

SqlSession 还可以获取 Mapper 接口,通过 Mapper 接口发送 SQL

WebsiteMapper websiteMapper = sqlSession.getMapper(WebsiteMapper.class);
Website website = websiteMapper.getWebsite(1);

通过 SqlSession 的 getMapper 方法获取一个 Mapper 接口,然后就可以调用它的方法了。因为 XML 文件或者接口注解定义的 SQL 都可以通过“类的全限定名+方法名”查找,所以 MyBatis 会启用对应的 SQL 运行,并返回结果。

区别

上面分别讲解了 MyBatis 两种发送 SQL 的方式,一种用 SqlSession 直接发送,另外一种通过 SqlSession 获取 Mapper 接口再发送。笔者建议采用 Mapper 接口发送 SQL 的方式,理由如下:

  • 使用 Mapper 接口编程可以消除 SqlSession 带来的功能性代码,提高可读性,而 SqlSession 发送 SQL,需要一个 SQL id 去匹配 SQL,比较晦涩难懂。
  • 使用 Mapper 接口,类似 websiteMapper.getWebsite(1) 则是完全面向对象的语言,更能体现业务的逻辑。
  • 使用 websiteMapper.getWebsite(1) 方式,IDE 会提示错误和校验,而使用 sqlSession.selectOne("getWebsite",1L) 语法,只有在运行中才能知道是否会产生错误。

目前使用 Mapper 接口编程已成为主流,尤其在 Spring 中运用 MyBatis 时,Mapper 接口的使用就更为简单

更多推荐

【三相有源电力滤波器】使用同步参考系控制的三相有源功率滤波器(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Simulink仿真实现💥1概述【三相有源电力滤波器】采用同步参考系控制的三相

如何在 Excel 中求平方根

需要在Excel中求一个数字的平方根吗?使用几个内置的Excel函数和公式可以轻松计算平方根。在本分步指南中,您将学习在Excel中计算平方根的5种不同方法,包括使用SQRT函数、POWER函数、指数公式、VBA代码和PowerQuery。跟随教程,掌握平方根计算并提高您的Excel技能。让我们深入了解一下吧!使用SQ

Python用若干列的数据多条件筛选、去除Excel数据并批量绘制直方图

本文介绍基于Python,读取Excel数据,以一列数据的值为标准,对这一列数据处于指定范围的所有行,再用其他几列数据数值,加以筛选与剔除;同时,对筛选与剔除前、后的数据分别绘制若干直方图,并将结果数据导出保存为一个新的Excel表格文件的方法。首先,我们来明确一下本文的具体需求。现有一个Excel表格文件,在本文中我

Go测试学习

前言:\textcolor{Green}{前言:}前言:💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营💞从这个专栏里面可以迅速获得Go的知识Go测试学习03测试3.1单元测试3.1.1单元测试-规则3.1.2单元测试-例子3.1.3单元测试-运行3.1.4单元测试-assert3.1.5单元测试-覆盖率3

机器学习算法基础--Generalized Linear Regression Model

目录1.数据的处理及查看2.数据的处理及可视化3.模型的创建与拟合4.算法可视化效果图5.多维度模型可视化线性回归讲了很多次了,广义线性回归无非就是拟合的多项式曲线的次数的变化,就不再推导公式和算法流程了。1.数据的处理及查看importnumpyasnpimportmatplotlib.pyplotaspltimpo

MySQL的时间差函数、日期转换计算函数

MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date)时间差函数(TIMESTAMPDIFF、DATEDIFF)需要用MySQL计算时间差,使用TIMESTAMPDIFF、DATEDIFF,记录一下实验结果--

举例说明用 easylanguage 语言,编写抄底公式

EasyLanguage语言在金融领域被广泛使用,尤其是用于编写交易策略和算法。以下是一个简单的抄底公式示例:swift复制//定义变量和参数DimStopLossPriceAsDoubleDimTakeProfitPriceAsDoubleDimInitialPositionAsDoubleDimSafetyZone

网络基础(一)

网络基础(一)在本篇文章中,我会详细介绍网络的一些基础知识,之后也会有持续的更新来帮助大家学习网络,希望大家可以通过博客学到更多的知识!了解网络去百度查询可以知道,网络是由若干节点和连接这些节点的链路构成的,表示诸多对象及其相互之间的联系。那么网络在我们生活中起到了举足轻重的作用,我们平时的一系列上网行为都离不开网络,

R语言CalibrationCurves包绘制带可信区间的校准曲线

校准曲线图表示的是预测值和实际值的差距,作为预测模型的重要部分,目前很多函数能绘制校准曲线。一般分为两种,一种是通过Hosmer-Lemeshow检验,把P值分为10等分,求出每等分的预测值和实际值的差距。一种是绘制连续的校准曲线。我们既往已经通过多篇文章介绍了校准曲线绘制,连续的和等分的都有介绍,今天咱们来介绍一下C

群体智能的实现与优化: 使用Metal技术在Swift中打造高效模型

1.群体智能简介群体智能是自然选择过程中形成的一种智能行为。你可以在鸟群飞翔、蚂蚁觅食、鱼群游动中看到这种行为。它们没有集中的控制中心,但却能通过局部互动实现整体的协同。这种行为为许多现代算法,如粒子群优化(PSO)和蚁群算法(ACO)提供了灵感。在这篇文章中,我们将探讨如何利用Apple的Metal技术,在Swift

【CSS3】CSS3 动画 ⑥ ( 动画属性示例 | 精灵图帧动画效果实现 )

文章目录一、需求说明二、代码分析1、动画属性2、布局分析3、动画实现三、完整代码示例一、需求说明给定一张精灵图,其中有多个动画帧对应的图片,下图的大小是1600x100像素,截图展示如下:实际图片:二、代码分析1、动画属性使用上图实现逐帧动画效果;实现逻辑是设置元素的animation-timing-function动

热文推荐