mybatis sql使用及Oracle模糊查询

1.第一个问题

sql在数据库能查到但是,执行时就是什么都没有,网上查了下,解决办法,可能可数据库数据类型有关,如果是char(10)长度为10的话,可能不足10个都用空格补位了,所以这个时候要加trim()函数去空格,因为

但我加上并没有什么用,而且我数据库类型varchar可变长度

 

这个是用postman的请求

这个是查询结果,但当时这个参数是'37',查询结果totel = 0

xml地方去掉参数直接查询就正常了,由此判断是还是传参问题,但注解传参也没发现有什么问题

xml页面用#进行接收

最后看了下sql编译结果发现 select * from table where provCode = ''37''

是这个条件去查的,不是双引号,而是嵌套了两个单引号,那么匹配条件自然没有里面于''单引号的.

解决办法,其实是个失误,

postman拼接参数不加''单引号即可,笑哭

在就是可以使用${value} 来进行接收 ,${value} 不会自动加''号

再就是记录一些小规范 ,#和{之间不能有空格

 

不能写分号结束,会报无效的字符

 

再就是一个模糊查询的问题,首先说下两种接收参数区别

#{} 会在 变量外侧 加上 单引号

${} 并不会

但我们应尽量避免使用 ${} ,因为这个最终会将参数拼接到 sql语句上,存在sql注入的问题。

 两种办法

1.使用'%${name}%'  这种方式,但是这种方式并不好,上面说了,有sql注入的风险。

2.我们可以采用 name like concat('%',#{name},'%') 这种方式来进行字符串拼接.

但是以上拼接在oracle中是错误的,因为oracle中concat函数拼接3个要嵌套拼接

concat(concat('aa','bb'),'cc')

或者使用

注意第二种方法后面两个只限oracle,mysql concat('%',#{name},'%')就可以 了,第一种方法则都可以

 

  1. <!--方法三: 使用 bind 标签,对字符串进行绑定,然后对绑定后的字符串使用 like 关键字进行模糊查询 -->
  2. <if test="email != null">
  3. <bind name="pattern" value="'%'+email+'%'"/>
  4. and email like #{pattern}
  5. </if>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值