mysql查是否为空语句_MySql查询所有字段不为空值的数据及Mybatis的#号和$符的区别引起的问题...

1.MySql查询所有字段不为空值的数据

搜了一上午搜不到,最后用Mybatis的foreach标签,先查询出表字段,

SELECT COLUMN_NAME

FROM INFORMATION_SCHEMA.Columns

WHERE table_name='lltest'

然后传入了另一条SQL中,使用foreach标签完成了这个操作。

SELECT *FROM lltest

WHERE

${item} IS NOT NULL

2.#号和$符号的区别

在使用foreach的时候,发现使用#号来获取字段名时,查询到的结果跟mysql直接查询的结果不一样,会查询出所有数据,感觉没有条件限制。

这个原因是#号会把获取到的值加上双引号,当字符串来使用,而我循环的是字段名,字段名不能用双引号。改为$符号就可以了。

#相当于对数据 加上 双引号,$相当于直接显示数据

3.对比:

###使用#号时log4j打印的SQL语句

SELECT *  FROM lltest WHERE

? IS NOT NULL

AND

? IS NOT NULL

AND

? IS NOT NULL

这些?都是#号替换的会加上双引号,所以执行这条SQL相当于没有条件限制

查询出的结果

bd0efcc2c89bcbc93b65c4a310e96633.png

###使用$符号log4j打印的SQL语句

SELECT * FROM lltest WHERE

f1 IS NOT NULL

AND

f2 IS NOT NULL

AND

f3 IS NOT NULL

c62b4415dd38ffc61fb75cc0fbdddbe0.png

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

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id.

3. #方式能够很大程度防止sql注入。

4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名.

6.一般能用#的就别用$.

MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值