Mybatis入门到精通

news2025/6/6 21:17:33

一:什么是Mybatis

二:Mybatis就是简化jdbc代码的

三:Mybatis的操作步骤

1:在数据库中创建一个表,并添加数据

我们这里就省略了

2:Mybatis通过maven来导入坐标(jar包)

3:编写Mybatis的核心配置文件

注意:引用类的时候用.,路径用//

5:编写Mapper.xml的配置文件(对应的实体类自己写)

5:加载配置文件

四:Mapper代理开发

原先我们执行sql语句的时候,要指定哪个sql语句,sql语句一多找起来很麻烦

现在用Mapper代理,就可以自动识别里面的sql语句,这样找起来更方便,就不用手动找了

1:放到同一目录下

2:映射文件命名空间为接口的全名,id就是这个sql语句的功能,对应的实体类就是你写的那个类

3:在Mapper接口中定义方法,方法名与映射文件中的id保持一致,返回值为List<text>(根据编写的sql语句的功能来)

4:进行编码

过程就是:

1:我们获取这个接口的class文件,他就在当前目录下找映射的命名空间与这个接口的全类名一致的映射文件

2:我们调用接口里面的方法,他就到对应的映射文件里面找到方法和id名字对应的sql语句,并封装对应的实体类,返回一个泛型集合,这个泛型根据实体类

接口的全类名对应映射文件的命名空间

接口里面的方法的名字对应映射文件的id

接口里面的方法的返回值对应映射文件的实体类

代理模式(aop):一个代理对应一个老板

我们去找代理,代理找老板

我们告诉代理要干什么,代理在通知老板要干什么

注意

使用指定包时

MyBatis 通过配置的路径直接解析 XML,再根据 namespace 找到对应的接口和id 绑定接口方法,与文件名无关

使用package代理时

XML 文件名必须与接口名一致 如接口 TextMapper.java 需对应 TextMapper.xml。若不一致,包扫描无法关联两者 

XML 需与接口同级目录 编译后,XML 必须位于 target/classes/com/yunlong/mapper/ 下

命名空间和 SQL id 要求不变 仍需匹配接口全限定名和方法名 

五:Mybatis核心配置文件

可以设置一个别名来简化对应的实体类代码的简写

类型别名简化

  • 未配置时:需在Mapper XML中写完整的类路径(如resultType="com.yunlong.pojo.User"
  • 配置后:只需写类名如resultType="User"

六:我们先解决数据库中的字段名和实体类中的成员的名字不一样导致不能封装

1:起别名

2:使用sql片段

3:使用resultmap进行映射

把数据库中的字段名和实体类中的成员的名字不一样进行映射,id就是实体类的名字(因为用的package进行代理,所以只需要写实体类的名字就可以了)

column:表的字段名,property:实体类的属性名

七:使用配置文件完成数据库的增删改查

增:

特殊字符处理:

我们是在xml文件里面写的,所以要符合xml文件的语法,如果遇到特殊字符我们使用以下几种方法

1:使用转义字符

2:CDATA区

多条件查询:

写参数的几种方法

1:散装参数

如果方法中有多个参数,那方法中的参数要使用@param("和sql语句的参数相同"),相当于占位符,这样他就知道传入sql语句的参数是哪个了,占位符和sql语句里面参数保持一致

2:使用对象传入,根据成员的参数依次传入,要求实体类的属性名名和sql语句中的参数名保持一致,对应的上就可以

3:使用键的对象传入,键的名字和sql语句参数的名字一致

动态条件查询

1:先判断传进来的属性值是否为空,在拼接sql语句

改进传入参数的bug

第一种:where后面加1=1

第二种:使用where标签

单条件的动态条件查询

从多个条件中选择一个条件查询,选择哪个将拼接哪个

如果用户一个都没选,那么将报错

choose:相当于java里面的switch

when相当于java里面的case

otherwise相当于java里面的default

改进方案:

1:加入一个otherswise如果用户什么都没选将会拼接这个

2:加入where标签也可以,如果用户什么都没选将会去掉where

添加:

代理:

映射文件:



测试类里面的代码

想要返回主键的值,在映射文件中增加这个,它就把id的值存入到了实体类的对象当中

修改:

利用set标签,避免最后一个用户不修改的话,导致语法错误

删除:

我们要批量删除,我们要遍历数组,map会将数组封装成一个map集合,我们写array就可以了,键是array,值为数组,利用键来遍历,或者使用注解

collection:我们要遍历的数组

item:遍历出来的数

separator:分隔符

open和close:开始和结束的标记

参数传递:

我们在方法中传递的参数,映射文件中参数是如何接收方法中传递的参数

单个参数:里面属性要和映射文件的参数的名称要保持一致

多个参数:将参数封装为map集合,键的名称固定的,值就是传过来的值,

我们通过键来获取值,通过注解我们就可以改变键的名称

我们想要传过来的参数在映射文件中使用,只有两种方法

1:使用默认的map的键

2:使用注解来改变map的键,来使用注解的形式

我们在映射文件的sql语句中我们要使用map的键,它会自动来获取对应的值

八:使用注解完成数据库的增删改查

使用注解开发就不需要写映射文件了,直接在代理的方法上面写注解就可以了

他就不找映射文件了,而是找方法上面对应的注解

怎么写:

一个核心配置文件代表多个数据库,可以切换

一个映射文件,代理,实体类代表数据库中的一张表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2399524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity性能优化笔记

降低Draw Call 降低draw call&#xff08;unity里叫batches&#xff09;的方法有&#xff1a; 模型减少材质&#xff1b; 多模型共用材质&#xff1b; 烘焙灯光&#xff1b; 关闭阴影和雾&#xff1b; 遮挡剔除&#xff1b; 使用LOD&#xff1b; 模型减少材质 > 见…

BERT vs Rasa 如何选择 Hugging Face 与 Rasa 的区别 模型和智能体的区别

我在之前的一篇文章中提到我的短期目标的问题&#xff0c;即想通过Hugging Face的BERT或Rasa搭建一个简单的意图识别模型&#xff0c;针对发票业务场景来展示其效果 [如&#xff1a;开发票、查询发票]。 开篇&#xff0c;有必要记录几个英文缩写或术语 &#xff08;如果喜欢&a…

Excel 重复项标记,删除重复项时出现未响应的情况

目录 一、重复值标记&#xff1a; 二、删除重复值&#xff1a; 三、未响应问题 一、重复值标记&#xff1a; 方法1&#xff1a;开始 》条件格式 》突出显示单元格规则 》重复值 》设置颜色 》确定 PS&#xff1a;样式可自定义&#xff08;边框、字体、背景填充...&#xff0…

Python:操作 Excel 格式化

🔧Python 操作 Excel 格式化完整指南(openpyxl 与 xlsxwriter 双方案) 在数据处理和报表自动化中,Python 是一把利器,尤其是配合 Excel 文件的读写与格式化处理。本篇将详细介绍两大主流库: openpyxl:适合读取与修改现有 Excel 文件xlsxwriter:适合创建新文件并进行复…

雷卯针对易百纳 SS524多媒体处理演示评估板防雷防静电方案

一、 应用场景 1. 远程视频会议 2. 安防监控 3. 人/车检测 4. 人脸检测、比对 5. 屏幕拼接墙 二、 功能概述 1 四核 ARM Cortex-A7 1.2GHz 2 AI算力 1.0Tops 3 4K30fps 4*1080P30编解码 三、 扩展接口 l RAM&#xff1a;板载 2*DDR4&#xff0c;共 2GB&#xff1b; …

【BUG解决】关于BigDecimal与0的比较问题

这是一个很细小的知识点&#xff0c;但是很容易被忽略掉&#xff0c;导致系统问题&#xff0c;因此记录下来 问题背景 明明逻辑上看a和b都不为0才会调用除法&#xff0c;但是系统会报错&#xff1a;java.lang.ArithmeticException异常&#xff1a; if (!a.equals(BigDecimal…

Spring Bean 为何“难产”?攻克构造器注入的依赖与歧义

本文已收录在Github&#xff0c;关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; &#x1f680; 魔都架构师 | 全网30W技术追随者&#x1f527; 大厂分布式系统/数据中台实战专家&#x1f3c6; 主导交易系统百万级流量调优 & 车联网平台架构&a…

【Lecture01】动手开发科研智能体(WIN11系统)

1. 配置win11系统中的环境&#xff0c;安装管理器Choco&#xff1a; # Download and install Chocolatey: powershell -c "irm https://community.chocolatey.org/install.ps1|iex" # Download and install Node.js: choco install nodejs-lts --version"22&qu…

“packageManager“: “pnpm@9.6.0“ 配置如何正确启动项目?

今天在学习开源项目的时候&#xff0c;在安装依赖时遇到了一个报错 yarn add pnpm9.6.0 error This projects package.json defines "packageManager": "yarnpnpm9.6.0". However the current global version of Yarn is 1.22.22.Presence of the "…

Paraformer分角色语音识别-中文-通用 FunASR

https://github.com/modelscope/FunASR/blob/main/README_zh.md https://github.com/modelscope/FunASR/blob/main/model_zoo/readme_zh.md PyTorch / 2.3.0 / 3.12(ubuntu22.04) / 12.1 Paraformer分角色语音识别-中文-通用 https://www.modelscope.cn/models/iic/speech_p…

Spitfire:Codigger 生态中的高性能、安全、分布式浏览器

Spitfire 是 Codigger 生态系统中的一款现代化浏览器&#xff0c;专为追求高效、隐私和分布式技术的用户设计。它结合了 Codigger 的分布式架构优势&#xff0c;在速度、安全性和开发者支持方面提供了独特的解决方案&#xff0c;同时确保用户对数据的完全控制。 1. 高性能浏览…

运行shell脚本时报错/bin/bash^M: 解释器错误: 没有那个文件或目录

Windows的换行符为\r\n&#xff0c;而linux换行符为\n。先查看一下文件是什么格式的 :set ff --查询一下格式是什么 由于使用nodepad新建的脚本&#xff0c;首选项中格式设置成了windows&#xff0c;上传到linux中报错。 解决方法 1、nodepad中【设置》首选项】修改为unix&am…

Shiro安全权限框架

①、添加依赖 ②、创建ini文件 获取权限相关信息可以通过数据库获取&#xff0c;也可以通过ini配置文件获取 ③、认证代码 public class ShiroRun{public static void main(){//初始化获取SecurityManagerIniSerucityManagerFactory factory new IniSecurityManagerFac…

虚拟现实教育终端技术方案——基于EFISH-SCB-RK3588的全场景国产化替代

一、VR教育终端技术挑战与替代价值 ‌实时交互性能瓶颈‌ 赛扬N100/N150仅支持3DOF渲染&#xff08;延迟&#xff1e;25ms&#xff09;&#xff0c;动态手势识别帧率≤15FPS&#xff0c;难以满足6DOF教学场景需求RK3588 Mali-G610 GPU支持6DOF空间渲染&#xff08;延迟≤12ms&…

网络安全A模块专项练习任务五解析

任务五:Linux 操作系统安全配置-1 任务环境说明: ✓ 服务器场景:LinuxServer:(开放链接) ✓ 用户名:root&#xff0c;密码:123456 ✓ 数据库用户名:root&#xff0c;密码:123456 请对服务器 LinuxServer 按要求进行相应的设置&#xff0c;提高服务器的安全性。 1.设置最小…

Redis初入门

Nosql&#xff1a;Not-Only SQL&#xff08;泛指非关系型数据库&#xff09;&#xff0c;作为关系型数据库的补充 作用&#xff1a;应对基于海量用户和海量数据前提下的数据处理问题 redis&#xff1a;C语言开发的一个开源的高性能键值对数据库 特征&#xff1a; 1、数据之…

(10)Fiddler抓包-Fiddler如何设置捕获Firefox浏览器的Https会话

1.简介 经过上一篇对Fiddler的配置后&#xff0c;绝大多数的Https的会话&#xff0c;我们可以成功捕获抓取到&#xff0c;但是有些版本的Firefox浏览器仍然是捕获不到其的Https会话&#xff0c;需要我们更进一步的配置才能捕获到会话进行抓包。 2.环境 1.环境是Windows 10版…

使用pandas实现合并具有共同列的两个EXCEL表

表1&#xff1a; 表2&#xff1a; 表1和表2&#xff0c;有共同的列“名称”&#xff0c;而且&#xff0c;表1的内容&#xff08;行数&#xff09;<表2的行数。 目的&#xff0c;根据“名称”列的对应内容&#xff0c;将表2列中的“所处行业”填写到表1相应的位置。 实现代…

2025年- H69-Lc177--78.子集(回溯,组合)--Java版

1.题目描述 2.思路 3.代码实现 class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> resnew ArrayList<>();List<Integer> curnew ArrayList<>();//从索引0开始递归backtracking(res,cur,nums,0…

目标检测任务的评估指标mAP50和mAP50-95

mAP50 和 mAP50-95 是目标检测任务中常用的评估指标&#xff0c;用于衡量模型在不同 交并比&#xff08;IoU&#xff09;阈值 下的平均精度&#xff08;Average Precision, AP&#xff09;。它们的区别主要体现在 IoU 阈值范围 上。 ✅ 1. mAP50&#xff08;mean Average Prec…