背景:今天做的一个数据查询sql里,需要一个这样的语句 select * from activity where ((startDate BETWEEN '2015-05-25' and '2015-06-02') or (endDate between '2015-05-25' and '2015-06-02')) and providerId= 1; 由于项目用的是MyBatis,经过网上的一番查找,下面贴下解决方案 ActivityCriteria activityCriteria = new ActivityCriteria(); ActivityCriteria.Criteria criteria= activityCriteria.createCriteria(); criteria.andStartDateBetween(startTime, endTime); criteria.andProviderIdEqualTo(providerId);
ActivityCriteria.Criteria criteria2 = activityCriteria.createCriteria(); criteria2.andEndDateBetween(startTime, endTime); criteria2.andProviderIdEqualTo(providerId); activityCriteria.or(criteria2); List<Activity> result = activityMapper.selectByExample(activityCriteria); 关键是要通过or将两个条件连接起来,其中需要注意的是,对于公共的条件(例子中的providerId=1),需要在两个条件的Criteria都拼接上去,不然查询语句是有问题的 看MyBatis刷出来的查询日志是酱紫的 select 'true' as QUERYID, Id, title, subject, content, address, display, Url, order
, probability, providerId, isMain, startDate, endDate, serve_id, branch_id from activity WHERE ( startDate between ? and ? and providerId = ? ) or( endDate between ? and ? and providerId = ? )