MyBatis第四课动态SQL

目录

引言:

一、动态SQL书写方式

二、会帮我们处理多余的字符

方法2:使用where也可以进行消除and,但是出现的问题

三、标签 

四、foreach(循环操作)

​编辑

Mybatis传递List集合报错 Available parameters are [collection, list]


引言:

在我们生活中,常常会需要填写一些注册的信息,比如性别,年龄,学历啥的,假如我们不想去填写,那我们只写一个SQL的增加语句是不是就不对了呢。这时候我们就需要根据用户的输入情况,进行插入,下面为这种情况的例子

这时候我们需要根据需求,动态的拼接SQL:动态SQL

insert into userInfo(username, password,age,gender,phone) values(?,?,?,?,?);insert into userInfo( password,age,gender,phone) values(?,?,?,?);
insert into userInfo(age,gender,phone) values(?,?,?);

一、动态SQL书写方式

注解

1.把全部的sql放到script标签下面

2.使用if标签

判断条件

里面写的是java对象的属性

@Mapper
public interface UserInfo2Mapper {//动态SQL练习//假如此时性别是否为空//Insert into userinfo(username,password,age,gender,phone) values(#{username},#{password},#{age],#{gender},#{phone})
//gender对应的是java的属性,而不是数据库的@Insert("<script>" +"Insert into userinfo(username,password,age," +"<if test='gender!=null'>gender,</if>" +"phone)" +"values(#{username},#{password},#{age}," +
//下面这个也是java的属性"<if test='gender!=null'>#{gender},</if>" +"#{phone})" +"</script>")Integer insert(UserInfo userInfo);

使用xml的方式实现

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.myBatis.mapper.UserInfoXMLMapper">
<insert id="insertByXML">insert  into userInfo(username,password,age,<if test="gender!=null" >gender</if>,phone)values(#{username},#{password},#{age},<if test='gender!=null'>#{gender},</if>#{phone})
</insert>
</mapper>

如何选择:

1.先看公司/团队,是否有要求

2.看同事咋写

二、<trim>会帮我们处理多余的字符

当我们不去写性别的时候,会发现问题

原因就是书写这里的时候,如果把性别注释掉,就会多一个and,所以,我们选择使用trim标签。

方法2:使用where也可以进行消除and,但是出现的问题

由自己的实现得出;假如这样where能够对and进行去除(不写username的情况下)

select*from <where>      <if test="username!=null">username=#{username}</if>                           <if test="age!=null">and age=#{age}</if><if test="gender!=null">and   gender=#{gender}
<where>

但是假如是这种情况(不写gender的情况)

trim的缺点:假如所有条件都为空的情况下,SQL语句变成

select*from userinfo where 后面就没有了

当然也有解决方法

select *from  userInfo where 1=1  
<trim>省略</trim>

(如果查询条件为空,where标签会自动去除where关键字,各有好坏,依据情况定)

select*from <where> <if test="username!=null">username=#{username} and</if>                           <if test="age!=null">age=#{age}     and</if><if test="gender!=null">and   gender=#{gender}
<where>

三、<Set>标签 

set标签也可以与where一样,起到一定的去除作用。

<update id="updateByCondition">update userInfo<set>
<!--        <trim suffixOverrides=",">--><if test="username!=null">username=#{username},</if><if test="age!=null">age=#{age},</if><if test=" gender!=null">gender=#{gender}</if>
<!--        </trim>--></set>where id=9</update>

四、foreach(循环操作)

Mybatis传递List集合报错 Available parameters are [collection, list]

发现了一个奇怪的问题,当我传递List的时候,不知道为什么一直报这个错,开始在想是不是哪里打错了,后来再去搜索发现是下面这个原理

前任栽树:

当我们传递一个 List 实例或者数组作为参数对象传给 MyBatis。当你这么做的时 候,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键。所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map。 

换句话说当我们传递集合的时候,假如不加上这个@Param这个,编译器是无法根据你的名字来去识别你的xml文件中sql选择的id,那么对应xml里面的SQL语句就无法实现))
————————————————
版权声明:本文为CSDN博主「發V發」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_28978689/article/details/79406832

当这个样子改完之后,问题就成功解决啦~。

<sql>和<include>

把一些重复的sql可以提取出来,使用<sql>标签来标识,使用的时候使用<include>标签

例:

​​​​​​​

​​​​​​​

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

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

相关文章

Linux: make/Makefile 相关的知识

背景&#xff1a; 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的 规则来指定&#xff0c;哪些文件需要先编译&#xff0c…

良心推荐!五个超好用的Vue3工具

vue3-dnd 是用来做drag and drop的&#xff0c;也就是拖放&#xff0c;很多人多 Vue 的拖放库已经断代了&#xff0c;其实 Vue3 也有拖放库的&#xff0c;那就是 vue3-dnd。 v-wave 这可库可以通过自定义指令的形式&#xff0c;让目标点击节点具备波纹的效果&#xff0c;如下…

MySQL两个表的亲密接触-连接查询的原理

MySQL对于被驱动表的关联字段没索引的关联查询&#xff0c;一般都会使用 BNL 算法。如果有索引一般选择 NLJ 算法&#xff0c;有 索引的情况下 NLJ 算法比 BNL算法性能更高。 关系型数据库还有一个重要的概念&#xff1a;Join&#xff08;连接&#xff09;。使用Join有好处&…

学会使用ubuntu——ubuntu22.04使用WebCatlog

Ubuntu22.04使用WebCatlog WebCatlog是适用于Gnu / Linux&#xff0c;Windows或Mac OS X系统的桌面程序。 引擎基于铬&#xff0c;它用于在我们的桌面上处理Web服务。简单点就是把网页单独一个窗口出来显示&#xff0c;当一个app用。本文就是利用WebCatlog安装后的notion编写的…

第九篇 华为云Iot SDK的简单应用

第九篇 华为云Iot SDK的简单应用 一、华为云Iot SDK API的简单使用 1.初始化SDK 2.绑定连接配置信息 3.连接服务器 4.上报属性 5.接收命令 二、实现智能家居灯光状态上报 &#x1f516;以下是上报数据到华为云Iot的代码片段&#xff0c;配合串口控制灯光&#xff0c;改变灯…

Qt —— 自定义飞机仪表控件(附源码)

示例效果 部署环境 本人亲测版本Vs2017+Qt5.12.4,其他版本应该也可使用。 源码1 qfi_ADI::qfi_ADI( QWidget *parent ) :QGraphicsView ( parent ),m_scene ( nullptr )

C++ STL之list的使用及模拟实现

文章目录 1. 介绍2. list类的使用2.1 list类对象的构造函数2.2 list类对象的容量操作2.3 list类对象的修改操作2.4 list类对象的访问及遍历操作 3. list类的模拟实现 1. 介绍 英文解释&#xff1a; 也就是说&#xff1a; list是可以在常数范围内在任意位置进行插入和删除的序列…

yolov8 opencv dnn部署自己的模型

源码地址 本人使用的opencv c github代码,代码作者非本人 使用github源码结合自己导出的onnx模型推理自己的视频 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理&#xff0c;所以只使用opencv…

【机组】计算机组成原理实验指导书.

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 第一章 性能特点 1.1 系…

使用js判断list中是否含有某个字符串,存在则删除,

显示上图中使用了两种方式&#xff0c; 左边的是filter将不等于userCode的元素筛选出来组成一个新的list&#xff0c; userCodeList.filter(item> item!userCode)&#xff1b;但是上面这个方法在IE浏览器中不支持&#xff0c; 所以改成了右边的方法&#xff0c;使用splice…

web系统架构基于springCloud的各技术栈

博主目前开发的web系统架构是基于springCloud的一套微服务架构。 使用的技术栈&#xff1a;springbootmysqlclickhousepostgresqlredisrocketMqosseurekabase-gatewayapollodockernginxvue的一套web架构。 一、springboot3.0 特性&#xff1a;Spring Boot 3.0提供了许多新特性…

网络安全---防御保护--子接口小实验

子接口小实验&#xff1a; 环境准备&#xff1a; 防火墙区域配置为trust&#xff1a; PC设置其ip为同一个网段&#xff1a; 此时尝试ping无法ping通的原因是没有打开防火墙允许ping&#xff0c;我们在图形化界面允许ping即可 最终结果&#xff1a; .com域名服务器&#xff1a; …

​比特币大跌的 2 个原因

撰文&#xff1a;秦晋 原文来自Techub News&#xff1a;​比特币大跌的 2 个原因 比特币迎来大跌&#xff01;1 月 23 日凌晨&#xff0c;比特币跌破 40000 美元&#xff0c;为去年 12 月 4 日以来首次&#xff0c;日内跌超 3%。这是自 1 月 10 日美国证监会审批通过 11 只比…

中仕教育:“三不限”事业编的含义

所谓“三不限”&#xff0c;是指在报考事业单位时&#xff0c;对考生的户籍、年龄、学历不作任何限制。所以全国各地的考生只要符合招聘条件&#xff0c;都可以报考。所以每一年的三不限岗位竞争压力都比较大&#xff0c;报考人数都有很多。 ‘三不限’岗位招考信息在哪里看?…

制作Forms表单收集信息

Forms表单收集信息 背景表单制作New FormForms添加元素分享链接 测试查看结果数据结果可视化结果 背景 今天公司老板计划团建旅游&#xff0c;然后呢想让我们投一下票&#xff0c;说让我做一个表单来统计一下公司员工的信息&#xff0c;&#xff08;前半句不要信啊&#xff09…

基于Apache httpd为windows11搭建代理服务器

文章目录 一.概述二.检查电脑系统类型三.下载安装Apache Httpd四.代理服务配置五.代理服务安装六.报错解决方法七.测试是否运行成功7.1 本机测试7.2 局域网代理测试 八.设置特定ip可访问&#xff08;阻止其他ip访问&#xff09;九.参考文档 一.概述 出于某些原因&#xff0c;我…

架构篇22:CAP理论-布鲁尔定理(Brewer‘s theorem)

文章目录 CAP 理论CAP 应用小结 CAP 定理&#xff08;CAP theorem&#xff09;又被称作布鲁尔定理&#xff08;Brewer’s theorem&#xff09;&#xff0c;是加州大学伯克利分校的计算机科学家埃里克布鲁尔&#xff08;Eric Brewer&#xff09;在 2000 年的 ACM PODC 上提出的一…

如何在飞书创建企业ChatGPT智能问答助手应用并实现公网远程访问(1)

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

10个常考的前端手写题,你全都会吗?(下)

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 今天接着上篇再来分享一下10个常见的JavaScript手写功能。 目录 1.实现继承 ES5继…

11.前端--CSS-背景属性

1.背景颜色 样式名称&#xff1a; background-color 定义元素的背景颜色 使用方式: background-color:颜色值; 其他说明&#xff1a; 元素背景颜色默认值是 transparent&#xff08;透明&#xff09;      background-color:transparent; 代码演示&#xff1a; 背景色…