系列五、映射文件xxxMapper.xml

一、概述

mapper映射文件是mybatis中最重要的部分,涉及到的细节也非常多。

1.1、parameterType

表示输入参数的类型。例如:

XML 复制代码
<select id="getUserById" parameterType="integer" resultType="org.star.entity.model.UserDO">
	select id,username,address from `user` where id = #{id}
</select>

二、$ vs

2.1、概述

mybatis中,当我们在xxxMapper.xml中引用变量时,默认使用的是 # ,如上所示,但是除了 # 之外,我们也可以使用 $ 来应用变量,如下所示:

<select id="getUserById" parameterType="integer" resultType="org.star.entity.model.UserDO">

select id,username,address from `user` where id = ${id}

</select>

在旧版本的MyBatis中,如果使用来引用一个变量,那么这个变量需要通过@Param取别名,但是在新版本的MyBatis中,无论是 还是 #,如果只有一个参数,可以不用取别名,如下所示:

public interface UserMapper {

/**

* 根据id查询用户

* @param id

* @return

*/

UserDO getUserById(Integer id);

}

2.2、区别

2.2.1、使用 $ 打印的日志

2.2.2、使用 # 打印的日志

通过观察两者打印的日志信息,可以很明显的看到 引用的变量,在执行时SQL直接拼接好了,没有参数。而 # 引用的变量,使用了预编译的方式。在传统的jdbc调用中,sql的执行,我们可以通过字符串拼接或者占位符的方式来解决参数传递问题。在mybatis中当然也支持,在mybatis中,传递的参数相当于jdbc中的字符串拼接,而#则相当于jdbc中的占位符。

2.3、如何选择

一般来说,由于参数拼接的方式存在sql注入的风险,因此日常开发中我们大多使用#的方式进行传值,但是在一些特殊的场景下,又不得不使用这种方式。有的sql拼接实际上可以通过数据库函数的方式来解决,例如模糊查询,代码如下:

<select id="getUserByUsername" parameterType="string" resultType="org.star.entity.model.UserDO">

select id,username,address from `user` where username like concat('%',#{username},'%')

</select>

但是有的sql无法使用#来拼接,例如传递一个动态字段进来,假设我想查询所有的数据,需要排序查询,但是排序的字段不确定,需要通过参数传入,这种场景下就只能使用$来解决了,例如有如下方法

List<UserDO> listAllUser(String search);

相关推荐
Seoyoneh7 分钟前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
海南java第二人11 分钟前
对外 API 如何保证幂等性?插入数据 / 上传表格场景全方案汇总
java·幂等性
tryxr31 分钟前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务
Tangyuewei34 分钟前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界1 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
彧azz2 小时前
Java学习语法篇:变量
java·学习
繁星蓝雨2 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
Evand J2 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
杜大哥2 小时前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?
开发语言·python
wuyk5552 小时前
Python网络爬虫入门到实战 第01章:爬虫到底是什么?原理、流程、合法性、风险全解析(零基础必看)
开发语言·爬虫·python