Mybatis操作数据库(注解+xml两个方式)

文章目录

  • 1.个人回顾
  • 2.关于mybatis注解的说明
  • 3.字段和属性不匹配的解决方案
    • 3.1第一个方案
    • 3.2第二个方案
    • 3.3第三个方案
  • 4.xml路径配置
  • 5.xml里面的字段映射

1.个人回顾

刚刚翻看了一下自己的这个之前写的博客,上一次和这个javaee相关的博客还是去年写的,也就是2024年的12.23号,这个还是一个非常久远的日子,我上个学期还是学习的java,是从10月底开始学习的,之后学习的这个日程就拉的比较满,所以这个进度很快,但是后来做了这个网页端的五子棋对战的这个项目(废弃中),因为这个做到设计棋盘的时候这个技术看不懂,而且这个效果没做出来,所以后来也没做了(其实这个项目里面很多功能还没实现,包括这个网络版本的对战);

然后就继续去学习了这个Mybatis的日志相关的这个内容,包括这个注解是如何去使用的等等吧,但是后来好像有没学了,当时是想着跨专业考验的,去学习了这个自动控制原理的内容,java就没咋学习了;

即使是后面的这个寒假,我也是在作这个鱼皮的项目:一个是用户管理中心(我觉得这个项目适合入手,让我了解了一下这个整体的逻辑,但是我觉得鱼皮的这个课程不是很好,我无法接受的就是最后的一点,他的这个系统做出来之后,非要去添加这个星球的编号这个属性相当于就是去修改这个实体类,这个后果就是所有的东西都需要变,这个就比较恶心,因为我觉得这个需求分析结束之后,这个开发的过程中是不应该去修改我们的这个需求的,所以当他最后去添加这个星球编号的属性的时候,我就真的无法接受,而且我觉得当时最开始在前端的那个umi和vue的时候,也耽误了很长的时间,现在回想起来,那些都是没有必要的,我觉得);

寒假的时候,包括开学之后,都是在学习这个算法(蓝桥杯准备的——,大部分时间在学习是这个数学建模的相关内容,自己创建了一个知识星球,一直在搞这个内容,运营自己的星球,反正就是尝试了很多的这个内容,对于这个鸢尾花书也比较感兴趣,也写了不少的关于这个部分内容的文章;

前段时间准备实习简历,花了三天的时间水了一个SSM项目–论坛系统,虽然好多东西都不会,但是也用自己的云服务器把那个项目上限了,补了好多关于项目里面的技术点,但是毕竟是突击吗嘛,掌握的也不咋地,但是面试的时候老师也没有问相关的内容,我也觉得这个就是一个破网站,都可以用微信交流,谁会去用这个论坛,一点实际意义也没有,可能,只有教学的意义吧~~

但是我昨天和数学建模的线下聊天,我确实真切的体会到,兴趣毕竟是兴趣,我在这个数学建模上面投入再大的时间,他终究无法帮助我找到好工作,工作,吃饭的这个事情还是要看这个java的技术水平,我之前的这个路线上面确实出现了问题;

但是我不后悔,我认为没有什么对与不对,自己喜欢就好,后面还是老老实实的学习java吧,毕竟这个学期是自己学习这个java的最后的一段时间了;

2.关于mybatis注解的说明

注解的话,是我们的springboot项目里面的很重要的一个部分,因为我们在进行这个项目的开发的这个过程里面,经常会使用到很多的这个注解,但是这个毕竟是为了解决我们的Mybatis框架里面的这个查询的问题;

其实解决的这个查询的问题,或者说想要实现这个功能,我们既可以使用这个注解的方式,也是可以使用这个文章后半部分的这个xml的方式;

下面我们使用这个@select这个注解作为我们的案例,进行注解的使用的相关的这个说明,我们的下面的这个方法想要实现的这个功能就是查询我们的这个数据库里面的这个表的用户的相关信息,queryUserList就是我们定义的这个方法,注解后面的这个括号里面的内容实际上就是我们的navicate里面的这个想啊哈寻得语句,我们可以在这个navicate这样的工具里面进行测试之后,没问题的话放到这个注解的内容里面去即可;

这个事进行的数据库表里面的字段内容的查询,其他的几个方法也是类似的;

image-20250323112558024

3.字段和属性不匹配的解决方案

这个是什么情况下会遇到呢?我们为什么会遇到这样的这个问题:

1)java里面主要的这个命名的规范就是驼峰命名;

2)数据库里面的这个字段经常使用我们的这下划线分割(例如这个字段的删除时间,deletetime在java里面就是deleteTime,在我们的数据库里面就是deleteTime,因此代码里面就会出现无法识别;

类似于这个username,password之类的,这个就是很容易对应上的,这样的这个字段一般情况下也不会遇到很大的对应问题,因此这个问题主要是出现在组合的属性字段上面;

3.1第一个方案

第一个解决方式:

查询SQL语句的重新命名,就是我们进行这个select delete_time as deleteTime from userinfo,这样进行重命名,通过这个as把我们的数据库里面的字段和我们的java里面的这个实体类的这个不同之处解决掉这样就可以解决这个不匹配的问题;

其实如果无法识别的结果就是测试的时候打印出来的就是null这样的数据罢了,但是其实在我们的数据库里面是存在这个具体的数据的;

3.2第二个方案

第二个解决方式:定义results这个注解,里面是我们需要进行说明备注的这个注解,column表示的就是这个字段在数据库里面的名字,后面的property就是在我们的实体类里面的名字这样对应上就可以了;

image-20250323115030391

3.3第三个方案

第三个解决的方式:配置文件里面添加上下面的这个自动驼峰转换的配置,就可以自动解决这个两者之间不匹配的问题;

image-20250323115005283

4.xml路径配置

就是在我们的yml配置文件里面去写这个xml路径的地址,也就是这个location

classpath就是对于哦们的这个xml文件的路径进行指定,mapper就是我们的文件夹的名字,*就是通配符,表示使用mapper.xml文件名结尾的文件,我们的这个UserInfoXmlMapper就是符合这个要求的;

如果你的这个mapper里面涉及复杂结构,可以使用**也就是两个星号作为通配符,这个表示的就是两层或者是多层目录的这个情况;

image-20250323123811309

5.xml里面的字段映射

定义相关的方法:在我们的这个mapper里面直接定义即可,下面使用删除和查询作为示例,其实写完方法之后,没有在xml里面去说明,就会报红线,我们点击这个statement就可以默认添加方法;

image-20250323123905115

下面是我们的这个resource下面的这个xml具体的写法和一些相关的这个注意事项;

namespace就是指定这哦xml文件的位置,这个是用的类似于Html双标签的方法,delete和select不同的地方就是多了这个resulttype就是实体类的问题,因为我们返回的是对象,需要说明一下是什么对象,所以自动生成的这个代码里面出现了这个resultType进行指定;

image-20250323123931066

下面的这个就是xml里面的这个字段映射的另外一个实现的方法途径:这个事和我们的注解不同的地方,他这个里面的resultMap就是我们自己定义的,然后我们再这个最上面的需要进行说明,也就是下面的这个代码里面的5-10行,这个第五行里面的id就是我们的这个低21行里面的resultMap的名字,这个type就是我们的实体类里面的位置;

6-9行里面的内容是我们的这个逐渐和属性说明,其中这个主键不是一定要有的,但是其他的几个都是一定需要的;

Map的名字,这个type就是我们的实体类里面的位置;

6-9行里面的内容是我们的这个逐渐和属性说明,其中这个主键不是一定要有的,但是其他的几个都是一定需要的;

image-20250323143504471

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

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

相关文章

SysVinit和Systemd的系统运行级别

Linux运行级别 SysVinit系统(init守护进程)Linux系统运行级别SysVinit系统(init守护进程)查看Linux运行级别SysVinit系统(init守护进程)修改运行级别: Systemd守护进程Linux系统运行级别systemd查看运行级别Systemd查看系统当前运行级别 systemd修改运行级别multi-u…

Mysql-经典实战案例(11):深度解析Sysbench压测(从入门到MySQL服务器性能验证)

引言 如何用Sysbench压测满足mysql生产运行的服务器? Sysbench返回的压测结果如何解读? 别急,本文会教大家如何使用并且如何解读压测的结果信息,如何对mysql服务器进行压测! 一、Sysbench核心功能全景解析 1.1 工…

vscode终端不识别npm 无法解析npm

vscode 用以管理员打开识别npm vscode 用普通用户打开不识别npm 刚换了一台新电脑,寻思安装各种环境,一顿操作猛如虎,当最后一个打开vscode后,运行项目发现,新建终端>npm run dev 无法识别。 在cmd 中 打node -…

springboot body 转对象强验证属性多余属性抛错误

在Spring Boot中,当使用RequestBody注解来接收HTTP请求中的JSON数据并将其转换为Java对象时,Spring默认会忽略额外的属性。这意味着如果发送的JSON包含一些目标对象中没有定义的属性,Spring不会报错,这些额外的属性会被简单地忽略…

01. Linux嵌入式系统学习笔记(一)(linux基础指令)

一. linux基础操作指令 1. 新建文件和目录 (1) 新建文件 touch 命令:用于创建空文件。 touch filename.txt 如果文件已存在,touch 会更新文件的访问时间和修改时间。 (2) 新建目录 mkdir 命令:用于创建目录。 mkdir directoryname 使…

Java 列表复制与对象引用

Java 列表复制与对象引用 一、知识点 1. 对象引用的基本概念 在 Java 中&#xff0c;List<School> 这样的集合存储的并不是真正的对象&#xff0c;而是对象的“地址”&#xff08;引用&#xff09;。就好比你有一个文件柜&#xff0c;文件柜里放的不是文件本身&#x…

如何理解 Apache Iceberg 与湖仓一体(Lakehouse)?

一、什么是湖仓一体&#xff08;Lakehouse&#xff09;&#xff1f; 湖仓一体是一种融合了数据湖的灵活存储能力与数据仓库的高效分析功能的现代数据架构。它通过整合两者的优势&#xff0c;解决了传统架构的局限性&#xff0c;为企业数据处理提供了更全面的解决方案。 数据湖…

Android面试总结之Android RecyclerView:从基础机制到缓存优化

引言 在 Android 开发中&#xff0c;RecyclerView是高效展示列表数据的核心组件。其强大的性能源于独特的视图复用机制和四级缓存体系。本文将结合源码与示例&#xff0c;带你深入理解RecyclerView的工作原理与优化策略。 核心组件 RecyclerView&#xff1a;作为容器视图&am…

【鸿蒙开发】Hi3861学习笔记- TCP客户端

00. 目录 文章目录 00. 目录01. TCP概述02. TCP应用场景03. TCP和UDP比较04. TCP相关API05. TCP编程流程06. 硬件设计07. 软件设计08. 实验现象09. 附录 01. TCP概述 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接、可靠的传输层协议&#xff0c;旨…

【负载均衡系列】Keepalive

一、Keepalived 的核心功能 Keepalived 是一款用于实现 ​高可用(HA)​ 和 ​负载均衡 的开源工具,核心基于 ​VRRP(Virtual Router Redundancy Protocol)​ 协议,工作在网络四层(传输层)和七层(应用层)。 主要用途: 通过虚拟IP(VIP)实现服务高可用(主备切换)。…

2025-03-25 学习记录--C/C++-PTA 习题9-3 平面向量加法

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 习题9-3 平面向量加法 本题要求编写程序&#xff0c;计算两个二维平面向量的和向量。 输入格式: ❀ 输入在…

23种设计模式-桥接(Bridge)设计模式

桥接设计模式 &#x1f6a9;什么是桥接设计模式&#xff1f;&#x1f6a9;桥接设计模式的特点&#x1f6a9;桥接设计模式的结构&#x1f6a9;桥接设计模式的优缺点&#x1f6a9;桥接设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是桥接设计模式…

python:music21 构建 LSTM+GAN 模型生成爵士风格音乐

keras_lstm_gan_midi.py 这是一个结合 LSTM 和 GAN 生成爵士风格音乐的完整Python脚本。这个实现包含音乐特征提取、对抗训练机制和MIDI生成功能&#xff1a; import numpy as np from music21 import converter, instrument, note, chord, stream from tensorflow.keras.mode…

go:前后端分离

1.前端代码 新建一个前端文件夹&#xff0c;在该文件夹下新建一个.html文件&#xff0c;写入自己的html代码。 前端搞定。 2.后端代码 其核心是挂载路由接受前端传来的数据核心代码如下&#xff1a; func main() { // 服务运行提示 fmt.Println("go web server is runn…

大数据学习(86)-Zookeeper去中心化调度

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…

JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南&#xff0c;你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像 解压出.img文件并记下它在计算机上的…

HTML5 拖放(Drag and Drop)学习笔记

一、HTML5 拖放简介 HTML5 拖放&#xff08;Drag and Drop&#xff09;是HTML5标准的一部分&#xff0c;允许用户抓取一个对象并将其拖动到另一个位置。拖放功能在现代网页中非常常见&#xff0c;例如文件上传、任务管理、布局调整等场景。 HTML5 拖放功能支持以下浏览器&…

文件I/O--C++的文件操作

一、打开文件&#xff0c;从文件中读取、写入文件 从文件中读取数据&#xff1a; #include<fstream> //fstream File stream:文件流 #include<iostream> //fstream包含了 iostream&#xff0c;所以这句可以省略&#xff0c;现在不能了 using namespace std;i…

Redis GEO 命令详解:轻松实现“附近的人“功能

目录 引言 Redis GEO命令概述 什么是GEO命令&#xff1f; 主要命令详解 命令应用示例 添加地点信息 查询两地距离 查询附近的城市 实现"查找附近的人"功能 功能需求与实现思路 基本需求 实现思路 命令实现方案 存储用户位置 查询附近的用户 Java代码实…

C语言贪吃蛇实现

When the night gets dark,remember that the Sun is also a star. 当夜幕降临时&#xff0c;请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…