mybatis and,or复合查询操作

网友投稿 1035 2023-03-06

mybatis and,or复合查询操作

mybatis and,or复合查询操作

要查询的sql:

select * from user where name = ? and (age=? or city=?);

方法1:不使用Example查询

直接在usermapper.xml中修改sql

方法2:使用Example查询

sql可转换成

select * from user where (name = ? and age=?) or (name=? and city=?);

然后使用Example查询

UserExample example=new UserExample();

example.or().orAgeLike("%"+searchParam+"%").andNameEqualTo(userName);

example.or().orCityLike("%"+searchParam+"%").andNameEqualTo(userName);

补充知识:mysql/Mybatis多个AND和OR混用注意事项

mysql中AND的优先级高于OR,所以在查询时,会优先执行AND条件,除非使用()来将一个AND和OR括起来,这样才能使得OR得以按照语句的顺序执行。

如下图所示:

java测试代码

@Test

public void TestMutil(){

Species species = new Species();

ArrayList arrayList = new ArrayList();

arrayList.add("长喙蚤");

arrayList.add("尤氏");

List querySpeciesesListByMutilCondition = this.speciesMapper.querySpeciesesListByMutilCondition(arrayList, species.getEnglishName(), species.getHost(), species.getPosition(), species.getLocation(), species.getPhylum(), species.getClassName(), species.getOrder(), species.getFamhttp://ily(), species.getJenus());

for (Species s : querySpeciesesListByMutilCondition) {

System.out.println(s);

}

System.out.println(querySpeciesesListByMutilCondition.size());

}

Mapper文件中没有使用()放在语句中执行情况

SELECT * FROM t_json_species

AND englishName like CONCAT('%',#{englishName},'%') OR sameName like CONCAT('%',#{englishName},'%')

AND host like CONCAT('%',#{host},'%')

AND position like CONCAT('%',#{position},'%')

AND location like CONCAT('%',#{location},'%')

AND phylumName = #{phylumName}

AND className = #{className}

AND orderName = #{orderName}

AND familyName = #{familyName}

AND jenusName = #{jenusName}

AND name like CONCAT('%',#{name},'%') OR sameName like CONCAT('%',#{name},'%')

Mapper文件中使用()放在语句中执行情况

SELECT * FROM t_json_species

AND englishName like CONCAT('%',#{englishName},'%') OR sameName like CONCAT('%',#{englishName},'%')

AND host like CONCAT('%',#{host},'%')

AND position like CONCAT('%',#{position},'%')

AND location like CONCAT('%',#{location},'%')

AND phylumName = #{phylumName}

AND className = #{className}

AND orderName = #{orderName}

AND familyName = #{familyName}

AND jenusName = #{jenusName}

AND (name like CONCAT('%',#{name},'%') OR sameName like CONCAT('%',#{name},'%'))

补充:

如果这里使用多个%来解决上述的含有多个OR和AND情况,那么所实现功能会有问题,因为多个关键词有%来连接,会有一个次序问题。具体效果见下图

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在mybatis中去除多余的前缀或者后缀操作
下一篇:vue 能开发微信小程序(可以用vue开发微信小程序)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~