当前位置: 首页 > news >正文

系列五、映射文件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中最重要的部分&#xff0c;涉及到的细节也非常多。 1.1、parameterType 表示输入参数的类型。例如&#xff1a; <select id"getUserById" parameterType"integer" resultType"org.star.entity.model.UserDO&…...

【缓存】Spring全家桶中@CacheEvict无效情况共有以下几种

Spring全家桶中CacheEvict无效情况共有以下几种 一、背景介绍二、原因分析三、解决方案 一、背景介绍 SpringBoot中使用Cacheable注解缓存数据&#xff0c;使用CacheEvict注解删除缓存。但是在项目使用过程中&#xff0c;发现使用CacheEvict注解删除缓存无效。 拓展&#xff…...

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如何进行项目配置代理

目录 一、前言 二、配置方法 三、总结 前言&#xff1a; 在使用React创建应用程序时&#xff0c;配置代理的目的是为了解决跨域请求的问题。跨域请求是指在浏览器中&#xff0c;一个站点的Web应用程序向另一个不同域名的站点发送请求。由于浏览器的安全策略&#xff0c;这些…...

2023杭州.云栖大会:计算,为了无法计算的价值

目录 前言 第一次参加云栖大会的印象 第二次至今参加云栖大会的感受 2023云栖大会介绍 这些年&#xff0c;我的工作、生活、关注的技术领域等发生的变化 对未来云栖大会的期待与建议 &#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#…...

MIT6.5830 Lab1-GoDB实验记录(二)

MIT6.5830 Lab1-GoDB实验记录&#xff08;二&#xff09; – WhiteNights Site 标签&#xff1a;Golang, 数据库 接下来我们将完成tuple.go的缺失代码&#xff0c;并通过tuple_test.go的测试。 实验步骤 观察tuple.go 观察肯定是第一步&#xff0c;先打开tuple.go。 快300行代…...

设计模式—创建型模式之工厂模式

设计模式—创建型模式之工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;提供了一种创建对象的最佳方式。我们不必关心对象的创建细节&#xff0c;只需要根据不同情况获取不同产品即可。 简单工厂模式 比如我们有造车的工厂&#xff0c;来生产车&#xff0c;我们先…...

N.B.缩略语的意思

阅读文献的时候&#xff0c;经常遇到N.B.这个缩略语&#xff0c;是表示“注意”的意思&#xff0c;它是nota bene的缩写&#xff0c;是拉丁短语。 例如&#xff1a; N.B. all Values are Hexadecimal...

SpringBoot源码透彻解析—自动装配

花点时间找到程序入口&#xff1a; 整个自动装配的流程总结如下&#xff1a; bean工厂后置处理器(ConfigurationClassPostProcessor) 扫描spring.factories和spring-autoconfigure-metadata.properties两个文件&#xff0c;将文件中的自动装配类信息抽象成Con…...

基于springboot实现疫情防控期间外出务工人员信息管理系统项目【项目源码+论文说明】

基于springboot疫情防控期间外出务工人员信息管理系统 摘要 网络的广泛应用给生活带来了十分的便利。所以把疫情防控期间某村外出务工人员信息管理与现在网络相结合&#xff0c;利用java技术建设疫情防控期间某村外出务工人员信息管理系统&#xff0c;实现疫情防控期间某村外出…...

自动曝光算法(第一讲)

序言 失业在家无事&#xff0c;想到以后换方向不做自动曝光了&#xff0c;但是自动曝光的工作经验也不能浪费了&#xff0c;准备写一个自动曝光的教学&#xff0c;留给想做自动曝光的小伙伴参考。笔者当时开发自动曝光没有按摄影的avtvevbvsv公式弄&#xff0c;而是按正确的增…...

QStandardItemModel,setData和setItem区别

背景&#xff1a; model存储数据&#xff0c;用于同步view显示。数据节点全部是item。对象树结构。但是一些常用的函数的特征和用法&#xff0c;手册中没有提及太多&#xff0c;于是记录备忘。 主要包括&#xff1a; setRowCount&#xff0c;setColumnCount setItem&#x…...

应用出海新福祉,融云助IM社交迅速对齐海外用户体验

对于互联网业务而言&#xff0c;贴近年轻用户的创新是永恒的话题。近期&#xff0c;一种新的社交方式悄悄地在年轻人中流行开来&#xff0c;这就是“猫鼠游戏”。关注【融云全球互联网通信云】了解更多 玩法可以说是我们熟悉的“躲猫猫”游戏升级版&#xff0c;不同之处在于&a…...

64T存储松下mov和索尼mp4文件变0字节恢复案例

64T存储松下mov和索尼mp4文件变0字节恢复案例 小型入门的小NAS凭借超市的性价比在各行业中开始流行&#xff0c;可以通过搭配普通SATA硬盘就可以完成阵列上线&#xff0c;部署也很简单&#xff0c;一根网线就搞定。我们看一个影视公司64T小NAS存储比较奇怪的恢复案例。 故障存…...

【C/C++】 常量指针、指针常量、指向常量的常指针

const修饰指针的三种情况 int main() {int a 10;int b 10;//常量指针//const修饰的是int&#xff0c;指针指向可以改&#xff0c;指针指向的值不可以更改const int * p1 &a; p1 &b; //正确//*p1 100; 报错//指针常量//const修饰的是指针&#xff0c;指针的值&am…...

容斥原理,多步容斥

容斥意义法 设计状态表示容斥的过程。比较简单的容斥题目一般可以容斥意义。 如果我们要求方案数的话&#xff0c;通常情况下我们的把限制视为两个方面&#xff0c;一方面是总限制&#xff0c;一方面是对于每个物品的限制&#xff0c;这样设集合 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

简介 平时生活学习中我们会经常登录各种网站&#xff0c;比如看电影&#xff0c;看视频学习&#xff0c;找资料等等。有时想找到一个靠谱的网站&#xff0c;花了很长时间也找不到。我自己收集了很多好的网站&#xff0c;主要是找资源的&#xff0c;然后我做了一个导航app软件&…...

解决在Win7下运行一些老游戏花屏或色彩异常问题的方法

有一些喜欢回顾经典老游戏的玩家们&#xff0c;在目前最新的windows7的操作系统下&#xff0c;运行某些游戏会出现花屏&#xff0c;问题的原因是因为win7对这些游戏的DirectDraw不兼容&#xff0c;一种方法是改游戏配置文件&#xff0c;把游戏色彩8bit改成16bit&#xff0c;当然…...

使用vue3+vite+elctron构建小项目介绍Electron进程间通信

进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责&#xff0c;因此 IPC 是执行许多常见任务的唯一方法&#xff0c;例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。 在 …...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...