Flask接口签名sign原理与实例代码浅析
422
2023-01-23
利用MyBatis进行不同条件的like模糊查询的方法
之前一直是用MyBatis进行SQL查询时,一般都是用Generator逆向生产的代码来进行查询。
现在遇到了一个业务问题,我们需要进行对不同的条件分别进行模糊查询,首先我想到的就是根据对需要进行模糊查询的字段进行判断,然后调用Example的方式进行查询条件的注入。
对于String类型的数据可以有Like查询这个方法,但是Integer或者Long这种数据类型的话就没有了,得需要自己动手写。
但是呢,我利用Generator生成的代码Example方式进行模糊查询时确无法实现,原因不太清楚,但是感觉代码没问题。
于是,只能我们自己手动写SQL语句了。
但是呢,每个查询条件都写一个查询语句的话,简单归简单,但是太麻烦。
那么,我们能不能利用一个查询来实现对不同字段的模糊查询呢?
我的方法
1。首先,定义Search类,有查询字段Type,和查询条件Condition,利用这个类将数据传入SQL查询中。
public class SearchType {
private String type;
private String condition;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
}
定义好类后,我们在Service中调用Mapper查询方法
public List searchUser(String type,String condition) {
SearchType search = new SearchType();
search.setCondition(condition);
search.setType(type);
//模糊查询各字段
List
return list;
}
这里的MKUser是我们查询结果后存储数据的类
下面看看Mapper.xml是如何实现的
select userid ,username ,we_name ,we_number ,tel_number ,updateTime ,invite_number ,purchased_total
from mk_user
where ${type} like CONCAT(CONCAT('%',#{condition}),'%')
关于为什么一个地方是${},另一个是#{},自己查询这两个的区别。
注意数据库中的字段跟MKUser类中字段的对应,
我利用BaseResultMap进行了对应。
这样就搞定了。
Mybaits Generator 模糊查询 (like)的使用方式
like 使用
使用like时如果不手动拼接 % 等上去的话很难达到模糊搜索的要求,默认生成的SQL语句如下:
如传入变量是 paramsValue
SELECT count(*) FROM table WHERE (table_a LIKE paramsValue)
由此可得,我们可以给传入的变量手动拼接 %,也就是说
paramsValue = "%" + paramsValue + "%"
之后再传入 则可以达到模糊匹配的效果,当然这种前后都加 % 的做法尽量避免使用,数据量大的情况下检索效果不会太好,因为会进行全表检索,而不使用索引。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~