MyBatis进阶

1. 动态SQL

        1.1 <if>标签的使用(xml版本)
 

        动态 SQL 是Mybatis的强⼤特性之⼀,能够完成不同条件下不同的 sql 拼接。

        现在有一个需求.注册分为两种字段:必填字段和⾮必填字段,那如果在添加用户的时候有不确定的字段传⼊,程序应该如何实现呢?     

                我们使用sql语句来进行实现

         java代码的实现,此时我们使用<if>标签实现动态sql

        我们重新分析一下需求

                运行结果        此时如果有多个属性都是非必选字段,我们通过navicat来进行设置

        java代码

        但是如果字段太多,会因为逗号报错,成功案例

        失败案例: 我们如果只设置中间的字段,我们发现多了个逗号

        

        为了解决这个问题我们引入<trim>标签

        1.2 <trim>标签的使用(xml版本)

        标签中有如下属性:

        • prefix:表⽰整个语句块,以prefix的值作为前缀

        • suffix:表⽰整个语句块,以suffix的值作为后缀

        • prefixOverrides:表⽰整个语句块要去除掉的前缀

        • suffixOverrides:表⽰整个语句块要去除掉的后缀

        java代码演示

         1.3 <if>标签的使用(注解方式,了解即可很复杂)     

                建议放在记事本里面进行修改,我们使用<script>标签把它们括起来

                

        一般写动态sql,xml和注解要么一起用,要么只用xml

        1.4 <where标签>

                我们有个应用场景,我们根据用户的选项来生成商品的信息,也就是动态的生成where条件

        java代码        但是我们发现一个和刚刚多出来的,一样的问题

        此时我们再使用<trim>标签来解决

        where标签的一些写法提示

        where标签的其他写法

        1.5 <set>标签 

                <set>标签的作用

                        1. 生成set关键字

                        2. 去掉整个代码后的,

        简而言之: 实现选择性更新,没有值的不用更新

        需求: 根据传⼊的⽤⼾对象属性来更新用户数据,可以使⽤标签来指定动态内容.

        接⼝定义: 根据传⼊的用户 id 属性,修改其他不为 null 的属性

        java代码

        不使用<set>标签

        

        使用<set>标签(这个标签会自动把我们后面的,给去除

        1.6 <foreache>标签

        对数组,集合进行遍历的时候使用这个标签.该标签有以下属性

        • collection:绑定⽅法参数中的集合,如 List,Set,Map或数组对象

        • item:遍历时的每⼀个对象

        • open:语句块开头的字符串

        • close:语句块结束的字符串

        • separator:每次遍历之间间隔的字符串

        应用场景: 批量操作(批量更新,批量删除...)

        

        mybatis中文网: 动态 SQL_MyBatis中文网

        我们学习了这么多标签,发现还是很麻烦,有很多的冗余代码,因此我们引入了<sql>标签和<include>标签来进行使用

        1.7 <sql>标签和<include>标签 

        

        Mybatis注解 VS xm

    

        1.8 使用插件来生成xml文件

        SpringBoot引入MybatisGenerator

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

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

相关文章

粒子群算法 笔记 数学建模

引入: 如何找到全局最大值&#xff1a;如果只是贪心的话&#xff0c;容易被局部最大解锁定 方法有&#xff1a;盲目搜索&#xff0c;启发式搜索 盲目搜索&#xff1a;枚举法和蒙特卡洛模拟&#xff0c;但是样例太多花费巨量时间 所以启发式算法就来了&#xff0c;通过经验和规…

【Unity3D】《跳舞的线》游戏的方块单方向拉伸实现案例

通过网盘分享的文件&#xff1a;CubeMoveMusic.unitypackage 链接: https://pan.baidu.com/s/1Rq-HH4H9qzVNtpQ84WXyUA?pwda7xn 提取码: a7xn 运行游戏点击空格动态创建拉伸的方块&#xff0c;由Speed控制速度&#xff0c;新方向是随机上下左右生成。 using System.Collect…

Android Studio打包APK

1.导出APK安装包 如果是首次打包&#xff0c;Create new 单击蓝色对话框右边文件夹&#x1f4c2;图标 &#xff0c;选择密钥保存路径&#xff0c;然后在下方File name对话框中填写您想要名称&#xff0c;再点击OK回到密钥创建对话框。 在此对话框中填写密码&#xff08;Passwo…

GSI快速收录服务:让你的网站内容“上架”谷歌

辛苦制作的内容无法被谷歌抓取和展示&#xff0c;导致访客无法找到你的网站&#xff0c;这是会让人丧失信心的事情。GSI快速收录服务就是为了解决这种问题而存在的。无论是新上线的页面&#xff0c;还是长期未被收录的内容&#xff0c;通过我们的技术支持&#xff0c;都能迅速被…

[ACTF2020 新生赛]Include1

题目 点击tips后&#xff1a; 使用PHP伪协议直接读取flag /?filephp://filter/readconvert.base64-encode/resourceflag.php base64解码 拿下flag flag{6cce5a3d-997a-4c8a-ba07-f6652ee462a9}

Linux-rt下卡死之hrtimer分析

Linux-rt下卡死之hrtimer分析 日志 超时读过程分析 #define readl_poll_timeout(addr, val, cond, delay_us, timeout_us) \readx_poll_timeout(readl, addr, val, cond, delay_us, timeout_us)34 #define readx_poll_timeout(op, addr, val, cond, sleep_us, timeout_us) \…

Linux的基本指令(上)

1.ls指令 语法&#xff1a;ls [选项] [目录或文件] 功能&#xff1a;对于⽬录&#xff0c;该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件&#xff0c;将列出⽂件名以及其他信息。 常用选项&#xff1a; -a 列出⽬录下的所有⽂件&#xff0c;包括以 . 开头的隐含⽂件。 -d 将…

基于Springboot用axiospost请求接收字符串参数为null的解决方案

问题 ​ 今天在用前端 post 请求后端时发现&#xff0c;由于是以 Json对象的形式传输的&#xff0c;后端用两个字符串形参无法获取到对应的参数值 前端代码如下&#xff1a; axios.post(http://localhost:8083/test/postParams,{a: 1, b:2} ,{Content-Type: application/jso…

ios打包:uuid与udid

ios的uuid与udid混乱的网上信息 新人开发ios&#xff0c;发现uuid和udid在网上有很多帖子里是混淆的&#xff0c;比如百度下&#xff0c;就会说&#xff1a; 在iOS中使用UUID&#xff08;通用唯一识别码&#xff09;作为永久签名&#xff0c;通常是指生成一个唯一标识&#xf…

【豆包MarsCode 蛇年编程大作战】蛇形烟花

项目体验地址&#xff1a;项目体验地址 官方活动地址&#xff1a;活动地址 目录 【豆包MarsCode 蛇年编程大作战】蛇形烟花演示 引言 豆包 MarsCode介绍 项目准备 第一步&#xff1a;安装插件 第二步&#xff1a;点击豆包图标来进行使用豆包 使用豆包 MarsCodeAI助手实…

leetcode151-反转字符串中的单词

leetcode 151 思路 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(n) 首先将字符串转为数组&#xff0c;这样可以方便进行操作&#xff0c;然后定义一个新的数组来存放从后到前的单词&#xff0c;由于arr中转换以后可能会出现有些项是空格的情况&#xff0c;所以需要判…

Precharge和Self-refresh的区别

一、区别说明 操作目标&#xff1a; Precharge&#xff08;预充电&#xff09;&#xff1a;此操作的主要目标是关闭存储器中某个或所有Bank中现有的工作行&#xff08;active row&#xff09;&#xff0c;并准备打开新的工作行。这是为了确保存储器的连续访问能够高效、可靠地进…

基于本地事务表+MQ实现分布式事务

基于本地事务表MQ实现分布式事务 引言1、原理2、本地消息表优缺点3、代码实现3.1、代码执行流程3.2、项目结构3.3、项目源码 引言 本地消息表的方案最初由ebay的工程师提出&#xff0c;核心思想是将分布式事务拆分成本地事务进行处理。本地消息表实现最终一致性。本文主要学习…

HTML<label>标签

例子 三个带标签的单选按钮&#xff1a; <form action"/action_page.php"> <input type"radio" id"html" name"fav_language" value"HTML"> <label for"html">HTML</label><br&…

2025,“鱿鱼游戏”闯入AI赛道

文 | 智能相对论 作者 | 叶远风 “鱿鱼游戏”一词随着同名剧集的火爆而持续走红&#xff0c;在全球范围掀起了广泛热议。而这种无限生存流的游戏模式&#xff0c;既残酷又现实&#xff0c;像极了商业市场的搏杀与淘汰。 1月20日&#xff0c;DeepSeek发布了全新的开源推理大模…

Prometheus+grafana实践:Doris数据库的监控

文章来源&#xff1a;乐维社区 Doris数据库背景 Doris&#xff08;Apache Doris&#xff09;是一个现代化的MPP&#xff08;Massive Parallel Processing&#xff0c;大规模并行处理&#xff09;数据库&#xff0c;主要用于在线分析处理&#xff08;OLAP&#xff09;场景。 D…

【unity游戏开发之InputSystem——02】InputAction的使用介绍(基于unity6开发介绍)

文章目录 前言一、InputAction简介1、InputAction是什么&#xff1f;2、示例 二、监听事件started 、performed 、canceled1、启用输入检测2、操作监听相关3、关键参数 CallbackContext4、结果 三、InputAction参数相关1、点击齿轮1.1 Actions 动作&#xff08;1&#xff09;动…

从Spring请求处理到分层架构与IOC:注解详解与演进实战

引言 在Spring开发中&#xff0c;请求参数处理、统一响应格式、分层架构设计以及依赖管理是构建可维护应用的核心要素。然而&#xff0c;许多开发者在实践中常面临以下问题&#xff1a; 如何规范接收不同格式的请求参数&#xff1f; 为何要引入分层架构&#xff1f; 什么是控…

详解Redis的Zset类型及相关命令

目录 Zset简介 ZADD ZCARD ZCOUNT ZRANGE ZREVRANGE ZRANGEBYSCORE ZPOPMAX BZPOPMAX ZPOPMIN BZPOPMIN ZRANK ZREVRANK ZSCORE ZREM ZREMRANGEBYRANK ZREMRANGEBYSCORE ZINCRBY ZINTERSTORE 内部编码 应用场景 Zset简介 有序集合相对于字符串、列表、哈希…

Node.js下载安装及环境配置教程 (详细版)

Node.js&#xff1a;是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;用于构建可扩展的网络应用程序。Node.js 使用事件驱动、非阻塞 I/O 模型&#xff0c;使其非常适合构建实时应用程序。 Node.js 提供了一种轻量、高效、可扩展的方式来构建网络应用程序&#xff0…