Mybatis 动态sql环境搭建(学习笔记16)

什么是动态sql:根据不同的条件生成不同的sql语句

借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

首先还是搭建基础框架   忘了就去看前面笔记

解决数据库名和字段名不一致

在官网有一个这样的配置文件,开启后将数据库列名从abc_name  变成abcName这样的驼峰命名

通过UUID 生成随机id

package com.li.utils;

import org.junit.Test;

import java.util.UUID;

public class IDUtils {
    public static String getId(){
        return UUID.randomUUID().toString().replace("-","");
    }

    @Test
 public void test1(){
        System.out.println(IDUtils.getId());
    }

}

添加完数据准备开始测试

if标签:表示判断

<select id="queryBlogIF" parameterType="map" resultType="blog">
    select * from mybatis1.blog where 1 = 1
-- if标签中的test属性后面判断条件
                                  
    <if test="title != null">
        and title = #{title}
    </if>

    <if test="author != null" >
        and author = #{author}
    </if>

</select>

where标签优化sql语句的后续拼接,会自动帮我们判断是否需要加上活去掉and / or

<select id="queryBlogIF" parameterType="map" resultType="blog">
    select * from mybatis1.blog
-- if标签中的test属性后面判断条件
--这里加上了where标签包含if标签
<where >
    <if test="title != null">
        and title = #{title}
    </if>

    <if test="author != null" >
        and author = #{author}
    </if>
</where>
</select>

shoose,when,otherwise标签和Java的switch差不多

    <select id="queryBlogChoose" parameterType="map" resultType="blog">
        select *
        from mybatis1.blog
        <where><!--相当于switch-->
            <choose><!--相当于case-->
                <when test="author != null">
                    and author = #{author}
                </when>
                <when test="title != null">
                    and title = #{title}
                </when>
                <otherwise><!--相当于default-->
                    and views = #{views}
                </otherwise>
            </choose>
        </where>
    </select>

用update跟新数据是会遇到衔接where时会出现问题这时我们就要用到set标签

trim标签可以定制where

所谓的动态sql,本质还是sql语句,只是我们可以在sql前面,去执行一些逻辑代码

sql标签,又叫sql片段和include连用有点像java中的方法把错付的代码复用

<sql id="title_"><!--提取重复代码 id接名字-->
    -- if标签中的test属性后面判断条件
    <where >
        <if test="title != null">
            and title = #{title}
        </if>

        <if test="author != null" >
            and author = #{author}
        </if>
    </where>
</sql>
<select id="queryBlogIF" parameterType="map" resultType="blog">
    select * from mybatis1.blog
    <!--引用上面提取的代码,refid接上面sql标签id的名字-->
    <include refid="title_"></include>

</select>

foreach标签 思路比较绕多练习就会理解,忘了就去看官方文档

<!--下面的代码相当于sql语句select * from mybatis1.blog where 1=1 and(id=1 or id = 2 or id =3)-->
<!--foreach标签中collection表示需要遍历的集合,item表示集合遍历出的元素,还有一个index表示集合的下标
open 表示从什么地方开始拼接 separator表示拼接的分隔符是什么 close表示从什么时候结束拼接
-->
    <select id="queryBlogForeach" parameterType="map" resultType="blog">
        select *
        from mybatis1.blog
        <where>
            <foreach item="id" collection="ids"
            open="and (" separator="or" close=")">
        id = #{id}
            </foreach>
        </where>
    </select>

动态sql就是在拼接sql语句,我们只要保证sql的正确性,按照sql的格式去排列组合就可以了

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

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

相关文章

拆解Spring boot:Springboot为什么如此丝滑而简单?源码剖析解读自动装配

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

Screaming Frog SEO Spider:网站优化利器,轻松掌握网络爬虫精髓

在数字时代&#xff0c;网络爬虫已成为各行各业获取数据、分析趋势的重要工具。而在众多网络爬虫开发工具中&#xff0c;Screaming Frog SEO Spider以其强大的功能和易用性脱颖而出&#xff0c;成为众多网站优化师和SEO从业者的首选。 Screaming Frog SEO Spider是一款适用于M…

笔记本电脑数据恢复:如何轻松地从笔记本电脑恢复文件

不小心从笔记本电脑中删除了一些重要文件&#xff1f;或者恶意软件和其他不可控因素是否导致您的文件消失&#xff1f;人们很容易认为这些文件已经永远消失&#xff0c;并且无法恢复。但这与事实相差甚远。通过遵循正确的数据恢复礼仪并使用良好的数据恢复工具&#xff0c;您可…

英语翻译报价,千字英语翻译报价

众所周知&#xff0c;英语作为全球通用的语言&#xff0c;其翻译需求量极大。无论是欧美国家的日常交流&#xff0c;还是小语种的翻译工作&#xff0c;英语都常常作为中介语言&#xff0c;扮演着桥梁的角色。那么&#xff0c;英语翻译公司是如何定价的&#xff1f;每千字的英语…

Qt中进行客户端开发框架

在Qt中进行客户端开发是一种常见的做法&#xff0c;Qt是一个跨平台的C框架&#xff0c;提供了丰富的工具和类库&#xff0c;用于开发图形用户界面&#xff08;GUI&#xff09;应用程序、网络应用程序以及其他类型的软件。以下是一些常用的Qt客户端开发框架和技术&#xff0c;希…

Exam in MAC [容斥]

题意 思路 正难则反 反过来需要考虑的是&#xff1a; (1) 所有满条件一的(x,y)有多少对&#xff1a; x 0 时&#xff0c;有c1对 x 1 时&#xff0c;有c对 ...... x c 时&#xff0c;有1对 以此类推 一共有 (c2)(c1)/2 对 (2) 符合 x y ∈ S的有多少对&#xff1a…

Qt客户端开发的技术难点

在Qt客户端开发中&#xff0c;可能会遇到一些技术难点&#xff0c;这些难点可能与UI设计、性能优化、跨平台兼容性等方面有关。以下是一些可能的技术难点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作…

虚拟游戏理财 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 在一款虚拟游戏中生活&#xff0c;你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。 现有一家Bank&#xff0c;它提供有若干理财产品m&#xff0c;风险及…

将SQL数据库转换为Mysql数据库

一、准备工作 1、SQL server安装包与已经有数据的mdf、ldf数据库文件&#xff1b; 2、.net Framework安装包&#xff1b;&#xff08;用于支持SQL Server安装的组件&#xff09; 3、MySql安装包&#xff1b;&#xff08;用于目标数据库的环境安装&#xff09; 4、navicat安装包…

YOLOv8旋转目标检测实战:训练自己的数据集

课程链接&#xff1a;https://edu.csdn.net/course/detail/39393 旋转目标检测是计算机视觉领域的一个高级任务&#xff0c;它在传统目标检测的基础上进一步发展。传统目标检测技术主要关注于识别和定位图像中的物体&#xff0c;通常以水平边界框(HBB)来标识目标物体的位置。而…

SpringBoot高级

1.自动配置-Condition Condition是Spring4.0后引入的条件化配置接口&#xff0c;通过实现Condition接口可以完成有条件的加载相应的Bean 进入 SpringBoot 启动类&#xff0c;点击进入 run() 可以看到这个方法是有返回值的&#xff0c;返回值为 ConfigurableApplicationConte…

[Redis]——主从同步原理(全量同步、增量同步)

目录 Redis集群&#xff1a; 主从同步原理&#xff1a; replid和offset: 全量同步和增量同步&#xff1a; repl_baklog文件&#xff1a; 主从集群的优化&#xff1a; Redis集群&#xff1a; 部署多台Redis我们称之为Redis集群&#xff0c;他有一个主节点(负责写操作)&…

什么是施密特触发器?一文详解

施密特触发器的定义 施密特触发器&#xff08;Schmitt Trigger&#xff09;是一种电子电路&#xff0c;常用于数字逻辑电路和信号处理电路中。它具有两个不同的阈值电压级别&#xff0c;通过这些不同的电压级别&#xff0c;可以将输入信号转换为相对稳定的输出信号。 当输入信…

【Datawhale组队学习:Sora原理与技术实战】使用KAN-TTS合成女生沪语音频

Sambert-Hifigan模型介绍 拼接法和参数法是两种Text-To-Speech(TTS)技术路线。近年来参数TTS系统获得了广泛的应用&#xff0c;故此处仅涉及参数法。 参数TTS系统可分为两大模块&#xff1a;前端和后端。 前端包含文本正则、分词、多音字预测、文本转音素和韵律预测等模块&am…

Django之Form组件

Django之Form组件 目录 Django之Form组件介绍手动渲染错误信息基于Form组件校验数据重写错误信息用户名与密码radioSelect单选Select多选Select单选checkbox多选checkbox 前端渲染 介绍 Form组件提供了一种在网页上收集用户输入数据并将其提交到服务器进行处理的机制&#xff…

实战纪实 | 记一次绕过宝塔的的文件上传

前几天找到个可以上传任意文件的上传点&#xff0c;成功上传phpinfo页面并能访问&#xff0c;但是不能成功上传一句话&#xff0c;发现这台主机装了宝塔&#xff0c;经过反复尝试终于成功上传一句话并连接。 0x01 漏洞发现 结果前期摸索&#xff0c;发现了一个上传点&#xff0…

Java中 常见的开源树库介绍

阅读本文之前请参阅------Java中 树的基础知识介绍 在 Java 中&#xff0c;有几种流行的开源树库&#xff0c;它们提供了丰富的树算法和高级操作&#xff0c;可以帮助开发者更高效地处理树相关的问题。以下是几种常见的 Java 树库及其特点和区别&#xff1a; JTree 特点…

一场“猜成绩”大赛:ArrayList vs. LinkedList

今天我们将带来一场精彩绝伦的较量——ArrayList对阵LinkedList。 ArrayList它就像是一张大桌子&#xff0c;可以容纳各种各样的物品。 ArrayList是一个动态数组&#xff0c;具有随机访问的能力&#xff0c;这意味着我们可以在O(1)的时间复杂度内访问任意位置的元素。 它还具…

从零开始的LLaMA-Factory的指令增量微调

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径及一点个人思考大模型应用开发实用开源项目汇总大模型问答项目…

TinTin Web3 动态精选:以太坊坎昆升级利好 Layer2,比特币减半进入倒计时

TinTin 快讯由 TinTinLand 开发者技术社区打造&#xff0c;旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位&#xff0c; 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态&#xff0c;将有助于 TinTinLand 社区的开…