mybatis的mapper对应的xml写法
文章目录
- 前置
- mapper 对应 xml 基础配置
- mapper 对应 xml 复杂配置
- Mapper 中的相关注解
- 其他
前置
你使用
- java
- mybatis/mybatis plus
如果你使用 mybatis plus,也是会向下兼容 mybatis 的
mapper 对应 xml 基础配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><!-- SQL 映射语句 --></mapper>
简单查询:
<!-- 简单查询 -->
<select id="getUserById" resultType="com.example.model.User">SELECT * FROM user WHERE id = #{id}
</select>
- id:与 Mapper 接口中的方法名一致
- resultType:返回值类型(Java 类的全限定名或别名)
- #{id}:预编译参数,防止 SQL 注入
- 如果返回 List,直接使用 resultType 即可,无需额外配置
简单插入:
<insert id="insertUser" parameterType="com.example.model.User">INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
- parameterType:输入参数类型(可选,MyBatis 可自动推断)
简单更新:
<update id="updateUser" parameterType="com.example.model.User">UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
简单删除:
<delete id="deleteUserById" parameterType="int">DELETE FROM user WHERE id = #{id}
</delete>
mapper 对应 xml 复杂配置
resultMap 配置
当数据库字段名与 Java 对象属性名不一致时,需使用 映射。一般都需要配置
<resultMap id="userResultMap" type="com.example.model.User"><id property="id" column="user_id"/> <!-- 主键映射 --><result property="name" column="user_name"/> <!-- 字段映射 --><result property="age" column="user_age"/>
</resultMap><select id="getUserById" resultMap="userResultMap">SELECT user_id, user_name, user_age FROM user WHERE user_id = #{id}
</select>
if 条件
<select id="searchUsers" resultType="com.example.model.User">SELECT * FROM user<where><if test="name != null anconcatd name != ''">AND name LIKE CONCAT('%', #{name}, '%')</if><if test="age != null">AND age = #{age}</if></where>
</select>
在MyBatis中,如果不写这样的条件判断,如果是对表的写操作,如 update,其中的 set 中当name参数为null时,生成的SQL语句会直接包含name = null,从而将数据库中的对应字段更新为NULL。这是MyBatis的默认行为,需要开发者显式控制是否要过滤null值
多条件选择 choose
类似于 Java 中的 switch-case 或 if-else 逻辑
<choose>
的 <when>
是按顺序判断的,一旦某个条件满足,后续条件不再判断
<select id="findUser" resultType="com.example.model.User">SELECT * FROM user<where><choose><when test="type == 'name'">AND name = #{value}</when><when test="type == 'email'">AND email = #{value}</when><otherwise>AND status = 'active'</otherwise></choose></where>
</select>
<otherwise>
是可选的,但如果省略且所有 <when>
条件都不满足,会导致 SQL 语句不完整或无效
遍历集合 foreach
<select id="getUsersByIds" resultType="com.example.model.User">SELECT * FROM userWHERE id IN<foreach item="id" collection="ids" open="(" separator="," close=")">#{id}</foreach>
</select>
分页查询
<select id="getUsersByPage" resultType="com.example.model.User">SELECT * FROM userLIMIT #{offset}, #{limit}
</select>
你也可以使用 pagehelper 工具,更常用,那就不需要 limit offset
如果你使用 mybatis plus,也有自己的方式,可以使用 IPage 来分页
Mapper 中的相关注解
@Param注解
@Select("SELECT * FROM user WHERE name = #{user_name} AND age = #{user_age}")
User getUserByNameAndAge(@Param("user_name") String userName, @Param("user_age") int userAge);
如果没写 @Param,MyBatis 默认将未使用 @Param 注解的参数封装为 Map,键名为 param1、param2、…、paramN(按参数顺序递增),也就是说 sql 中应该写 #{param1}
和 #{param2}
其他
如果你不想使用 resultMap 来映射 mysql column 和 entity 的 field,还有其他办法吗?
方法一,使用 mybatis plus 的 @TableField 注解来指定 column 和 field 的映射
方法二:xml 中使用别名
<select id="getUserById" resultType="com.example.model.User">SELECT user_id AS id, user_name AS name, user_age AS age FROM user
</select>
choose when 和 if 区别
if 是独立的判断,而 choose when 更像 ifelse 逻辑,一旦判断一个满足,后续的 when 就不执行了!
相关文章:
mybatis的mapper对应的xml写法
文章目录 前置mapper 对应 xml 基础配置mapper 对应 xml 复杂配置Mapper 中的相关注解其他 前置 你使用 javamybatis/mybatis plus 如果你使用 mybatis plus,也是会向下兼容 mybatis 的 mapper 对应 xml 基础配置 <?xml version"1.0" encoding&q…...

Lyra学习笔记2 GFA_AddComponents与ULyraPlayerSpawningManagerComponent
目录 前言GameFeatureAction_AddComponentsULyraPlayerSpawningManagerComponent缓存所有PlayerStart位置选择位置 前言 1.以control模式为例 2.比较散,想单独拿出一篇梳理下Experience的流程 GameFeatureAction_AddComponents 这部分建议看 《InsideUE5》GameFeatu…...

个人健康中枢的多元化AI软件革新与精准健康路径探析
引言 人工智能技术的迅猛发展正在重塑医疗健康领域的服务模式和用户体验。随着多模态大模型、MCP协议、A2A协议和思考链算法等创新技术的出现,个人健康中枢正在经历一场深刻的软件革新。这些技术不仅打破了传统健康管理系统的信息孤岛,还通过多维度数据整合和深度推理能力,…...
使用 Redis 作为向量数据库
一、什么是向量数据库? 向量(Vector):在机器学习和 AI 中,向量是由一系列数字组成的序列,用于数值化地描述数据的特征或语义。文本、图像、音频等非结构化数据可以通过模型转换成固定长度的向量。 向量数据…...

Matlab实现LSTM-SVM时间序列预测,作者:机器学习之心
Matlab实现LSTM-SVM时间序列预测,作者:机器学习之心 目录 Matlab实现LSTM-SVM时间序列预测,作者:机器学习之心效果一览基本介绍程序设计参考资料 效果一览 基本介绍 该代码实现了一个结合LSTM和SVM的混合模型,用于时间…...
美国服务器文件系统的基本功能和命令
文件系统的核心功能是实现数据的存储与组织。美国服务器支持多种文件系统类型(如EXT4、NTFS、ZFS等),每种文件系统通过树状目录结构管理文件和文件夹,并为每个文件分配唯一标识符(如Inode或NTFS索引)。以下是具体操作步骤: 创建文件系统 使…...
开源软件协议大白话分类指南
开源软件协议分类对比表 协议类型代表协议核心规则允许/禁止操作适合场景宽松型MIT、Apache 2.0允许免费使用、修改、商用,可闭源,但需保留原作者版权声明。✅ 闭源商用 ⚠️ 必须署名快速开发商用软件(如APP、网站)强开源型GPL…...

JAVA 集合的进阶 泛型的继承和通配符
1 泛型通配符 可以对传递的类型进行限定 1.1 格式 ? 表示不确定的类型 ?extends E: 表示可以传递 E 或者 E 所有的子类类型 ?super E: 表示可以传递 E 或者 E 所有的父类类…...
机器学习与深度学习05-决策树01
目录 前文回顾1.决策树的基本原理2.构建决策树的划分准则3.决策树中如何避免过拟合4.决策树的剪枝操作 前文回顾 上一篇文章链接:地址 1.决策树的基本原理 决策树(Decision Tree)是一种用于分类和回归问题的机器学习模型。它是一个树状结构…...

下一代液晶显示底层技术与九天画芯的技术突围
一、液晶产业:撑起数字经济的显示脊梁 (一)全球显示市场的核心支柱 作为电子信息产业的战略基石,液晶显示(LCD)占据全球平板显示市场超 60% 的份额,2022 年全球市场规模达 782.41 亿元…...

[NOIP 2001 普及组] 求先序排列 Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String infixOrder sc.nextLine(); // 中序String postOrder sc.nextLine(); // 后序sc.close();System.out.println(preOrder(infixOrder, postOrder))…...

Rockey Linux 安装ffmpeg
1.环境准备 Rockey linux 9.2 ffmpeg 静态资源包 这个是我自己的: https://download.csdn.net/download/liudongyang123/90920340https://download.csdn.net/download/liudongyang123/90920340 这个是官网的 Releases BtbN/FFmpeg-Builds GitHub 以上两个资…...

STM32 Modbus RTU从机开发实战:核心实现与五大调试陷阱解析
知识点1【CRC校验】 CRC校验生成网址 CRC(循环冗余校验)在线计算_ip33.com 知识点2【代码演示】 代码书写思路 代码演示 main.c #include "stm32f10x.h" #include "stm32f10x_conf.h" #include "rs485.h"int main(voi…...

Python----目标检测(《Fast R-CNN》和Fast R-CNN)
一、《Fast R-CNN》 1.1、基本信息 作者:Ross Girshick 机构:Microsoft Research 发表时间:2015年 论文链接:arXiv:1504.08083 代码开源:GitHub仓库(MIT License) 1.2、主要内容 Fast R…...

iEKF的二维应用实例
如果熟悉 EKF 与卡尔曼的推导的话,iEKF 就比较容易理解,关于卡尔曼滤波的推导以及EKF,可以参考以前的文章: 卡尔曼滤波原理:https://blog.csdn.net/a_xiaoning/article/details/130564473?spm1001.2014.3001.5502 E…...
机器学习中的线性回归:从理论到实践的深度解析
一、引言 线性回归(Linear Regression)是机器学习和统计学中最基础且应用广泛的模型之一,用于预测连续型目标变量。它通过建立输入特征与输出变量之间的线性关系,实现对未知数据的预测。无论是预测房价、股票走势,还是…...

【通关文件操作(下)】--文件的顺序读写(续),sprintf和sscanf函数,文件的随机读写,文件缓冲区,更新文件
目录 四.文件的顺序读写(续) 4.8--fwrite函数 4.9--fread函数 五.sprintf函数和sscanf函数 5.1--函数对比 5.2--sprintf函数 5.3--sscanf函数 六.文件的随机读写 6.1--fseek函数 6.2--ftell函数 6.3--rewind函数 七.文件缓冲区 7.1--fflush函数 八.更新文件 &…...

mysql的Memory引擎的深入了解
目录 1、Memory引擎介绍 2、Memory内存结构 3、内存表的锁 4、持久化 5、优缺点 6、应用 前言 Memory 存储引擎 是 MySQL 中一种高性能但非持久化的存储方案,适合临时数据存储和缓存场景。其核心优势在于极快的读写速度,需注意数据丢失风险和内存占…...
尚硅谷-尚庭公寓部署文档
文章目录 整合版部署文档部署架构图1. 项目目录结构增加注释的 Dockerfile 配置(1) 后端服务1 Dockerfile (backend/service1/Dockerfile)(2) 后端服务2 Dockerfile (backend/service2/Dockerfile) Dockerfile 配置说明重要注意事项3. Nginx 配置(1) 主配置文件 (nginx/nginx.c…...
使用函数证明给定的三个数是否能构成三角形
问题描述 给定三条边,请你判断一下能不能组成一个三角形。 输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C。其中A,B,C <1000; 对于每个测试实例,如果三条边长A,B,C能组成三角形的话&#x…...

【数据结构】——二叉树堆(下)
一、堆中两个重要的算法 我们前面学习了树的概念和结构,还要树的一种特殊树--二叉树,然后我们学习了堆,知道了堆分为大堆和小堆,接下来我们就使用堆来进行一个排序。 在学习我们的堆排序前,我们先详细学习一下我们堆…...

t009-线上代驾管理系统
项目演示地址 摘 要 使用旧方法对线上代驾管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在线上代驾管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题…...
目标检测预测框置信度(Confidence Score)计算方式
预测框的置信度(Confidence Score)是目标检测模型输出的一个关键部分,它衡量了模型对一个预测框中包含特定类别对象的确定程度。 不同的目标检测模型(如Faster R-CNN、SSD、YOLO、DETR等)在计算置信度时有其特有的机制…...

【题解-洛谷】B4295 [蓝桥杯青少年组国赛 2022] 报数游戏
题目:B4295 [蓝桥杯青少年组国赛 2022] 报数游戏 题目描述 某班级男生人数为 X X X 人,女生人数为 Y Y Y 人,现全班同学围成一个圆圈,并按照顺时针方向为每名同学编号(从 1 1 1 到 X Y XY XY)。现给…...

Bootstrap项目 - 个人作品与成就展示网站
文章目录 前言一、项目整体概述1. 项目功能介绍1.1 导航栏1.2 首页模块1.3 关于我模块1.4 技能模块1.5 作品模块1.6 成就模块1.7 博客模块1.8 联系我模块 2. 技术选型说明 二、项目成果展示1. PC端展示1.1 首页1.2 关于我1.3 技能1.4 作品1.5 成就1.6 博客1.7 联系我 2. 移动端…...

新能源汽车霍尔线束介绍
新能源汽车作为传统燃油车的重要替代方案,其核心驱动系统依赖于高效、精准的电子控制技术。在这一体系中,霍尔线束作为关键传感器组件,承担着电机转速、位置信号的实时采集与传输任务,其性能直接影响整车动力输出的稳定性和能量利…...
2023网络应用专业-Python程序设计复习题目
2023技校网络应用专业-Python程序设计复习题目 须知: 个人信息要填写正确,在线答题时间不限,可以反复作答,次数不限,最后取最高分。 第一部分:单选题 1. 在Python交互模式下,输入下面代码: >>> “{0:.2f}”.format(12345.6789) 回车后显示的结果为: [单选…...
Termux可用中间人网络测试工具Xerosploit
Termux可用中间人网络测试工具Xerosploit。 Xerosploit 是一款基于 MITM 的本地网络渗透测试工具包。 食用方法: git clone https://github.com/LionSec/xerosploit cd xerosploit sudo python3 install.py 运行: sudo xerosploit 使用备注࿱…...

气镇阀是什么?
01、阀门介绍: 油封机械真空泵的压缩室上开一小孔,并装上调节阀,当打开阀并调节入气量,转子转到某一位置,空气就通过此孔掺入压缩室以降低压缩比,从而使大部分蒸汽不致凝结而和掺入的气体一起被排除泵外起此…...

SmolVLM2: The Smollest Video Model Ever(七)
编写测试代码与评价指标 现在的数据集里面只涉及tool的分类和手术phase的分类,所以编写的评价指标还是那些通用的,但是: predicted_labels:[The current surgical phase is CalotTriangleDissection, Grasper, Hook tool exists., The curre…...