当前位置: 首页 > article >正文

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.kler.cn/a/518623.html

相关文章:

  • 可见光通信代码仿真
  • 八股文 (一)
  • 2025美赛MCM数学建模A题:《石头台阶的“记忆”:如何用数学揭开历史的足迹》(全网最全思路+模型)
  • 使用 Elasticsearch 导航检索增强生成图表
  • Java面试题2025-Mysql
  • 浏览器hid 和蓝牙bluetooth技术区别
  • 解锁 Python 与 MySQL 交互密码:全方位技术解析与实战攻略
  • 数据统计–Excel报表(day12)2
  • CMake library path
  • 利用Kubespray安装生产环境的k8s集群-排错篇
  • uniapp封装websocket
  • tcp/ip协议通俗理解,tcpip协议通俗理解
  • 统计文本文件中单词频率的 Swift 与 Bash 实现详解
  • SpringBoot统一数据返回格式 统一异常处理
  • 填坑 hydra 暴力破解
  • 【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)
  • pytest自动化测试 - 构造“预置条件”的几种方式
  • RAG如何让生成AI更智能?最新方法与优劣深度解析
  • 【linux】linux c判断IP地址类型及是否合法
  • Spring MVC中HandlerInterceptor的作用及应用场景
  • CVE-2025-0411 7-zip 漏洞复现
  • 防抖与节流:优化高频事件的两种利器
  • 「pandas」python pandas 初步、数据结构Series、DataFrame、MultiIndex
  • 【最小堆】【动态规划】力扣264. 丑数 II
  • 【Elasticsearch】eland是啥?
  • F#语言的图形用户界面