Mybatis Mapper XML文件-查询(select)

news/2024/12/5 2:28:50/

MyBatis真正的力量在于映射语句(Mapped Statements)。这是魔力发生的地方。尽管拥有强大的功能,Mapper XML文件相对来说比较简单。如果将其与等效的JDBC代码进行比较,您会立即看到代码减少了95%。MyBatis专注于SQL的编写,并尽最大努力不干扰您的方式。

Mapper XML文件仅有几个一级元素(按照定义的顺序):

  • cache – 针对给定命名空间的缓存配置。
  • cache-ref – 从另一个命名空间引用缓存配置。
  • resultMap – 最复杂和强大的元素,描述如何从数据库结果集加载对象。
  • sql – 可以被其他语句引用的可重用SQL代码片段。
  • insert – 映射的INSERT语句。
  • update – 映射的UPDATE语句。
  • delete – 映射的DELETE语句。
  • select – 映射的SELECT语句。
 select

在MyBatis中,select语句是最常用的元素之一。将数据存入数据库并不是非常有价值,直到你将其取回才变得有意义,因此大多数应用程序进行的操作更多是查询而不是修改数据。对于每个插入、更新或删除操作,可能会有很多查询操作。这是MyBatis的一个基本原则,也是为什么在查询和结果映射方面付出了如此多的关注和努力的原因。对于简单的情况,select元素非常简单。例如:

<select id="selectPerson" parameterType="int" resultType="hashmap">SELECT * FROM PERSON WHERE ID = #{id}
</select>

 这个语句被称为selectPerson,接受一个类型为int(或Integer)的参数,并返回一个以列名为键,行值为值的HashMap。

请注意参数表示方式:

#{id}

这告诉MyBatis要创建一个PreparedStatement参数。在JDBC中,这样的参数会被一个“?”来表示,在传递给新的PreparedStatement的SQL中会是这样的形式:

// Similar JDBC code, NOT MyBatis…
String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);

当然,仅使用JDBC需要更多的代码来提取结果并将其映射到对象的实例中,而这正是MyBatis帮助您避免做的。

select元素还有更多的属性,允许您配置每个语句的详细行为。

<selectid="selectPerson"parameterType="int"parameterMap="deprecated"resultType="hashmap"resultMap="personResultMap"flushCache="false"useCache="true"timeout="10"fetchSize="256"statementType="PREPARED"resultSetType="FORWARD_ONLY">
Attribute(属性)Description(描述)
id在这个命名空间中的一个唯一标识符,可以用来引用这个语句。
parameterType完全限定的类名或参数的别名,将传递给这个语句。这个属性是可选的,因为MyBatis可以通过实际传递给语句的参数来计算要使用的TypeHandler。默认是未设置的。
parameterMap这是一种已过时的引用外部参数映射的方法。请使用内联参数映射和parameterType属性。
resultType这是期望从该语句返回的结果类型的完全限定类名或别名。请注意,在集合的情况下,应该是集合所包含的类型,而不是集合本身的类型。使用resultType或resultMap,而不要同时使用两者。
resultMap对外部resultMap的命名引用。结果映射是MyBatis最强大的特性,通过对其进行良好理解,可以解决许多复杂的映射情况。使用resultMap或resultType,而不要同时使用两者。
flushCache将此设置为true将导致在每次调用该语句时刷新本地缓存和二级缓存。对于select语句,默认值为false。
useCache将此设置为true将导致该语句的结果被缓存在二级缓存中。对于select语句,默认值为true。
timeout这个属性设置驱动程序在请求后等待数据库返回的时间,超过该时间将抛出异常。默认值是未设置的(依赖于驱动程序)。
fetchSize这是一个驱动程序提示,它会尝试使驱动程序以指定大小的行批量返回结果。默认值是未设置的(依赖于驱动程序)。
statementType可以选择其中的一个:STATEMENT、PREPARED或CALLABLE。这会让MyBatis分别使用Statement、PreparedStatement或CallableStatement。默认值为PREPARED。
resultSetType可以选择其中之一:FORWARD_ONLY、SCROLL_SENSITIVE、SCROLL_INSENSITIVE或DEFAULT(与未设置相同)。默认值为unset(依赖于驱动程序)。
databaseId如果配置了databaseIdProvider,MyBatis将加载所有没有databaseId属性或者其databaseId与当前数据库Id匹配的语句。如果发现相同的语句既有databaseId,又没有databaseId,后者将被丢弃。
resultOrdered这仅适用于嵌套的结果选择语句:如果设置为true,则假定嵌套结果被包含或分组在一起,以便当返回新的主结果行时,不会再出现对以前结果行的引用。这样可以使嵌套结果填充更加友好地使用内存。默认值为false。
resultSets这仅适用于多个结果集。它列出了语句将返回的结果集,并为每个结果集提供一个名称。名称之间用逗号分隔。
affectData当编写返回数据的INSERT、UPDATE或DELETE语句时,将其设置为true,以便正确控制事务。还可参见事务控制方法。默认值为false(自3.5.12版起)。


http://www.ppmy.cn/news/1278751.html

相关文章

WebAssembly 的魅力:高效、安全、跨平台(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Java八股文面试全套真题【含答案】- RabbitMQ篇

RabbitMQ 是什么&#xff1f;它解决了哪些问题&#xff1f; 答&#xff1a;RabbitMQ 是一个开源的消息代理中间件&#xff0c;用于在应用程序之间进行可靠的异步消息传递。它解决了应用程序间解耦、消息传递、负载均衡、故障恢复等问题。RabbitMQ 的核心概念是什么&#xff1f;…

实在智能斩获钛媒体2023全球创新评选科技类「 大模型创新应用奖」

近日&#xff0c;历时三天的钛媒体2023 T-EDGE全球创新大会以“新视野新链接”为主题在北京隆重举办。作为科创领域全新高度的年度盛事&#xff0c;大会吸引了AI各产业链近百位海内外创投人、尖端企业家、商业领袖和国际嘉宾齐聚一堂&#xff0c;围绕新一轮AI革命、智慧数字化、…

ArchLinux搭建riscv测试环境(失败)

参考 Boot an Arch Linux RISC-V using qemu-system - JieJiSS Blog 安装ArchLinux安装所需包 sudo pacman -S arch-install-scripts git qemu-img qemu-system-riscv sudo pacman -S riscv64-linux-gnu-gcc 安装yay git clone https://aur.archlinux.org/yay-bin cd yay-b…

SQL Error:1064,SQLState:42000

SQL Error 1064 是一个常见的 SQL 错误&#xff0c;通常表示 SQL 语句存在语法错误或不符合数据库的规范。SQLState 42000 是表示通用语法错误的 SQL 状态码。要解决 SQL Error 1064&#xff0c;需要检查的 SQL 语句&#xff0c;确保它们符合数据库管理系统的语法规则。 引起错…

Linux对于软件的管理

软件管理 ​ 在linux操作系统中&#xff0c;关于软件的安装与Windows操作系统上的软件安装以及软件包的管理有很大的不同。在linux中&#xff0c;常常使用apt-get命令进行软件安装。实际上该命令是linux软件包管理&#xff08;PMS&#xff09;的一个工具。在实际工程实践以及软…

【HTML】使用js给input标签增加disabled属性

目录 1.常规text标签 2.radio标签 1.常规text标签 在JavaScript中&#xff0c;您可以通过修改元素的属性来给input标签增加disabled属性。这可以通过使用setAttribute方法来完成。以下是一个简单的例子&#xff1a; // 假设您的input元素的id是myInput var inputElement doc…

虚拟机的下载、安装(模拟出服务器)

下载 vmware workstation&#xff08;收费的虚拟机&#xff09; 下载vbox 网址&#xff1a;Oracle VM VirtualBox&#xff08;免费的虚拟机&#xff09; 以下选择一个下载即可&#xff0c;建议下载vbox&#xff0c;因为是免费的。安装的时候默认下一步即可&#xff08;路径最好…