mybatis-210721-01---动态sql-if判断&where查询条件

1999年-2022年 上市公司-企业劳动生产率数据(原始数据、代码、最终结果、参考文献) 上市公司企业劳动生产率数据集为企业和市场参与者提供了一个深入分析企业生产效率和劳动效益的工具。通过这些数据,企业可以不断探索创新的发展模式和管理方式,努力提高生产效率,为提升市场竞争力和盈利能力做出贡献。数据名称:上市公司-企业劳动生产率数据数据年份:1999-2022年数据来源:国泰安数据库1999年-2022年 上市公司-企业劳动生产率数据(原始数据、代码、最终结果、参考文献) 阅读详情

mybatis-210721-01—动态sql-if判断&where查询条件.md


if_判断

EmployeeMapper.java

package com.bgy.mybatis.dao;
import java.util.List;
import com.bgy.mybatis.bean.Employee;

public interface EmployeeMapper {
	
	public List<Employee> getEmpsByConditionIf(Employee employee);
}

EmployeeMapper.xml(笔记在这儿)

<?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.bgy.mybatis.dao.EmployeeMapper">
	
	<!--
		if
		choose(when,otherwise)
		trim(where,set)
		foreach
	-->
	<!--
		查询员工
			要求:
			携带了那个字段,查询条件就带上这个字段的值
	-->
	<select id="getEmpsByConditionIf" resultType="com.bgy.mybatis.bean.Employee">
		select 
			* 
		from
			tbl_employee
		where
			<!--
				test:判断表达式(OGNL)
				从参数中取值
				
				遇见特殊符号需要转义
					比如: " " ==(转义)==> &quot;&quot;
			-->
			<if test="id!=null and id!=''">
				id=#{id}
			</if>
			<if test="lastName!=null and lastName!=&quot;&quot;">
				and last_name like #{lastName}
			</if>
			<if test="email!=null and email.trim()!=&quot;&quot;">
				and email like #{email}
			</if>
			<!-- ognl会自动进行字符串和数字的转换判断	"0"==0 -->
			<if test="gender==0 or gender==1">
				and gender=#{gender}
			</if>
	</select>
</mapper>

MybatisTest.java

package com.bgy.mybatis.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;

import com.bgy.mybatis.bean.Department;
import com.bgy.mybatis.bean.Employee;
import com.bgy.mybatis.dao.DepartmentMapper;
import com.bgy.mybatis.dao.EmployeeMapper;

class MybatisTest {
	
	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}

	
	/**
	 * 测试sql——if判断
	 * @throws IOException
	 */
	@Test
	public void test() throws IOException{
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		try {
			EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
			
			Employee employee = new Employee(1,"","","1");
			List<Employee> emps = mapper.getEmpsByConditionIf(employee);
			
			System.out.println(emps);
		} finally {
			sqlSession.close();
		}
	}
}


where查询条件

EmployeeMapper.xml(笔记在这儿)(where)(1=1)

<?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.bgy.mybatis.dao.EmployeeMapper">
	
	<!--
		if
		choose(when,otherwise)
		trim(where,set)
		foreach
	-->
	<!--
		查询员工
			要求:
			携带了那个字段,查询条件就带上这个字段的值
	-->
	<select id="getEmpsByConditionIf" resultType="com.bgy.mybatis.bean.Employee">
		select 
			* 
		from
			tbl_employee
		where 
        	1=1
			<!--
				查询的时候如果某些条件没带sql,拼装可能有问题
				解决:
					1、给where后面加上 1=1 ,以后的条件都是    and xxx
					2、mybatis使用where标签来将所有的查询条件包括在内。
			-->
			<if test="id!=null and id!=''">
				and id=#{id}
			</if>
			<if test="lastName!=null and lastName!=&quot;&quot;">
				and last_name like #{lastName}
			</if>
			<if test="email!=null and email.trim()!=&quot;&quot;">
				and email like #{email}
			</if>
			<!-- ognl会自动进行字符串和数字的转换判断	"0"==0 -->
			<if test="gender==0 or gender==1">
				and gender=#{gender}
			</if>
	</select>
</mapper>

EmployeeMapper.xml(笔记在这儿)(where标签)

<?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.bgy.mybatis.dao.EmployeeMapper">
	
	<!--
		if
		choose(when,otherwise)
		trim(where,set)
		foreach
	-->
	<!--
		查询员工
			要求:
			携带了那个字段,查询条件就带上这个字段的值
	-->
	<select id="getEmpsByConditionIf" resultType="com.bgy.mybatis.bean.Employee">
		select 
			* 
		from
			tbl_employee
			<!--
				查询的时候如果某些条件没带sql,拼装可能有问题
				解决:
					1、给where后面加上 1=1 ,以后的条件都是    and xxx
					2、mybatis使用where标签来将所有的查询条件包括在内。
					   mybatis就会将where标签中拼装的sql,将多出来的and或or去掉。
					   where只能去掉第一个多出来的and或or。
			-->
			<where>
				<if test="id!=null and id!=''">
				id=#{id}
				</if>
				<if test="lastName!=null and lastName!=&quot;&quot;">
					and last_name like #{lastName}
				</if>
				<if test="email!=null and email.trim()!=&quot;&quot;">
					and email like #{email}
				</if>
				<!-- ognl会自动进行字符串和数字的转换判断	"0"==0 -->
				<if test="gender==0 or gender==1">
					and gender=#{gender}
				</if>
			</where>
	</select>
</mapper>
2026年MathorCup数学应用挑战赛大数据竞赛赛道A论文分享 本文基于250款啤酒的化学与感官数据,构建以化合物-感官关系为核心的风味解析框架。通过多输出偏最小二乘与稀疏多任务建模,实现化合物组成到感官强度的稳健映射,并分离连续预测与等级校准;结合Spearman相关网络与重复抽样稳定性分析,筛选各感官属性的关键候选化合物;在低维潜在空间中保留真实风格统计结构,生成Tripel、Kriek等风格的合理化合物谱,并实现Pils/Lager向Tripel的受约束迁移,确保缺陷指标不恶化。三问共享统一数据尺度与模型逻辑,形成可检验的“预测—解释—生成”闭环,强调化学合理性与 阅读详情

相关推荐

STM32F407 CanOpen主机实战:对象字典配置与多电机CIA402协议驱动详解

本文详细介绍了基于STM32F407的CanOpen主机开发实战,重点解析了对象字典的配置流程与多电机CIA402协议驱动方法。通过使用objdictedit工具配置SDO和PDO参数,并整合CanFestival协议栈,实现了对多个伺服电机的稳定同步控制。文章提供了从硬件连接到代码调试的完整指南,帮助开发者快速掌握工业现场的多轴运动控制技术。

plant的博客 529

Mybatis和SpringBoot 如何通过动态列查询

现在要编写一个查询方法,查询User表中符合条件的记录,**但是查询的列是动态的,即不确定查询哪些列,可以根据用户传入的参数决定。

柳落青 3586

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的另一种解决办法

昨天在关闭了中之后 就能正常打开 FDTD 了,结果今天想开启出现了同样的报错:我猜测昨天能启动的原因在于关闭之后要重启电脑,并且在重启之后我第一时间打开 lumerical 测试因此端口没有被占用,今天是在电脑启动之后一段时间才打开所以又遇到了端口占用的问题。

qq_51404184的博客 9549

MyBatis list Contains MyBatis 动态SQL 判断List Contains

MyBatis list Contains MyBatis 动态SQL 判断List Contains 一、情景描述 在使用MyBatis 动态SQL查询时,有时候需要判断集合中是否有某个元素,若存在则 动态添加某个 表的关联查询 (常见场景:统计的时候,动态添加某个统计项,需要从关联表中查询),不存在,则不进行任何操作。 在MyBatis 动态SQL中,如何实现呢? 二、代码演示 1、在Java代码中,有2个类型的list,分别是 字符...

HaHa_Sir的博客 1万+

立创开源:基于AD831/ADF4351的250-500MHz宽频调幅信号处理实验电路设计与实现

本文详细解析了基于AD831混频器和ADF4351本振源的250-500MHz宽频调幅信号处理实验电路的设计与实现。文章从项目需求出发,系统讲解了超外差接收架构、核心模块(包括射频前端、混频器、本振源、AGC环路及解调电路)的选型与原理,并提供了实战调试波形与性能验证,为射频电路学习者提供了从理论到实践的完整指南。

weixin_35706255的博客 227

Python爬虫实战:基于Scrapy和Playwright的深交所数据采集

本文将详细介绍如何使用Python最新技术栈(Scrapy框架结合Playwright浏览器自动化)爬取深圳证券交易所(www.szse.cn)的公开数据。文章包含完整项目搭建、反爬策略应对、数据解析存储等全流程实现,并附详细代码示例和性能优化建议。python复制下载# 上市公司基本信息# 财务数据revenue = scrapy.Field() # 营业收入net_profit = scrapy.Field() # 净利润eps = scrapy.Field() # 每股收益。

2201_76125261的博客 950

16、动态SQL之<where>、<if>条件判断

错误方式一: 在mybatis的动态sql语句中使用标签可以判断sql中的条件是否成立。 select id="getPerson" resultType="com.lzj.bean.Employee"> select * from tbl_employee where if test="id!=null">

u010502101的博客 4万+

反应动力学仿真软件:Kintecus_(12).高级功能与技巧

Kintecus允许用户自定义复杂的反应方程,包括非线性反应和多相反应。通过自定义反应方程,用户可以更准确地描述实际反应系统。多尺度仿真是指在同一模型中同时考虑不同时间和空间尺度的反应过程。Kintecus提供了工具来处理从微观分子动力学到宏观反应动力学的多尺度仿真。通过本节的学习,您已经掌握了Kintecus的高级功能与技巧,包括复杂反应网络的构建、参数优化与敏感性分析、自定义反应机制、多尺度仿真、并行计算与批处理,以及数据可视化与后处理。

kkchenjj的博客 1048

Mybatis中where标签和if标签结合使用说明

当标签判断失败后,标签关键字可以自动去除掉库表字段赋值前面的and,不会去掉语句后面的and关键字,即标签只会去掉标签语句中的最开始的and关键字。所以上面的写法(and写在后面)是不符合mybatis规范的。

鳄鱼儿 4759

使用 Python 实现基于 AGA8 GERG - 2008 方程计算掺氢天然气压缩因子的示例代码

AGA8 GERG - 2008 方程是用于计算天然气混合物热力学性质的一种方法,下面是一个使用 Python 实现基于 AGA8 GERG - 2008 方程计算掺氢天然气压缩因子的示例代码。需要注意的是,AGA8 GERG - 2008 方程非常复杂,完整实现需要大量的系数和详细的计算步骤。这里我们简化了部分过程,使用CoolProp库来完成计算,因为CoolProp已经实现了 GERG - 2008 方程。

AI的内部世界的博客 887

微信小程序数据采集实战:抓包+接口分析+动态数据全流程

微信小程序爬虫虽然比普通网页爬虫复杂,但只要掌握了正确的方法,其实并没有想象中那么难。核心思路就是:先绕过证书校验抓包,然后反编译小程序找到加密逻辑,最后用Python模拟相同的加密和解密过程。需要特别提醒的是,本文仅供技术研究使用。请遵守《网络安全法》和相关法律法规,不要爬取他人的敏感数据,不要将爬虫技术用于非法用途。尊重他人的知识产权和数据安全,才能让技术发挥真正的价值。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1093

mybatis常用判断语法(标签)

作为java开发,我们常用的判断有if、switch语句,其实在MyBatis中也有对应的标签,用于动态生成sql语句。 1. if判断 <where> <if test="null != statusCode and 0 != statusCode"> AND b.STATUS_CODE = #{statusCode, jdbcType=VARCHAR} </if> </where> 一般来说,很多程序猿朋友会在&lt

aw277866304的博客 9227

Vue和Vue-Element-Admin(六):集成中的CORS(跨域资源共享)问题

在vue-element-admin登录集成时候碰到跨域资源共享问题,CORS(Cross-origin resource sharing)是浏览器的技术规范,浏览器可以发起跨域请求但Javascript脚本不能,传统的ajax只能获取在同域名下的资源,但Html5允许ajax发起跨域请求,解决方案有:JSONP、Flash、IFrame、CORS。 一、CORS(跨域资源共享)问题 针对vue-element-admin的登录模块的后端接口完成后,前端调用时候出现报错,因为前端的端口是9527而后.

叶子叶来 9614

Mybatis——基于XML操作(动态SQL:if判断,where条件查询,forEach循环,if + forEach)

动态SQL 1 为什么学习动态SQL 动态SQL可以满足实际开发中多条件查询功能。 2 什么是动态SQL 动态SQL:根据数据的不同,动态的拼凑SQL语句技术。 拼凑技术: 判断 if 循环forEach 简化条件 where 3 判断 if 场景1:通过id查询用户详情,如果id不存在查询所有。 功能接口的功能方法 List<User> selectBySQL(String uid); xml配置 <!-- 通过id查询详情 -->

Harden_zsc的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

mybatis动态标签where和if的使用及使用它们进行oracle的时间查询

概述 项目中通常来说是经常会用到动态去拼sql,那么经常会使用到where和if对数据库进行时间查询,下面对where和if的使用及sql语句的改造做一个简单的探究 动态标签 <where> <if test="state != null"> state = #{state} </if> <if test="title != null"> AND title like #{title} &l

weixin_40598838的博客 2461

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Mybatis Mapper的动态SQL语句问题、if-else、choose、when、foreach

文章目录Mybatis Mapper的动态SQL语句问题一、if二、choose、when、otherwise三、where四、trim 元素来定制 where 元素的功能五、set 动态地在行首插入 SET 关键字六、foreach七、script八、bind应用举例1、Mybatis Mapper中字符串if判断2、MyBatis Mapper中的if-else判断 内容来自mybatis官网,此处做学习记录,了解更多:Mybatis官网 Mybatis Mapper的动态SQL语句问题 一、if 使用

七七的博客 1万+

在Mybatis中如何在where-if的语句中判断数组或列表的长度是否为0?

来判断数组的长度是否为0。在Mybatis中,OGNL可用于在动态SQL语句中引用变量和方法。在if标签中的test属性中,使用OGNL表达式来判断idList是否不为空且长度大于0。如果成立,则使用foreach标签遍历idList数组,在SQL语句中生成对应的查询条件。假设要查询一个列表,查询条件包括一个列表idList,如果该列表不为空,则查询条件为id in (idList),否则查询条件为空。需要注意的是,在使用OGNL表达式时,需要遵循一定的语法规则,比如null值的判断、方法的调用等。

专注于优雅与性能的未来架构师 3680

mysql if判断值_[MySQL]MySQL数据库中如何使用IF判断语句查询基于列值的结果?

[MySQL]MySQL数据库中如何使用IF判断语句查询基于列值的结果?问题描述比如有以下数据表(report)的查询语句:SELECT id, amount,type FROM report需要查询的是根据 report 表的 type 字段进行判断,如果 type='P' 则 amount 为:amount,如果 type='N' 则 amount 为:-amount ,在MySQL语句中如何...

weixin_34511754的博客 1161

mybatis中if和where的使用讲解

mybatis中if和where用于动态sql的条件拼接,在查询语句中如果缺失某个条件,通过if和where标签可以动态的改变查询条件,用法示例入下: mapper代码: public interface UserMapper { //mybits的if和where的使用 public List<User> findUserList(UserQueryVO vo); } xml配置: <?xml version="1.0" encoding="UTF-8"?>

weixin_44682587的博客 7641

MyBatis----------------动态SQL----if where判断

动态SQL 5.1 if和where If标签:作为判断入参来使用的,如果符合条件,则把if标签体内的SQL拼接上。 注意:用if进行判断是否为空时,不仅要判断null,也要判断空字符串‘’; Where标签:会去掉条件中的第一个and符号。 5.2 SQL片断 Mybatis提供了SQL片段的功能,可以提高SQL的可重用性。 5.3 foreach 遍历 案例:查询指定id的用户 【SELECT * FROM `user` w...

qq_32659773的博客 197

mybatis 动态sql 查询列表时添加条件判断!

比较 &gt; -- geat than &gte; &lt; -- less than &lte; <if test='id != null and id gt 28'></if> 空判断 <if test="id != null and id !=''"></if> ...

qq_32265719的博客 2559

mybatis的鉴别列查询

在查询数据的时候,可以根据查询出来的数据来判断是否需要做进一步查询 dept的mapper文件 <!-- 鉴别器列 column 用于鉴别的列 javaType 列值的类型 SALES部门查员工 --> <collection property="emps" column="deptno" sele

Luke_R的博客 704

动态SQL_Mybatis的if和where 的使用

拼SQL的方法:1.if -and 标签if 可以对vo 标签的进行数值判断,拼凑SQL。这里我们可以使用规则的数据结构来存储和转发。 在mybatis的动态sql语句中使用标签可以判断sql中的条件是否成立。 在上面的动态sql语句中存在一个问题,当第一条sql判断语句where后面多一个and,执行sql时会失败: 在where条件后面加了一条判断1=1,然后在id的判断后加上and关键字,这样当下面if条件中的任何一个判断失败后,都不会影响整个sql语句。where条件的最后多一个and,sql语句执

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 1391

Mybatis-plus中动态SQL<where>、<if>条件判断的and写法

用where和if进行组合,当条件不成立时,if条件后的内容包括and会存在,因此会对整个sql语句产生影响 写法一 每个if判断前添加and时,在if前添加1 = 1 <select id="select" resultType="com.tzh.bean.Entity"> select * from department where 1=1 <if test="id!=null"> a

rabbitKing.的博客 1万+

MyBatis if标签:条件判断

MyBatis if标签:条件判断

qq_25073223的博客 1797

关于mybatis中where条件中的判断

查询语句中,如果声明paramType为Map方式,那么if条件中的判断条件还是用的Map中的键,跟实体类并没有关联。

qq_28550449的博客 3943

mybatis if where标签怎么使用?

先看不加判断的sql语句怎么写? 我们看到where和and。也就是说,当username和sex都有值的时候 使用where和and 那如果只有sex怎么办?或者只有username怎么办?这种情况下,上面语句就会出问题了。 所以,可以使用where标签和if标签。 小二,先上截图,给大爷们看看,然后咱们在讲解。 在Mapper-User.xml文件中: 接下来讲解where、if标...

Camel 4134
上一篇: mybatis-210720-04---映射文件_select_resultMap_discriminator鉴别器
下一篇: mybatis-210721-02---动态sql-trim自定义字符串截取
白光一
博客等级 码龄9年 0粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值