使用MyBatis进行模糊查询时%到底写哪儿的解决办法
2017-04-14 21:46
417 查看
介绍
这种解决办法。。。感觉非常Nice!!解决办法
在我们以前写sql语句的时候,我们通常是这样写的。SELECT * FROM user WHERE username LIKE #{likeUser}
我们在Java代码中我们是这样传值的:
%FireLang%
到现在才知道,这种写法太有耦合度了,代码写得太丑了!!
*\_/*难看的脸。
sql语句不能够在Java代码中出现,我们要做的只是传入值,只是传入值!!!
如果哪儿天MySql要大换血,把%废了,那我们还要改Java代码??虽然可能性几乎为零。但是我这里讲的是一种思想!!一种思想!!!任何地方都要尽可能的减少耦合!!!不要耦合!!不要耦合!!!
所以你表达了这么多,现在能告诉我解决办法了吗??orz
解决办法就是。。。把查询语句改为:
SELECT * FROM user WHERE username LIKE '%#{likeUser}%'
你觉得可以吗??我这样问你,你是否会思考这个问题到底有问题呢还是没问题呢还是这个问题到底有没有问题。。。晕没有。。反正我晕了。这问题到底是不是问题。。这个问题的问题到底有没有问题。。
试试不就知道咯!!
最终测试结果不尽人意。。。
Caused by: java.sql.SQLException: No parameters defined during prepareCall() Caused by: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null .
哦豁。。。不得行!!!它说没得第一个占位符。
没有第一个占位符也就不可能把值设置进去了。看一下它发送的sql语句:
Preparing: SELECT * FROM user WHERE username LIKE '%?%'
嗯??这不是有占位符吗??为什么呢??想了想。。。。。嗯!!明白了这个
"?"号写在单引号里面的。所以这个
"?"被当成值处理了!!!
那还有什么办法呢??
试试这个!!
SELECT * FROM user WHERE username LIKE '%'+#{likeUser}+'%'
拼起来不就行咯。哈哈!!完美!!
咳!!各位读者啊,我想问一下。这个真的可以运行吗??
好!再试试!!
嗯。发送sql语句正常!!不错不错。
Preparing: SELECT * FROM user WHERE username LIKE '%'+?+'%'
嗯??还报错!!!
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;
*_*,MySQL。你逗我吧!!我这个有语法错误??我用
"+"号拼接字符串还有错??你有病吧!!MySQL!!MD!!
*_*
不跟你玩了,快告诉我正确答案!!
其实很多程序员都犯这个错!!错了还不知道到底错在哪儿??在MySQL中
"+"号是被重写了的,它对于字符串来说并没有拼接的功能,反而只对数字有正常的加法功能!!!
所以啊!你还记得concat()这个方法不??
在MySQL中的用法:
concat('hello ','FireLang')//输出hello FireLang
所以我们可以这样写MyBatis的sql代码:
SELECT * FROM user WHERE username LIKE concat('%',#{username},'%')
好了正确答案告诉你了!!
表个态吧!!感觉我这篇文章怎么样???请点赞吧!!!
相关文章推荐
- MyBatis-模糊查询控制台不报错,但是得到的结果集合确是0的问题解决办法
- 使用Mybatis进行模糊查询的几种常用方法
- 对于Sql模糊查询的话,需要对多个字段进行模糊查询的解决办法
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- MyBatis中使用bind标签构造模糊查询失败的解决方法
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- myBatis 操作 mysql时,使用 like 关键进行模糊查询的方法
- ssh框架整合时使用hibernateTemplate进行find查询时出现空指针异常的解决办法
- Mybatis使用MySQL进行模糊查询时输入中文检索不到结果
- mybatis中使用动态参数进行模糊查询
- MyBatis下动态语句使用like进行模糊查询
- Mybatis模糊查询,查询不到中文,却可以查询到英文和数字的一种解决办法
- Mybatis 中sql 使用in(#{item})无法查询解决办法
- 使用distinct在mysql中查询多条不重复记录值的解决办法
- 使用 PreparedStatement 进行模糊查询
- 未能使用提供程序 "RsaProtectedConfigurationProvider" 进行解密 的解决办法
- 使用 PreparedStatement 进行模糊查询
- 使用 PreparedStatement 进行模糊查询
- 使用 PreparedStatement 进行模糊查询
- 使用 PreparedStatement 进行模糊查询