MyBatis(二)

news/2024/5/6 3:03:22/文章来源:https://blog.csdn.net/weixin_49883619/article/details/127055143

视频链接:https://www.bilibili.com/video/BV1bu411z77K/?vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P70— P101

文章目录

  • 1.#{}和${}
    • 1.1 #{} 占位符
    • 1.2 ${} 字符串拼接或字符串替换
  • 2.返回主键
    • 2.1 业务需求
    • 2.2 代码实现
  • 3.UUID的用法
  • 4.动态sql
    • 4.1 < sql >和< include >
    • 4.2 < if >和< where >
    • 4.3 < set >
    • 4.4 < foreach >
      • 4.4.1 查询实现
      • 4.4.2 批量删除
      • 4.4.3 批量增加
      • 4.4.4 批量更新
    • 4.5 指定参数位置
    • 4.6 入参是map【重点掌握】
    • 4.7 返回值是map
      • 4.7.1 返回值是一行
      • 4.7.2 返回值是多行
    • 4.8 列名与类中成员变量名称不一致

1.#{}和${}

  • #{}是对非字符串拼接的参数的占位符,如果入参是简单数据类型,#{}里可以任意写,但是如果入参是对象类型,则#{}里必须是对象的成员变量的名称, # {}可以有效防止 sql注入。
  • $ {} 主要是针对字符串拼接替换,如果入参是基本数据类型,$ {}里必须是value,但是如果入参是对象类型,则$ {}里必须是对象的成员变量的名称。$ {}还可以替换列名和表名,存在sql注入风险,尽量少用。

1.1 #{} 占位符

传参大部分使用#{}传参,它的底层使用的是PreparedStatement对象,是安全的数据库访问,防止sql注入,#{}里如何写,看parameterType参数的类型

  1. 如果parameterType的类型是简单类型(8种基本(封装)+String),则#{}里随便写.

在这里插入图片描述

  1. parameterType的类型是实体类的类型,则#{}里只能是类中成员变量的名称,而且区分大小写,

在这里插入图片描述

1.2 ${} 字符串拼接或字符串替换

字符串拼接:一般用于模糊查询中.建议少用,因为有sql注入的风险.也分两种情况,同样的看parameterType的类型
A.如果parameterType的类型是简单类型,则${}里随便写,但是分版本,如果是3.5.1及以下的版本,只以写value.
在这里插入图片描述

B.如果parameterType的类型是实体类的类型,则${}里只能是类中成员变量的名称.(现在已经少用)
C.优化后的模糊查询(以后都要使用这种方式)
在这里插入图片描述

在这里插入图片描述

字符串替换:
需求:模糊地址或用户名查询
在这里插入图片描述
对于上面的SQL语句只有两个地方不一样,代码过于重复

定义接口方法:
在这里插入图片描述

在这里插入图片描述
测试:
在这里插入图片描述

2.返回主键

2.1 业务需求

在这里插入图片描述

2.2 代码实现

在插入语句结束后,返回自增的主键值到入参的users对象的id属性中.
在这里插入图片描述
效果:
在这里插入图片描述
在这里插入图片描述

3.UUID的用法

这是一个全球唯一字符串,由36个字母数字中划线组.
在这里插入图片描述
在这里插入图片描述

4.动态sql

动态sql:可以定义代码片断,可以进行逻辑判断,可以进行循环处理(批量处理),使条件判断更为简单.

4.1 < sql >和< include >

< sql >:用来定义代码片断,可以将所有的列名,或复杂的条件定义为代码片断,供使用时调用.
< include >:用来引用< sql >定义的代码片断.

在这里插入图片描述

4.2 < if >和< where >

< if >:进行条件判断
< where >:进行多条件拼接,在查询,删除,更新中使用.

代码实现:

在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 < set >

有选择的进行更新处理,至少更新一列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4 < foreach >

用来进行循环遍历,完成循环条件查询,批量删除,批量增加,批量更新.

< foreach >参数详解:

  • collection:用来指定入参的类型,如果是List集合,则为list ,如果是Map集合,则为map ,如果是数组,则为array,
  • item:每次循环遍历出来的值或对象
  • separator:多个值或对象或语句之间的分隔符
  • open :整个循环外面的前括号
  • close:整个循环外面的后括号

4.4.1 查询实现

直接SQL语句执行:
在这里插入图片描述
实现接口方法:
在这里插入图片描述
实现:

在这里插入图片描述
测试:
在这里插入图片描述

效果展示:
在这里插入图片描述

4.4.2 批量删除

接口:
在这里插入图片描述
实现:
在这里插入图片描述
测试:
在这里插入图片描述

4.4.3 批量增加

SQL语句为:
在这里插入图片描述
接口方法:
在这里插入图片描述
实现:
在这里插入图片描述
测试:
在这里插入图片描述
效果:
在这里插入图片描述

4.4.4 批量更新

注意:要使用批量更新,必须在jdbc.properties属性文件中的url中添加&allowMultiQueries=true,允许多行操作。
在这里插入图片描述

在这里插入图片描述

4.5 指定参数位置

目的:如果入参是多个,可以通过指定参数位置进行传参,是实体包含不住的条件,实体类只能封装住成员变量的条件,如果某个成员变量要有区间范围内的判断,或者有两个值进行处理,则实体类包不住【例如:查询指定日期范围内的用户信息.】

定义接口方法:
在这里插入图片描述
实现:
在这里插入图片描述
测试:
在这里插入图片描述

4.6 入参是map【重点掌握】

入参是map,是因为当传递的数据有多个,不适合使用指定下标或指定名称的方式来进行传参,又加上参数不一定与对象的成员变量一致,考虑使用map集合来进行传递.map使用的是键值对的方式.当在sql语句中使用的时候#{键名},${键名},用的是键的名称.

如果入参超过一个以上,使用map封装查询条件,更有语义,查询条件更明确

接口:
在这里插入图片描述
实现:
在这里插入图片描述

测试:
在这里插入图片描述

4.7 返回值是map

返回值是map的适用场景,如果的数据不能使用对象来进行封装,可能查询的数据来自多张表中的某些列,这种情况下,使用map,但是 map 的返回方式破坏了对象的封装,返回来的数据是一个一个单独的数据,之间不相关.

map 使用表中的列名或别名做为键名进行返回数据.

如果返回的数据实体类无法包含,可以使用map返回多张表中的若干数据.返回后这些数据之间没有任何关系.就是Object类型.返回的map的key就是列名或别名

在这里插入图片描述

4.7.1 返回值是一行

接口:
在这里插入图片描述
实现:
在这里插入图片描述
测试:
在这里插入图片描述

4.7.2 返回值是多行

接口:
在这里插入图片描述
实现:
在这里插入图片描述
测试:
在这里插入图片描述
效果展示:
在这里插入图片描述

在这里插入图片描述

4.8 列名与类中成员变量名称不一致

新建项目+新建表
在这里插入图片描述
在这里插入图片描述
定义实体类:
在这里插入图片描述
定义接口:
在这里插入图片描述
接口实现:
在这里插入图片描述
注册:
在这里插入图片描述

测试:
在这里插入图片描述
设置别名:
在这里插入图片描述
测试:
在这里插入图片描述
通过resultMap手工进行映射进行数据绑定:

在这里插入图片描述

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

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

相关文章

无人机/穿越机等遥控器/接收机厂商

本人最近迷恋上了穿越机。整理一些资料&#xff0c;方便后来人学习。。有其他更新资料&#xff0c;欢迎留言&#xff0c;争取打造成好的工具书。 新手入门可以看百科&#xff1a; 了解穿越机的一切 | 装机百科 穿越机电子系统表&#xff1a; 方案厂商坐标代表作其他RadioLink…

代码源于生活我们需要观察力想象力和创造力

出现窗户把手不能控制卡槽卡扣的问题 原因&#xff1a; 由于控制把手和窗户的螺丝松动&#xff0c;导致把手没有办法控制里边竖着的东西&#xff0c;没有办法控制卡扣和卡槽吻合松开。 分析&#xff08;按照计算机思维&#xff09;&#xff1a; 1、研究对象&#xff1a;把…

新来个阿里 P7,仅花 2 小时,做出一个多线程永动任务,看完直接跪了

今天教大家做一个 Java 的多线程永动任务&#xff0c;这个示例的原型是公司自研的多线程异步任务项目&#xff0c;我把里面涉及到多线程的代码抽离出来&#xff0c;然后进行一定的改造。 里面涉及的知识点非常多&#xff0c;特别适合有一定工作经验的同学学习&#xff0c;或者…

C++ Reference: Standard C++ Library reference: C Library: cmath: logb

C官网参考链接&#xff1a;https://cplusplus.com/reference/cmath/logb/ 函数 <cmath> <ctgmath> logb C99 double logb(double x); float logbf(float x); long double logbl(long double x); C11 double logb(double x); float logb(float x); lo…

C++ Reference: Standard C++ Library reference: C Library: cmath: atanh

C官网参考链接&#xff1a;https://cplusplus.com/reference/cmath/atanh/ 函数 <cmath> <ctgmath> atanh C99 double atanh (double x); float atanhf (float x); long double atanhl (long double x); C11 double atanh (double x); float atanh (floa…

迅为IMX8MM开发板视频硬解码H264解码

我们解码并播放 H264 视频文件&#xff0c;输入以下命令 gst-launch-1.0 filesrc location/gstreamer/video/1080p_60fps_h264.mp4 typefindtrue ! \ video/quicktime ! aiurdemux ! queue max-size-time0 ! vpudec ! imxvideoconvert_g2d ! \ video/x-raw, formatRGB16, wi…

ffmpeg播放器(一) 视频解码与播放

1、环境搭建 首先需要导入所需要的包include、armeabi-v7a。 然后跟项目建立连接&#xff0c;在CMakeList.txt&#xff0c;并做了相关的解释&#xff1a; cmake_minimum_required(VERSION 3.4.1)file(GLOB source_file src/main/cpp/*.cpp) //cpp文件下所有的包 # Declares a…

打印字符串、排序、引用调用

设计一个函数print打印字符串&#xff0c;如果只传string型参数s&#xff0c;则字符串长度跟10比较&#xff0c;大于10&#xff0c;打印前10个字符&#xff0c;小于10&#xff0c;全部输出s&#xff1b;如果传string型参数s和int型n&#xff0c;则字符串长度跟n比较&#xff0c…

教师在初中数学课堂该如何有效提问(内有示例)

数学是中学数学的一个重要组成部分&#xff0c;它在培养学生的思维和创造力方面具有很大的作用。 在我国当前的教育体制改革与发展中&#xff0c;中学数学教学应按照新课标的要求&#xff0c;改变教学方法&#xff0c;提高学生的数学综合素质。但是&#xff0c;在实际的教学过…

高性能数据访问中间件 OBProxy(五):一文讲透数据路由

上篇文章我们介绍了 OBProxy 的连接管理&#xff0c;通过连接管理功能&#xff0c;OBProxy 和 OBServer 联系起来&#xff0c;同时 OBProxy 屏蔽了连接的复杂性&#xff0c;让用户使用起来和单机数据库一样简单。完成接入后&#xff0c;接下来的一个重要功能就是数据路由&#…

[luogu3980]志愿者招募

记$x_{i}$为第$i$类志愿者数量$,y_{j}=\sum_{j\in [s_{i},t_{i}]}x_{i}-a_{j}$​,则问题即$$\forall i\in [1,m],x_{i}\ge 0\\\forall j\in [1,n],y_{j}\ge 0\\y_{1}-\sum_{s_{i}=1}x_{i}=-a_{1}\\\sum_{t_{i}=n}x_{i}-y_{n}=a_{n}\\\forall j\in [2,n],y_{j}+\sum_{t_{i}=j-1…

redis主从+哨兵+集群模式搭建详解

一、redis主从安装 1. 下载redis Download | Redis 我这里选择的是redis-6.2.7版本 这里三台机器&#xff0c;都需要安装redis node1 192.168.157.128 node2 192.168.157.129 node3 192.168.157.130 2. 安装redis # 解压redis tar -zxvf redis-6.2.7.tar.gz # 编译安装…

数据分析 面经(已拿到offer)

北航计算机专业&#xff08;计院太卷&#xff0c;现考虑转向信息安全方向&#xff09;本科二年级&#xff0c;闲来无事找份日常实习试试水 考虑数分岗也是因为楼主目前大二&#xff0c;专业课学习不够深入&#xff0c;开发技术尚不成熟&#xff0c;而sql、excel和数据可视化比…

四元数是什么

1、四元数的构成 四元数是简单的超复数&#xff0c;由实数加上三个虚数单位组成&#xff0c;主要用于在三维空间中表示旋转 四元数原理包含大量数学相关知识&#xff0c;较为复杂&#xff0c;比如&#xff1a;复数、四维空间等等 因此此文章只对其基本构成和基本公式进行学习…

多视图属性网络异常检测系列一

论文《Deep Anomaly Detection on Attributed Networks》近期会对多视图属性网络异常检测系列进行学习记录 这篇虽然不是多视图的,但可以说是属性网络上异常检测的典型,已是近年属性网络异常检测必参考的一篇文献。背景 由于属性网络中附加的节点属性补充了知识发现中的原始网…

.Net Redis的秒杀Dome和异步执行

1.先到官网下载Redis部署好 Redis 教程 | 菜鸟教程 2.创建一个上游业务项目&#xff08;这里用控制台项目了&#xff0c;Framwork4.7.2&#xff09; NuGet包下载SerivceStack.Redis 创建一个RedisMessgaeQueue(Redis连接帮助类) using ServiceStack.Redis; using System;name…

PCIe系列专题之三:3.0 数据链路层概述

一、故事前传 之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍&#xff0c;了解了PCIe是一种封装分层协议&#xff08;packet-based layered protocol),主要包括事务层&#xff08;Transaction layer), 数据链路层&#xff08;Data link layer)和物理层&#xff08;Physi…

MySQL 常用数据类型说明

目录 MySQL中常用的数据类型 整型 整型声明 整型属性 整型的选择 浮点型 定点数类型 浮点数和定点数的区别 时间日期类型 DATE类型 TIME类型 DATETIME类型 YEAR类型 文本字符串 CHAR与VARCHAR类型 TEXT类型 ​编辑 枚举类型(ENUM) MySQL中常用的数据类型 数据类…

直播平台怎么搭建,实现js开光灯效果

直播平台怎么搭建,实现js开光灯效果<!DOCTYPE html><html><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>点击切换灯亮</t…

Spring容器与依赖注入(DI)

1 Spring框架简介 1.1 什么是Spring Spring框架是一个开源的轻量级的DI和AOP容器框架&#xff0c;致力于简化企业级应用开发&#xff0c;让开发者使用简单的Java Bean来实现从前只有EJB才能实现的功能。 1.2 为什么要使用Spring Spring堪称Java世界中最强大的框架&#xff0c;…