系列五、映射文件xxxMapper.xml
一、概述
mapper映射文件是mybatis中最重要的部分,涉及到的细节也非常多。
1.1、parameterType
表示输入参数的类型。例如:
<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);
相关文章:
系列五、映射文件xxxMapper.xml
一、概述 mapper映射文件是mybatis中最重要的部分,涉及到的细节也非常多。 1.1、parameterType 表示输入参数的类型。例如: <select id"getUserById" parameterType"integer" resultType"org.star.entity.model.UserDO&…...
【缓存】Spring全家桶中@CacheEvict无效情况共有以下几种
Spring全家桶中CacheEvict无效情况共有以下几种 一、背景介绍二、原因分析三、解决方案 一、背景介绍 SpringBoot中使用Cacheable注解缓存数据,使用CacheEvict注解删除缓存。但是在项目使用过程中,发现使用CacheEvict注解删除缓存无效。 拓展ÿ…...
P9117 [春季测试 2023] 涂色游戏
Portal. 维护每一行、每一列最后一次染色时染上的颜色以及时间戳即可。 时间复杂度 O ( T n ) O(Tn) O(Tn)。 #include <bits/stdc.h> using namespace std;const int maxn1e55; struct node{int c,t;}a[maxn],b[maxn];void solve() {int n,m,q;cin>>n>>…...
react如何进行项目配置代理
目录 一、前言 二、配置方法 三、总结 前言: 在使用React创建应用程序时,配置代理的目的是为了解决跨域请求的问题。跨域请求是指在浏览器中,一个站点的Web应用程序向另一个不同域名的站点发送请求。由于浏览器的安全策略,这些…...
2023杭州.云栖大会:计算,为了无法计算的价值
目录 前言 第一次参加云栖大会的印象 第二次至今参加云栖大会的感受 2023云栖大会介绍 这些年,我的工作、生活、关注的技术领域等发生的变化 对未来云栖大会的期待与建议 🎈个人主页:库库的里昂 🎐C/C领域新星创作者 &#…...
MIT6.5830 Lab1-GoDB实验记录(二)
MIT6.5830 Lab1-GoDB实验记录(二) – WhiteNights Site 标签:Golang, 数据库 接下来我们将完成tuple.go的缺失代码,并通过tuple_test.go的测试。 实验步骤 观察tuple.go 观察肯定是第一步,先打开tuple.go。 快300行代…...
设计模式—创建型模式之工厂模式
设计模式—创建型模式之工厂模式 工厂模式(Factory Pattern)提供了一种创建对象的最佳方式。我们不必关心对象的创建细节,只需要根据不同情况获取不同产品即可。 简单工厂模式 比如我们有造车的工厂,来生产车,我们先…...
N.B.缩略语的意思
阅读文献的时候,经常遇到N.B.这个缩略语,是表示“注意”的意思,它是nota bene的缩写,是拉丁短语。 例如: N.B. all Values are Hexadecimal...
SpringBoot源码透彻解析—自动装配
花点时间找到程序入口: 整个自动装配的流程总结如下: bean工厂后置处理器(ConfigurationClassPostProcessor) 扫描spring.factories和spring-autoconfigure-metadata.properties两个文件,将文件中的自动装配类信息抽象成Con…...
基于springboot实现疫情防控期间外出务工人员信息管理系统项目【项目源码+论文说明】
基于springboot疫情防控期间外出务工人员信息管理系统 摘要 网络的广泛应用给生活带来了十分的便利。所以把疫情防控期间某村外出务工人员信息管理与现在网络相结合,利用java技术建设疫情防控期间某村外出务工人员信息管理系统,实现疫情防控期间某村外出…...
自动曝光算法(第一讲)
序言 失业在家无事,想到以后换方向不做自动曝光了,但是自动曝光的工作经验也不能浪费了,准备写一个自动曝光的教学,留给想做自动曝光的小伙伴参考。笔者当时开发自动曝光没有按摄影的avtvevbvsv公式弄,而是按正确的增…...
QStandardItemModel,setData和setItem区别
背景: model存储数据,用于同步view显示。数据节点全部是item。对象树结构。但是一些常用的函数的特征和用法,手册中没有提及太多,于是记录备忘。 主要包括: setRowCount,setColumnCount setItem&#x…...
应用出海新福祉,融云助IM社交迅速对齐海外用户体验
对于互联网业务而言,贴近年轻用户的创新是永恒的话题。近期,一种新的社交方式悄悄地在年轻人中流行开来,这就是“猫鼠游戏”。关注【融云全球互联网通信云】了解更多 玩法可以说是我们熟悉的“躲猫猫”游戏升级版,不同之处在于&a…...
64T存储松下mov和索尼mp4文件变0字节恢复案例
64T存储松下mov和索尼mp4文件变0字节恢复案例 小型入门的小NAS凭借超市的性价比在各行业中开始流行,可以通过搭配普通SATA硬盘就可以完成阵列上线,部署也很简单,一根网线就搞定。我们看一个影视公司64T小NAS存储比较奇怪的恢复案例。 故障存…...
【C/C++】 常量指针、指针常量、指向常量的常指针
const修饰指针的三种情况 int main() {int a 10;int b 10;//常量指针//const修饰的是int,指针指向可以改,指针指向的值不可以更改const int * p1 &a; p1 &b; //正确//*p1 100; 报错//指针常量//const修饰的是指针,指针的值&am…...
容斥原理,多步容斥
容斥意义法 设计状态表示容斥的过程。比较简单的容斥题目一般可以容斥意义。 如果我们要求方案数的话,通常情况下我们的把限制视为两个方面,一方面是总限制,一方面是对于每个物品的限制,这样设集合 S i S_i Si表示满足总限制以及…...
vue(32) : win10创建vue2基础前端框架
vue2element-uiaxios 1.创建vue2项目 开发工具为HBuilderX 3.7.3 1.1.新建项目 1.2.普通项目-vue项目(2.6.10) 等待创建项目 2.安装element-ui组件 2.1右键左下角开始图标 2.2.cd进入项目目录,执行安装element-ui npm i element-ui -S 2.3.main.js引入配置 import {Paginat…...
如何制作一款资源网站app
简介 平时生活学习中我们会经常登录各种网站,比如看电影,看视频学习,找资料等等。有时想找到一个靠谱的网站,花了很长时间也找不到。我自己收集了很多好的网站,主要是找资源的,然后我做了一个导航app软件&…...
解决在Win7下运行一些老游戏花屏或色彩异常问题的方法
有一些喜欢回顾经典老游戏的玩家们,在目前最新的windows7的操作系统下,运行某些游戏会出现花屏,问题的原因是因为win7对这些游戏的DirectDraw不兼容,一种方法是改游戏配置文件,把游戏色彩8bit改成16bit,当然…...
使用vue3+vite+elctron构建小项目介绍Electron进程间通信
进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责,因此 IPC 是执行许多常见任务的唯一方法,例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。 在 …...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
