当前位置:   article > 正文

mybatis example处理动态and、or复杂关系的方法_mybatis循环or

mybatis循环or

较简单的基本情况,可以去这个网页看https://blog.csdn.net/wang_song_yan/article/details/49081901

我要分享的是比较复杂的情况下的例子(感觉是分享mybatis example的一些缺陷,以及如何解决这些缺陷)
本质就是mybatis example不能直接实现(a)and(b or c),必须要转换成(a and b)or(a and c)才能用的问题。
如果自己写mapper配置文件就会发现,只要涉及到动态查询,就会面临and和or只能二选一的窘境。所以直接用繁琐的方法调用已经给定的方法或者直接静态sql语句,可能才是大道质朴的唯二解法。(泪目)
(希望来个大佬告诉我怎么动态无限制的嵌套and和or,55555)

注意:
1.首个容器如果不手动添加or,则不会在循环中自动的重复添加or。
2.如果手动添加了or,则首个容器的第一条数据会多加载一次,但是由于是or,所以哪怕or了两次也无所谓。
3.代码没有写全,set存储的是未知个数字,vo就是前端传入的一个数据类(HomeTeam是主场队伍,VisitingTeam是客场队伍,set中存储的数据就是为了同时对应主客场球队的属性而传入的,TypeId是赛事类型)不过这些是啥不重要,看到实现方法怎么弄的和我前面说的两个注意点就行。

代码如下:

for (Integer integer :set){
	//开始复数个条件的循环差入
	if (vo!=null){
	     GameExample.Criteria criteria= example.createCriteria();
	     criteria.andHomeTeamIdEqualTo(integer);
	     //调用方法存入其他简单的and条件
	     inputCriteria(criteria,vo);
	     //第一条 条件 数据会重复加载多一次,但这样可以保证后续的第一个 容器 的数据能够or入实例中去
	     example.or(criteria);
	 }
	 //创建第二个and条件的容器
	 if (vo!=null){
	     GameExample.Criteria criteria1 = example.createCriteria();
	     criteria1.andVisitingTeamIdEqualTo(integer);
	     inputCriteria(criteria1,vo);
	     //将第二个容器or入例子中
	     example.or(criteria1);
	 }
}

private void inputCriteria(GameExample.Criteria criteria, QueryVOGame vo){
	if (vo.getBeginDate()!=null){
	    criteria.andGameDateGreaterThanOrEqualTo(vo.getBeginDate());
	}
	if (vo.getEndDate()!=null){
	    criteria.andGameDateLessThanOrEqualTo(vo.getEndDate());
	}
	if (vo.getHomeTeamScore()!=null){
	    criteria.andHomeTeamScoreEqualTo(vo.getHomeTeamScore());
	}
	if (vo.getVisitingTeamScore()!=null){
	    criteria.andVisitingTeamScoreEqualTo(vo.getVisitingTeamScore());
	}
	if (vo.getTypeId()!=null&&vo.getTypeId()!=-1){
	    criteria.andTypeIdEqualTo(vo.getTypeId());
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/158308
推荐阅读
相关标签
  

闽ICP备14008679号