Mybatis三 | 动态SQL

目录

if

where

set


ctrl + alt + l格式化SQL语句

 随着用户的输入或外部条件的变化而变化的SQL称为动态SQL

if

<if>用来判断条件是否成立,使用test属性进行条件判断,如果true,则拼接SQL 

where

wehre元素只会在有条件成立的情况下才插入where子句,而且会自动去除开头的AND或OR

如果存在只传递姓名的情况,之前的程序会无法成功查询,可以通过动态SQL解决上述问题 

EmpMapper.xml内容如下

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper"><!--resultType单条记录所封装的内容--><select id="list" resultType="com.itheima.pojo.Emp">select *from emp<where><if test="name != null">name like concat('%', #{name}, '%')</if><if test="gender != null">and gender = #{gender}</if><if test="begin != null and end != null">and entrydate between #{begin} and #{end}</if></where>order by update_time desc</select>
</mapper>

 SpringbootMybatisCrudApplicationTests.java内容如下

package com.itheima;import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testSelect(){List<Emp> list = empMapper.list(null,(short)1,null,null);System.out.println(list);}}

 运行结果如下 

set

<set>动态地在行首插入SET关键字,并会删掉额外的逗号(用在update语句中) 

将id为18的员工的username改为Tom111,name改为Tom111,gender改为2,其他不变

按照之前的方法进行更新会使其他值均变为null

可以通过动态SQL解决

EmpMapper.xml内容如下

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper"><!--resultType单条记录所封装的内容--><update id="update">update emp<set><if test="username != null">username=#{username},</if><if test="password != null">password=#{password},</if><if test="name != null">name=#{name},</if><if test="gender != null">gender=#{gender},</if><if test="image != null">image=#{image},</if><if test="job != null">job=#{job},</if><if test="entrydate != null">entrydate=#{entrydate},</if><if test="deptId != null">dept_id=#{deptId},</if><if test="updateTime != null">update_time=#{updateTime}</if></set>where id=#{id}</update>
</mapper>

EmpMapper.java内容如下 

package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {public void update(Emp emp);}

此次更新id为19的员工,SpringbootMybatisCrudApplicationTests.java内容如下

package com.itheima;import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDateTime;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testUpdate(){Emp emp = new Emp();emp.setId(19);emp.setUsername("Tom2222");emp.setName("Tom222");emp.setGender((short)1);emp.setUpdateTime(LocalDateTime.now());empMapper.update(emp);}}

 运行结果如下,发现只更新了四个字段,其余字段不变

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

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

相关文章

基础js逆向练习-登录密码破解(js逆向)

练习平台&#xff1a;逆向账号密码 https://login1.scrape.center/ 直接打开平台&#xff0c;输入密码账号&#xff0c;抓包找到加密的参数携带的位置&#xff0c;这边我们找到的是一个叫token的加密参数&#xff0c;这个参数的携带是一个密文 我们首先考虑一下搜索这个加密的…

小学教师职称评定条件

作为一名小学教师&#xff0c;职称评定是职业生涯中不可避免的一环。那么&#xff0c;小学教师职称评定的条件是什么呢&#xff1f;今天&#xff0c;我们就来一起探讨一下这个话题。 小学教师职称评定与学历、教龄、教育教学能力等多方面因素有关。具体来说&#xff0c;小学教师…

大数据机器学习深入Scikit-learn:掌握Python最强大的机器学习库

文章目录 大数据机器学习深入Scikit-learn&#xff1a;掌握Python最强大的机器学习库引言机器学习与Scikit-learn的重要性Scikit-learn的基本概述 安装和配置如何安装Scikit-learn安装必要的依赖库 Scikit-learn的主要特性强大的预处理功能众多的机器学习算法效果评估和模型选择…

Java深浅拷贝

文章目录 目录 文章目录 前言 1) 引用拷贝 2) 对象拷贝 二 . 浅拷贝 1) 拷贝构造方法实现浅拷贝 2) 工厂方法实现浅拷贝 3) clone方法实现浅拷贝 三 . 深拷贝 1) 通过重写clone方法来实现深拷贝 2) 通过对象序列化实现深拷贝 前言 大家好,今天给大家带来的是java中的…

02.WebLogic 高级管理与维护

以14c为主&#xff0c;11g,12c为辅 01 weblogic server 启动停止流程 1.1weblogic server 启动 linux中 nohup ./startWebLogic.sh & 那如果这台机器有三个版本同时启动&#xff0c;如何解决&#xff1f; 第一步&#xff1a; cd /weblogic #cd到你的weblogic vi sta…

Zabbix监控原理概括

一、zabbix工作流程 zabbix监控是将zabbix客户端要安装在被监控设备上负责收集数据&#xff0c;并将数据发送给zabbix服务端&#xff0c;将zabbix客户端接收或采集的数据存储在数据库中。 zabbix的数据收集分为两种模式&#xff1a; 1、主动模式 zabbix客户端主动向zabbix …

二丙二醇甲醚,预计将以 5% 左右的较高复合年增长率增长

二丙二醇甲醚 (DPM) 是一种无色、水溶性、低毒的化合物&#xff0c;广泛应用于油漆和涂料、粘合剂和密封剂、清洁产品和化学加工等各种最终用途行业。DPM 衍生自环氧丙烷&#xff0c;由于其低挥发性和良好的溶解性能而被用作溶剂。全球市场分析&#xff1a; 在预测期内&#xf…

微信小程序开发系列-03全局配置中的“window”和“tabBar”

本文继续学习下全局配置中的“window”和“tabBar”。 window 用于设置小程序的导航栏、标题、窗口颜色等。&#xff08;吐槽一句&#xff0c;官网这里的属性描述真的让人看不懂&#xff0c;只有靠自己实际运行调试才能知道是什么意思。&#xff09; 导航栏 设置导航栏背景色…

短视频矩阵软件哪个好用?

短视频频矩阵软件是一种可以帮助用户快速制作、发布和管理多个个短视频账号的工具&#xff0c;它可以让用户在不同的平台上展示自己的内容&#xff0c;提高品牌知名度和影响力&#xff0c;同时也可以节省时间和精力&#xff0c;提升效率和质量。。短视频频矩阵软件有很多种&…

spark:RDD编程(Python版)

RDD运行原理 RDD设计背景 许多选代目前的MapReduce框架都是把中间结果写入到稳定存储 (比如磁盘)中带来了大量的数据复制、磁盘IO和序列化开销 RDD就是为了满足这种需求而出现的&#xff0c;它提供了一个抽象的数据架构&#xff0c;我们不必担心底层数据的分布式特性&#xf…

NeurIPS已成为了AI人才招聘的最大盛会,连Hinton都“应聘”过

在一周前美国举行的年度最热门的人工智能大会NeurIPS 2023上&#xff0c;有超过1万名世界顶尖AI研究人员聚集在此。 而除了研究员之外&#xff0c;中国科技公司和华尔街公司是其中最突出的参会者&#xff0c;他们都背负着抢夺AI人才的任务。 大模型人才最受欢迎 随着今年Cha…

unityc用vs2017介绍

21版unity能用17vs&#xff0c;只要在unity的Edit/Preferences/ExternalTools里面改既可。