mybatis sql语句中 like in() 长度为0或null的情况

mybatis sql语句中 like in() 长度为0或null的情况

比如:

select * from A
where colName LIKE IN
<foreach collection="moCodeList" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>

想要查询 colName LIKE IN ( 列表) 条件下的数据,如果列表 为null 或者长度为0
语句就变成了 colName LIKE IN () 这样的语法是不对的

改进

select * from A
where colName LIKE IN
<if test="moCodeList != null and moCodeList.size>0">
   <foreach collection="moCodeList" item="item" index="index" open="(" close=")" separator=",">
     #{item}
   </foreach>
</if>
<if test="moCodeList==null or moCodeList.size==0">
    and 1=0
</if>

用if 标签 来区分,如果LIKE IN 条件里的列表为0 那么,走条件 1=0

原文地址:https://www.cnblogs.com/magicya/p/11540013.html

时间: 2024-11-05 17:25:38

mybatis sql语句中 like in() 长度为0或null的情况的相关文章

mybatis sql语句中转义字符

问题: 在mapper  ***.xml中的sql语句中,不能直接用大于号.小于号要用转义字符 解决方法: 1.转义字符串 小于号    <    < 大于号    >    > 和    & & 单引号    '    &apos; 双引号    "    " 2.使用<![CDATA[  你的sql语句 ]]>(sql语句中的<where><if>等标签不会被解析) 如: SELECT top ${

sql语句中where 1=1和 0=1 的作用

sql where 1=1和 0=1 的作用 where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where  1=1  在多条件查询中的困扰 举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下: string MySqlStr="select * from table where": if(Age.Text.Lenght>0) {

sql语句中 where 1=1和 0=1 的作用

where 1=1和 0=1 的作用 where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where  1=1  在多条件查询中的困扰 举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下: string MySqlStr="select * from table where": if(Age.Text.Lenght>0) { MySq

mybatis sql语句配置

1.mybatis判断是否为空或null <if test="type!=null and type!=''"> AND type = #{type} </if> 2.Mybatis中的like查询 今天要做一个模糊查询 用的Mybatis 开始写的是: select id,bookName,author,publisher,donor,status,createDate,lastUpdate from book <where> <if tes

SQL语句中的表操作

数据库中主要的部分是不同的表,在SQL语句中提供了一些对于表的操作.我们讨论的操作都是在SQL SERVICE中的 一.新建表: 新建表的语法格式为:CREATE TABLE 表名(列名 数据类型[完整性约束条件], 列名 数据类型 [完整性约束条件],...);其中完整性约束条件可以添加也可以不加,如果不加也可以在表定义完成后另外在添加,比如我们现在需要创建一个学生表,可以使用这样的代码来创建: create table student(Sno char(10) PRIMARY KEY, Sn

SQL语句中,Conversion failed when converting datetime from character string.错误的解决办法

在项目开发过程中,我们经常要做一些以时间为条件的查询,比如查询指定时间范围内的历史记录,然而这些时间都是从UI传递过来的参数,所以我们写的sql语句就必须用到字符串拼接.当然,在C#中写SQL语句还好处理,可以使用C#的字符串函数做对应的数据类型转换.但是,如果用的是存储过程的话,就有点纠结了.下面来说一下我在写存储过程中遇到的问题: 为了更加直接的说明问题,写如下一个简单的例子: declare @dateFrom datetime; declare @dateTo datetime; dec

Mybatis SQL语句查询

MyBatis中使用in查询时的注意事项 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. 1. 当查询的参数只有一个时 findByIds(List<Long> ids)  1.a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list foreach元素的属性主要有 item,index,collection,open,separator,close. item表示集合中每一个元素进行迭代时的别名. index指 定一个名字,用

sql语句中#{}和${}的区别

#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". $将传入的数据直接显示生成在sql中.如:order by userid,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

回顾sql语句中的各种连接

1. 内连接(Inner Join) 内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接. 下面是ANSI SQL-92标准 select * from    t_institution i inner join t_teller t on i.inst_no = t.inst_no where i.inst_no = "5801" 其中inner可以省略. 等价于早期的连接语法 select * from t_institution i, t_telle