IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JAVA 框架 / MYBATIS / MYBATIS系列教材 (八)- 动态SQL - MYBATIS WHERE SET TRIM 标签例子 -> 正文阅读

[Java知识库]JAVA 框架 / MYBATIS / MYBATIS系列教材 (八)- 动态SQL - MYBATIS WHERE SET TRIM 标签例子

侵删JAVA 框架 / MYBATIS / MYBATIS系列教材 (八)- 动态SQL - MYBATIS WHERE SET TRIM 标签例子

步骤?1?:?先运行,看到效果,再学习 ??
步骤?2?:?模仿和排错 ??
步骤?3?:?基于上一个知识点进行 ??

基于上一个知识点if 标签进行


步骤?4?:?多条件的矛盾 ??

如果要进行多条件判断,就会写成这样:

<select id="listProduct" resultType="Product">

select * from product_

<if test="name!=null">

where name like concat('%',#{name},'%')

</if>

<if test="price!=0">

and price > #{price}

</if>

</select>


这么写的问题是:当没有name参数,却有price参数的时候,执行的sql语句就会是:

select * from product_ and price > 10.【sql多了and】
这样执行就会报错

多条件的矛盾

步骤?5?:?where标签 ??

这个问题可以通过<where>标签来解决,如代码所示

<select id="listProduct" resultType="Product">

select * from product_

<where>

<if test="name!=null">

and name like concat('%',#{name},'%')

</if>

<if test="price!=null and price!=0">

and price > #{price}

</if>

</where>

</select>


<where>标签会进行自动判断
如果任何条件都不成立,那么就在sql语句里就不会出现where关键字
如果有任何条件成立,会自动去掉多出来的 and 或者 or。

所以在测试代码里

Map<String,Object> params = new HashMap<>();

//params.put("name","a");

params.put("price","10");


这个参数map,无论是否提供值否都可以正常执行


步骤?6?:?set标签 ??

where标签类似的,在update语句里也会碰到多个字段相关的问题。 在这种情况下,就可以使用set标签:

<set>

<if test="name != null">name=#{name},</if>

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

</set>
其效果与where标签类似,有数据的时候才进行设置。

set标签

步骤?7?:?trim标签 ??

MyBatis动态sql之trim、where、set标签

<trim> 元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是 prefix 和 suffix。

可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是 prefixOverrides 和 suffixOverrides。正因为 <trim> 元素有这样的功能,所以也可以非常简单地利用 <trim> 来代替 <where> 元素的功能。

MyBatis动态SQL中trim的使用

MyBatis 中的 trim标签 是一个格式化的智能标记,可以动态地添加和删除SQL语句中的某些值,以完成 set 或者是 where 语句的组装。

trim 标签属性:
trim 标签中主要的属性有 prefix、prefixOverrides、suffix 、suffixOverrides

trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码:

trim 用来定制想要的功能,比如where标签就可以用

<trim prefix="WHERE" prefixOverrides="AND |OR ">

...

</trim>来替换
?

set标签就可以用

<trim prefix="SET" suffixOverrides=",">

...

</trim>
来替换
运行set标签中的代码,其效果是一样的。

<?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.how2java.pojo">
    <select id="listProduct" resultType="Product">
        select * from product_
        <trim prefix="WHERE" prefixOverrides="AND |OR ">
            <if test="name!=null">
                and name like concat('%',#{name},'%')
            </if>        
            <if test="price!=null and price!=0">
                and price > #{price}
            </if>
        </trim>      
    </select>
     
    <update id="updateProduct" parameterType="Product" >
        update product_
        <trim prefix="SET" suffixOverrides=",">
            <if test="name != null">name=#{name},</if>
            <if test="price != null">price=#{price}</if>
              
        </trim>
         
         where id=#{id}   
    </update>
         
    </mapper>


?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:22:10  更:2021-08-01 14:23:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 4:44:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码