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

Mybatis入门到精通

一:什么是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的键,它会自动来获取对应的值

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

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

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

怎么写:

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

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

相关文章:

Mybatis入门到精通

一&#xff1a;什么是Mybatis 二&#xff1a;Mybatis就是简化jdbc代码的 三&#xff1a;Mybatis的操作步骤 1&#xff1a;在数据库中创建一个表&#xff0c;并添加数据 我们这里就省略了 2&#xff1a;Mybatis通过maven来导入坐标&#xff08;jar包&#xff09; 3&#xff1a…...

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…...

CppCon 2015 学习:Beyond Sanitizers

Sanitizers&#xff0c;一类基于编译时插桩&#xff08;instrumentation&#xff09;的动态测试工具&#xff0c;用来检测程序运行时的各种错误。 Sanitizers 简介 基于编译时插桩&#xff1a;编译器在编译代码时自动插入检测代码。动态运行时检测&#xff1a;程序运行时实时…...

Mysql选择合适的字段创建索引

1. 考虑字段的选择性 选择性&#xff1a;字段的选择性是指字段中不重复值的比例。选择性越高&#xff08;即不重复值越多&#xff09;&#xff0c;索引的效率越高。 示例&#xff1a; 如果一个字段有100万行数据&#xff0c;但只有2个不重复值&#xff08;如性别字段&#xff…...

Python:操作 Excel 格式化

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

ant-design-vue select 下拉框不好用解决

将optionFilterProp设置为label和a-select-option的:label"item.name"自定义属性 <a-selectshowSearchallowClearoptionFilterProp"label"placeholder"请选择选项"style"width: 120px; margin-right: 16px"><a-select-optio…...

[Java 基础]创建人类这个类小练习

请根据如下的描述完成一个小练习&#xff1a; 定义一个名为 Human 的 Java 类在该类中定义至少三个描述人类特征的实例变量&#xff08;例如&#xff1a;姓名、年龄、身高&#xff09;为 Human 类定义一个构造方法&#xff0c;该构造方法能够接收所有实例变量作为参数&#xf…...

Day43 Python打卡训练营

作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 选取Kaggle上的CIFAR-10数据集进行CNN训练&#xff0c;并使用Grad-CAM进行可视化&#xff0c;代码将拆分为多个文件以保持模块化。CIFAR-10是…...

雷卯针对易百纳 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…...

LeetCodeHot100(图论篇)

目录 图论岛屿数量题目代码 腐烂的橘子题目代码 课程表题目代码 实现 Trie (前缀树)题目代码 后续内容持续更新~~~ 图论 岛屿数量 题目 给你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数…...

【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 "…...

Git Github Gitee GitLab

Git的工作流程 工作区(Workspace)&#xff1a;电脑本地目录&#xff0c;即平时存放项目代码的地方 暂存区(Index/Stage)&#xff1a;临时存放改动信息的地方 本地仓库(Repository)&#xff1a;存放所有提交的版本数据 远程仓库(Remote)&#xff1a;托管代码的服务器&#x…...

华为设备OSPF配置与实战指南

一、基础配置架构 sysname HUAWEI-ABR ospf 100 router-id 1.1.1.1area 0.0.0.0network 10.1.1.0 0.0.0.255 # 将接口加入区域0 interface GigabitEthernet0/0/1ospf enable 100 area 0.0.0.0 # 华为支持点分十进制区域号bandwidth-reference 10000 # 设置10Gbps参考带宽…...

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. 高性能浏览…...

vimadbgit命令

vim 全部选中 全选&#xff08;高亮显示&#xff09;&#xff1a;按esc后&#xff0c;然后ggvG或者ggVG 全部复制&#xff1a;按esc后&#xff0c;然后ggyG 全部删除&#xff1a;按esc后&#xff0c;然后dG -----------------------------------------------------------------…...

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

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

2506,wtl的通知事件

通知事件 最后一步,通知(连接)控件CMainDlg想要接受的浏览器控件触发的消息.连接在OnInitDialog(),断开在OnDestroy(). VC6中连接 VC6中,ATL的全局函数,AtlAdviseSinkMap()通知(连接)对话框中所有控件开始或终止发送事件到C对象. 该该函数的第一个参数是一个指向拥有事件映射…...

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&…...

深入理解CSS浮动:从基础原理到实际应用

深入理解CSS浮动&#xff1a;从基础原理到实际应用 引言 在网页设计中&#xff0c;CSS浮动&#xff08;float&#xff09;是一个历史悠久却又至关重要的概念。虽然现代布局技术如Flexbox和Grid逐渐流行&#xff0c;但浮动仍然在许多场景中发挥着重要作用。本文将带你深入理解…...

代码训练LeetCode(22)研究者H指数

代码训练(22)LeetCode之研究者H指数 Author: Once Day Date: 2025年6月4日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 274. H 指数 - 力扣&#xff08;LeetCode&#xff09;力扣 (LeetCode) 全球极客挚爱的…...

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

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

git cli 基于远程master分支创建本地分支并切换

1、获取远程最新状态 git fetch origin2、从远程master创建本地分支并切换 git checkout -b new-branch-name origin/master或者&#xff0c;新版本写法 git switch -c new-branch-name origin/master3、如果要推送到远程&#xff0c;并建立跟踪&#xff0c;执行下面的命令 …...

Redis初入门

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