MyBatis的基本使用

news2024/11/18 19:35:45

MyBatis

为啥MyBatis会使用xml

在一个程序中,若需要操作数据表,那么 SQL 语句有两种存放方式:1. 放到 Java 类里面(这个就存在大量的字符串拼接,还有占位符需要处理-----JDBC);2:放到 xml 中(但是 xml 无法被 Java 代码调用的,所以就在 Java代码和 xml 中加了一层 对xml中方法的接口声明)

image-20230201102331856

MyBatis的基本使用

MyBatis 就是一个ORM(对象关系映射)框架,将数据库中的每张表映射成Java中的类,以此可以使用OOP思想来操作数据表了

程序启动时,@Mapper注解会根据配置文件里配置的mybatis路径+命名来讲接口与xml文件进行关联,并将@Mapper注解修饰的接口放入Spring中

配置数据库连接 + MyBatis 的 xml 存放路径 + 命名格式(xml中存放的就是数据表的操作语句)

image-20230115144955108

@Mapper

@Mapper注解比较特殊,虽然是修饰接口的,但是也能将其放入Spring中,然后使用@Autowired进行注入,并直接当作对象来调用其中的方法

image-20230201133703826

查询

  1. 创建一个接口

    image-20230201103355657

  2. 新建一个 xml 文件,来实现接口中的方法

    image-20230201104340105

带参数查询

image-20230201134800624

添加

默认返回受影响的行数,若需要返回自增主键的ID,需要给 Insert 设置参数 useGeneratedKeys=“true” keyProperty=“id”;将会把自增主键的值放入id列,直接对象的 getId 即可拿到

image-20230201152237037

image-20230201152246021

删除

image-20230201153629458

修改

image-20230201154448489

参数传递中#{} 与 ${}的区别

  • #{}:预编译处理(MyBatis 在处理 #{} 的时候,会将其替换为 ? ,底层还是使用 PrepareStatement 的 set 方法进行填充的)

  • ${}:直接替换(在判断字符串的时候,就会出问题,除非自己手动添加 引号)这个可以用在参数为关键字的时候,如:线上购物的时候,可以选择价格由低到高,由高到低;这个就需要传递 SQL 关键字了,desc / asc;就可以采用这种方式

    image-20230202102809273

SQL注入问题

${} 就存在 SQL 注入问题,它是直接 数值替换的

#{} 就不会存在SQL注入问题,它采用的就是 占位符的方式

image-20230202133715758

image-20230202133830202

like模糊查询

使用 MySQL 内置函数 concat

image-20230214152920290

resultMap

当数据表中的字段名与 类 中的属性名不同时,可以用 resultMap标签来进行映射(只要有一个字段不同,那么所有的字段都需要写,不然多表查询会存在问题)

image-20230202135632869

多表查询

一个讨巧的办法:在一个主要的实体类中,加另外需要的属性名

如下:显示文章表的所有信息(uid 是一个外键,表示用户表的id),需要讲 作者名字 显示出来

image-20230202141619405

动态SQL

主要用于处理表单的必填和选填的时候

当前端没有传递参数的时候,对应的字段就不应该插入值,这就可以用动态SQL来解决了(不需要写多条SQL语句,根据不同的情况调用不同的SQL语句,动态SQl一条语句解决全部的情况)

image-20230214153847474

if 标签

用作某个字段是否拼接上

trim标签

参数:prefix 前缀(语句最前面加的东西) suffix 后缀(语句最后面加的东西)

​ prefixOverrides(将最前面包含的东西去掉) suffixOverrides(将最后面包含的东西去掉)

image-20230214155950459

where标签

在指定字段进行筛选的时候,就可以用where标签(如:若输入了姓名来查就表示需要where条件;什么都没有输入的情况下,就表示查询所有,就不要where条件)虽然直接加where 1 = 1也可以解决,但并不直观

where 标签默认会去掉筛选条件最前面的 and

image-20230214161256861

相当于 标签

image-20230214161551274

set 标签

主要用于 update 语句中

作用:

  1. 添加 set 关键字
  2. 去掉最后一个逗号

image-20230214162001979

foreach标签

为了处理批量删除的情况,如果前端传过来的是一个集合,需要进行批量操作,就用foreach

collections 就是 接口中的参数名 separator 就是分隔符

item 就是遍历的当前对象 就相当于把 list 构造成:(1,2,3)的形式

进行批量操作,就用foreach

collections 就是 接口中的参数名 separator 就是分隔符

item 就是遍历的当前对象 就相当于把 list 构造成:(1,2,3)的形式

image-20230214163628632

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

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

相关文章

TypeScript深度剖析: TypeScript 装饰器的理解?应用场景?

面试官:说说你对 TypeScript 装饰器的理解?应用场景? 一、是什么 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上 是一种在不改变原类和使用继承的情况下&#…

程序员中的女性力量——做不被定义的自己

她是office lady,亦是程序媛,程序员界的靓丽色彩,不可或缺。 “只有那些疯狂到以为自己能够改变世界的人——才能真正改变世界。” 女性该如何定义自己?程序媛怎么发挥自己最大的价值。 争取自己做选择,经济和思想都独…

Spring基础与创建

目录 前言 Spring基础与核心概念 Spring是什么 1、什么是容器 2、什么是IoC 3、理解SpringIoC 4、DI(依赖注入) Spring的创建和使用 1、创建Spring项目 1.1、创建一个普通Maven项目 1.2、添加Spring框架支持 1.3、添加启动类和main方法 2、…

【c++】:STL模板中string的使用

文章目录 STL简介一.认识string二.string中基本功能的使用总结STL简介 STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL的版本 原始版本 Alexand…

15_MySQL存储过程与存储函数

MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可。1. 存储过程概述1.1 理解含义:存储过程的英文是 Stored Pro…

JDK8新特性宝典

JDK8新特性 ​ Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台 课程内容的介绍 了解Java发展史Lambda表达式…

[深入理解SSD系列 闪存2.1.5] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现

前言 上面是我使用的NAND FLASH的硬件原理图,面对这些引脚,很难明白他们是什么含义, 下面先来个热身: 问1. 原理图上NAND FLASH只有数据线,怎么传输地址? 答1.在DATA0~DATA7上既传输数据,又传输地址 当ALE为高电平时传输的是地址, 问2. 从NAND FLASH芯片手册可知,要…

Apache DolphinScheduler GitHub Star 突破 10000!

点击蓝字 关注我们今天,Apache DolphinScheduler GitHub Star 突破 10000,项目迎来一个重要里程碑。这表明 Apache DolphinScheduler 已经在全球的开发者和用户中获得了广泛的认可和使用。DolphinScheduler 旨在解决公司日常运营中的大数据处理工作流调度…

Redis之持久化操作

目录 一、简介 二、RDB 1、自动触发 2、手动触发 3、RDB 的优点和缺点 三、AOF 1、AOF的工作流程 2、AOF的配置 3、AOF的优点和缺点 4、俩种持久化的方式如何选择? 一、简介 1、什么是持久化? 持久化是指将内存中的数据同步到磁盘中&#xf…

策略模式详解

文章目录策略模式(行为模式)1. 策略模式介绍2. 好处3. 场景案例4. 案例源码1. 代码结构2. 榜单服务接收消息入口3. 基础任务类4. 定义策略模式转发的规范5. 代理的第一层6. 代理的第二层抽象父类:定义视频聊榜单代理规范7. 代理的第二层实现子…

elasticsearch自定义企业词典

我们中文分词用的是ik,但是ik只是对基本的中文词进行了分词,而对于企业或者人名没有进行分词。比如,我搜索中国平安,那么ik只能分成中国、平安如果这样,这肯定是不行滴!接下来,俺就教你&#xf…

历史上被发现的第一个真正的Bug - Grace Hopper

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

【bug】antd全局的主题色样式被覆盖,被修改为`antd`默认的主题色

背景: 项目本身修改了主题色,配置如下: // umi配置文件 export default {theme: {primary-color: #2F54EB, // 全局主色}, };需要对图片上传组件做封装,并在项目中统一引用,如下 import { TdsUpload } from tdsComponents;环境信息 node tiandstiandsdeMacBook…

【JavaEE】前后端分离实现博客系统(页面构建)

文章目录1 效果展示1.1 博客登录页面1.2 博客列表页面1.3 博客详情页面1.4 博客编辑页面2 页面具体实现2.1 博客列表页的实现2.2 博客详情页的实现2.3 博客登录页面的实现2.4 博客编辑页面的实现写在最后1 效果展示 1.1 博客登录页面 用于实现用户的登录功能,并展…

2023年3月西安/杭州/深圳/东莞NPDP产品经理认证考试报名

产品经理国际资格认证NPDP是国际公认的唯一的新产品开发专业认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年…

什么是量子计算?

什么是量子计算? 量子计算机仍处于起步阶段,正在影响已经在经典计算机上运行的新一代模拟,现在使用 NVIDIA cuQuantum SDK 进行加速。 在史蒂夫乔布斯 (Steve Jobs) 推出可以放入口袋的计算机之前 27 年,物理学家保罗贝尼奥夫 (P…

[MySQL核心]2.select单表查询常见操作

MySQL核心--select单表查询常见操作select单表查询常见操作关于通配符*的使用结合MySQL运算符去重distinct空值查询union合并查询带in子查询(重点)limit分页查询排序order by分组group by笔试实践问题(新浪)select单表查询常见操作 关于通配符*的使用 项…

记录实现操作系统互斥锁的一次思考

今天实现操作系统互斥锁的时候遇到一个有趣的问题。 场景 有两个进程分别名为 taskA,taskB,采取时间片轮转的方式交替运行——也即维护了一个 ready_queue,根据时钟中断来 FIFO 地调度任务。它们的任务是无限循环调用 sys_print() 来打印自…

华为OD机试题,用 Java 解【用户调度问题】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

Java基础常识

目录 JDK和JRE和JVM分别是什么?有什么关系? 什么是字节码,采用字节码的好处是什么 ? Java 程序从源代码到运行的过程 为什么 Java语言"编译与解释并存" Java 和 C、Go 语言的区别,各自的优缺点? JDK和JRE和JVM分别是什么?有什么关系…