Mybatis(二)-动态SQL

Python 爬虫实战:京东商品价格与评论数据爬取 本文介绍了使用Python爬取京东商品价格与评论数据的完整流程。主要内容包括: 环境准备:安装requests、BeautifulSoup、pandas等库,建议使用Python 3.8+虚拟环境。 目标分析: 商品列表页(HTML)包含名称、价格、SKU ID等数据 评论数据通过JSON API获取 反爬策略: 随机User-Agent 请求延迟2-5秒 设置必要Cookie 代码实现: 基础配置:设置输出目录、随机UA生成器 搜索列表页爬取:解析HTML获取商品基本信息 评论数据爬取:通过JSON AP 阅读详情

将复杂的SQL语句拼接简单化,常用的动态SQL元素:if、choose(when、otherwise)、where、set、foreach、bind


xml:

if:

<select id="findUserById" resultType="user">
           select * from user where 
           <if test="id != null">
               id=#{id}
           </if>
            and deleteFlag=0;
</select>

where:

where元素知道只有一个以上的if条件有值的情况下才去插入WHERE子句,若最后的内容是“and”“or”开头,where可自己将他们去除;

<select id="findUserById" resultType="user">
           select * from user 
           <where>
               <if test="id != null">
                   id=#{id}
               </if>
               and deleteFlag=0;
           </where>
 </select>

choose:

类比switch;

<select id="selectEmployeeChoose" 
  	parameterType="hashmap" 
  	resultType="org.fkit.domain.Employee">
  	SELECT * FROM tb_employee WHERE state = 'ACTIVE'
  	<!-- 如果传入了id,就根据id查询,没有传入id就根据loginname和password查询,否则查询sex等于男的数据 -->
  	<choose>
  		<when test="id != null">
  			and id = #{id}
  		</when>
  		<when test="loginname != null and password != null">
  			and loginname = #{loginname} and password = #{password}
  		</when>
  		<otherwise>
  			and sex = '男'
  		</otherwise>
  	</choose>
  </select>

set:

消除逗号;

<update id="updateEmployeeIfNecessary" 
  	parameterType="org.fkit.domain.Employee">
	  update tb_employee
	    <set>
	      <if test="loginname != null">loginname=#{loginname},</if>
	      <if test="password != null">password=#{password},</if>
	      <if test="name != null">name=#{name},</if>
	      <if test="sex != null">sex=#{sex},</if>
	      <if test="age != null">age=#{age},</if>
	      <if test="phone != null">phone=#{phone},</if>
	      <if test="sal != null">sal=#{sal},</if>
	      <if test="state != null">state=#{state}</if>
	    </set>
	  where id=#{id}
	</update>

foreach:

对一个集合进行遍历;

<select id="selectEmployeeIn" resultType="org.fkit.domain.Employee">
	  SELECT *
	  FROM tb_employee
	  WHERE ID in
	  <foreach item="item" index="index" collection="list"
	      open="(" separator="," close=")">
	        #{item}
	  </foreach>
  </select>

bind:

从OGNL表达式中创建一个变量并将其绑定到上下文;

<!-- 是一个like的模糊查询-->
<select id="selectEmployeeLikeName"  resultType="org.fkit.domain.Employee">
	  <bind name="pattern" value="'%' + _parameter.getName() + '%'" />
	  	SELECT * FROM tb_employee
	  	WHERE loginname LIKE #{pattern}
	</select>

注解:

MyBatis提供了:@SelectProvider @InsertProvider @UpdateProvider @DeleteProvider来帮助构建动态SQL语句;

@SelectProvider实例:

UserMapper接口:

public interface UserMapper {
    
    @Results({
            @Result(id = true,property = "id",column = "id"),
            @Result(property ="username",column = "username"),
            @Result(property ="loginname",column = "loginname"),
            @Result(property ="pword",column = "pword"),
            @Result(property ="phone",column = "phone"),
            @Result(property ="address",column = "address"),
    })
    @SelectProvider(type = UserDy.class,method = "queryUser")
    User selectUserByIdDy(int id);
}

动态SQL提供类:

public class UserDy {
    public String queryUser(Map<String,Integer> map){
        return  new SQL(){
            {
                SELECT("*");
                FROM("tb_user");
                if(map.get("id")!=null){
                    WHERE("id=#{id}");
                }
            }
        }.toString();
    }
}

测试:

@Test
    public void query1(){//动态sql
        SqlSession sqlSession=sqlSessionFactory.openSession();
        try{
            Map<String,Object> map=new HashMap<>();
            map.put("id",1);
            User user=sqlSession.selectOne("selectUserByIdDy",map);
            System.out.println(user.getUsername());
            sqlSession.commit();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }

 

 

 

 

【嘉立创EDA】PCB金属包边设计快捷方法 本文使用嘉立创EDA,描述如何在PCB设计时,快速增加边框包边设计,特别是金属包边(伪)——这里标记(伪)是因为该这里的包边特指不含边缘壁。请参考本文时特别注意!本文将此过程记录,以供有需要的读者参考。 阅读详情

相关推荐

FreeRTOS面试题汇总

如果一个低优先级的任务持有一个信号量,高优先级的任务想要用这个信号量,造成的死锁怎么解决。12.FreeRTOS的多任务之间如何去进行通信的,什么方法,它实现原理是什么。任务间数据传输一共有三种形式,用的最多的是消息队列,其次是全局变量和信号量。简历上写了了解RTOS,问了rtos的问题,用过哪些函数。讲解FreeRtos原理,调度机制,底层原理,代码调用。FreeRTOS,你的三个任务控制,请问你是怎么实现的。freertos中EventBits_t是干啥的?freertos使任务切换的方式有哪些?

weixin_45636780的博客 1万+

MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

目录 0 一起来学习 mybatis 1 数据准备 2 if 标签 2.1 在 WHERE 条件中使用 if 标签 2.1.1 查询条件 2.1.2 动态 SQL 2.1.3 测试 2.2 在 UPDATE...

1471

LangFlow开源神器:拖拽构建AI Agent与MCP协议集成实战

LangFlow 15万星开源神器:拖拽搭建 AI Agent,一键部署 API / MCP / JSON 在AI应用开发领域,传统编码方式往往需要处理复杂的API调用、数据处理和流程编排,这让很多开发者望而却步。LangFlow作为GitHub上获得15万星的开源项目,通过可视化拖拽的方式彻底改变了AI Agent的开发体验。本文将完整介绍如何使用LangFlow快速构建功能强大的AI Agent,并实现API、MCP协议和JSON配置的一键部署。 1. LangFlow与AI Agent核心概念解析 1

weixin_33717117的博客 937

MyBatis动态插入的实现

mybatis通过定义前缀后缀和分割字符来拼接sql语句,实现动态插入的功能 <insert id="addNewsTypeByNewsId"> insert into news_newstype <trim prefix="(" suffix=")" suffixOverrides=","> <...

qq_41289165的博客 1404

VS Code配置MASM32汇编环境:从安装到调试的完整指南

本文提供了一份详尽的指南,教你如何在VS Code中配置MASM32汇编开发环境,实现从安装、环境变量设置到编写、编译和调试32位Windows汇编窗口程序的完整工作流。通过集成现代编辑器的便利性与经典汇编工具链,旨在降低学习门槛,提升底层开发效率。

nn3456的博客 483

深入Luckfox Pico的Web界面:从Angular前端到CGI后端的RV1106 IPCWeb全栈解析

本文深入解析了基于瑞芯微RV1106芯片的Luckfox Pico设备上,IPCWeb全栈解决方案的架构与部署。详细介绍了如何通过SDK编译配置,将现代Angular前端框架与高效的C++ CGI后端结合,并利用nginx和FastCGI在嵌入式环境中构建稳定、高性能的Web管理界面,为物联网设备开发提供了完整的实战参考。

3a9bq4r8t2y的博客 276

mybatis动态sql

环境准备 数据库信息采用外部引用的方式:db.properties #Global logging configuration# log4j.rootLogger=ERROR,stdout #mybatis logging configuration# Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppende...

qq_37054816的博客 322

【YOLOv8科研级优化】基于YOLOv9的GELAN模块重构C2f架构,显著提升模型精度与推理效率

打开确保模型解析器能识别GELANBlock模块。通过将YOLOv9的GELAN模块集成到YOLOv8的C2f模块中,我们实现了一个“强特征表达+高效计算”的目标检测模型。这个改进不仅在工程上能提升复杂场景下的检测效果,更在科研上提供了“多分支特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的改进中,帮你在论文中打造独特的研究点。

FJN110的博客 111

Mybatis学习笔记_5、Mybatis动态SQL

动态 SQL 是 MyBatis 的强大特性之一。MyBatis提供的对SQL语句动态组装的功能解决了开发人员在使用JDBC或其他的框架进行数据库开发时,需要手动拼装SQL的繁琐问题. 动态SQL元素 MyBatis 3采用了功能强大的基于OGNL的表达式来完成动态SQL,其主要元素如下: if :判断语句,用于单条分支判断. choose,when,otherwise :相当于Java中的swith…case…default语句,用于多条件分支判断。 where,trim,set: 辅助元元素,用于处理

goodwin 325

把 LangGraph 当“工作流引擎”用:与传统 BPM 的差异与融合策略

首先,我们来回顾一下有限状态机(FSM)的基本定义——一个 FSM 可以用一个五元组MQΣδq0FMQΣδq0​FQQQ有限状态集合,包含 FSM 所有可能的状态;Σ\SigmaΣ有限输入字母表,包含 FSM 所有可能的输入;δ\deltaδ状态转移函数,定义了 FSM 从当前状态q∈Qq \in Qq∈Q接收输入σ∈Σσ∈Σ后,转移到的下一个状态q′∈Qq' \in Qq′∈Q,即δQ×Σ→QδQ×Σ→Q。

AI 原生应用开发的博客 227

飞牛fnNAS搭建web版微信

摘要:本文介绍了一种通过Docker在飞牛NAS上部署微信客户端的方法,实现24小时同步微信聊天记录。具体步骤包括:1)激活飞牛NAS的Docker功能并配置镜像加速源;2)创建专用文件夹并下载docker-wechat镜像;3)设置容器参数并部署微信客户端;4)通过局域网或ZeroTier内网穿透实现远程访问。相比传统Windows/Linux方案,该方法资源占用更低,适合需要长期保存微信聊天记录的用户。

dgnankai的专栏 3332

mybatis(四) 动态sql

文章目录4、动态sql4.1、if和where4.2、choose、when、otherwise4.3、trim、set4.3.1、trim 标签4.3.2、set标签4.4、foreach4.5、bind4.6 、script 4、动态sql 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

剪刀手何金银的技术博客 211

JavaScript实现量化交易策略(附完整源码)

JavaScript实现量化交易策略(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 721

Mybatis二:动态SQL

mybatis动态SQL总结,文末附源码

青衫忆笙的博客 903

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Mybatis Mybatis的动态SQL 二、动态sql语句标签

从上图的案例当中我们可以看到如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。有些时候我们的数据是以数组的形式出现的,比如我们进行批量删除和批量添加的时候。这个标签相当于是java当中的if.....elseif.....else。trim标记是一个格式化的标记,可以完成set或者是where标记的功能。choose标签是这个标签组合当中的父标签和标签都在标签内部。when标签就相当于是 if 和 elseif。otherwise标签相当于是else。where标签使用在if标签的外面。

best_virtuoso的博客 313

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MyBatis动态SQL语法详解(二)

一、MyBatis查询返回 1.1、MyBatis查询返回对象 Dao接口: public employee getEmpById(Integer id) ; mapper映射SQL: <select id="getEmpById" resultType="com.xiaolang.employee"> select * from employee where id=#{id}...

qq_25083447的博客 2831

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Mybatis(二)——动态SQL

Mybatis框架的动态sql技术是一种根据特定条件动态拼接SQl语句的功能,他存在的意义是为了解决拼接SQL语句字符串时的痛点问题。比如我们在用淘宝之类的软件在进行商品属性选择的时候,我们会发现我们可以选择的商品的属性有很多条件,其中一些条件可以选择也可以不选择,那么如果使用传统的方式进行查询,反而在拼接sql的时候会造成一些列的问题。......

qq_45830276的博客 516

MyBatis笔记(二)动态sql

MyBatis笔记二动态sql:一. < if >< where >1. sql处理 ????2. 标签处理二. < foreach >1. 属性(Grade类:List ids) 动态sql: 简单来说就是sql的拼接 一. < if >< where > 1. sql处理 ???? 作用:拼接Sql语句,person有name属性 且 不为null 注意所有 SQL字段大小写忽略,但是 实体类属性区分大小写 第二个拼接语句 开

weixin_41852068的博客 423

Mybatis(二)动态SQL

二、动态SQL 1、 IF 标签 在Product.xml中 <select id="listProduct" resultType="Product"> select * from product_ <if test="name!=nu...

choucui0160的博客 201

(二)Mybatis动态sql

首先动态sql简单来讲就是可以根据传入参数的不同来动态的生成sql语句,拼接where语句,这样你就不用写很多个sql语句了,并且它里面有一些特性也可以帮助你避免sql语句的拼接错误,主要分为4个: if,chooose,trim,foreach IF: 对参数进行判断,拼接不同的sql语句,看一个例子 <select id="selectByIf" param...

weixin_30808693的博客 115

mybatis学习(二)mybatis 动态sql

MyBatis的强大特性之一便是它的动态SQL,这里主要说下<if>,<choose>,<where>,<set>,<foreach>,<bind>。搭建mybatis(基于springBoot)和增删改查,见上文 一、if <select id="selectByUser" resultType="com.lbc.mybatisDemo.book.model.SysUser"> select *

qq_35642849的博客 400

Mybatis 框架 ( 二 ) 动态SQL

通过在SQL中加入特定的标签, 使最终生的可执行SQL语句的结构不再是固定而是根据传入的参数动态动态组合出符合需求的SQL语句从而避免了其他框架中可能出现的大量if-else嵌套和手工拼接SQL的情况使SQL语句,更加通用且强大。

yuanchun的知识整理 1129

mybatis实践篇(二)—— 动态SQL

mybatis的SQL 映射文件中的顶级元素: cache– 对给定命名空间的缓存配置。 cache-ref– 对其他命名空间缓存配置的引用。 resultMap– 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。 sql– 可被其他语句引用的可重用语句块。 insert– 映射插入语句 update– 映射更新语句 delete– 映射删除语句 s...

zhoushimiao1990的博客 972

mybatis源码解读二动态sql标签解析

每个 select、insert /、update 、delete 对应一个 MappedStatement 对象,每个MappedStatement 包含一个SqlSource, 一个SqlSource含有一个MixedSqlNode,静态sql,${},include在解析mpper文件生成MixedSqlNode时,就已经被替换和解析、 DynamicSqlSource:处理动态sql,...

snoweaglelord的博客 386

二刷Mybatis(十一)动态SQL

引言 Q:为何使用动态SQL? A:举例:正常情况下具有多个限制条件的语句是这样的 (查询全班学生名字如果人数等于20人,且如果男生大于女生人数.....) 为了简化这种情况带来的复杂语句编写 1 搭建动态sql环境 2 标签 2.1 if 目的: 没有指明查询什么数据的时候全部查出来; 当指明需要查询某作者,某标题也可以查到对应的数据; select * from blog where auther=#{auther} and title=#{title} //但是这样显然不可以满足上述两个条

Wyatt_zhai 2088

MyBatis专题(二)-动态SQL

MyBatis

weixin_43139024的博客 234
上一篇: MyBatis(一)-映射
下一篇: MyBatis(三)-事务管理和缓存机制
Dream答案
博客等级 码龄9年 161粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream答案

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值