Example.Criteria的使用

排序

//查询即将结束的项目,根据结束时间排序
 public List<ZczyItem> selectItemByendTime() {
        Example example = new Example(ZczyItem.class);
        Example.Criteria criteria = example.createCriteria();
        //指定排序规则,参数1是数据库中的列名,参数二是排序规格,ASC升序,DESC降序,多个条件用逗号分隔
        example.setOrderByClause("end_time ASC,id ASC");
        List<ZczyItem> zczyItems = itemMapper.selectByExample(example);
        return zczyItems;
    }

一个字段模糊查询多个字段

1、搜索条件只有这个模糊搜索条件

直接使用example.or(criteria)
likeField就是前端传来的搜索条件,通过它来模糊查询项目名称,项目id,项目负责人名称
代码如下:

 ProInfoExample proInfoExample= new ProInfoExample();
        ProInfoExample.Criteria criteria = proInfoExample.createCriteria();
        //项目名称
        if (StringUtils.isNotEmpty(likeField)) {
            proInfoExample.or(proInfoExample.createCriteria().andTenderNameLike("%" + likeField + "%"));
        }
        //项目id
        if (StringUtils.isNotEmpty(likeField)) {
            proInfoExample.or(proInfoExample.createCriteria().andTenderIdLike("%" + likeField + "%"));
        }
        //项目负责人名称
        if (StringUtils.isNotEmpty(likeField)) {
            proInfoExample.or(proInfoExample.createCriteria().andProLeaderNameLike("%" + likeField + "%"));
        }

生成的SQL就是这样:

select  * 
from T_TENDER_PRO_INFO 
where 
TENDER_NAME like '%XX%'
or TENDER_ID like '%XX%' 
or PROLEADER_NAME like '%XX%'

2、搜索条件还有其他条件条件

1、修改生成的XXXExample.java文件

在文件的XXXExample类里面有一个GeneratedCriteria 类,里面的方法就是我们常用的增加查询条件的方法,比如 andTenderIdEqualTo(),andTenderIdIsNotNull等
我们要做的就是在这些原有的方法后面加一个方法,我加的方法名为andLikeFieldLike(),代码如下:

 public class ProInfoExample {
	protected abstract static class GeneratedCriteria {
        public Criteria andLikeFieldLike(String condition,String value,String field) {
            addCriterion(condition,value==null?"and 1=1":value, field);
            return (Criteria) this;
        }
	}
}

condition:查询的条件语句
value:传值字段
field:操作的哪个字段
这样我们通过这个方法就可以添加查询语句了
调用代码如下:

 ProInfoExample proInfoExample= new ProInfoExample();
        ProInfoExample.Criteria criteria = proInfoExample.createCriteria();
        //部门名称
        if (StringUtils.isNotEmpty(proInfo.getProLeaderDeptId())) {
           criteria.andProLeaderDeptIdEqualTo(proInfo.getProLeaderDeptId());
        }
        //项目id,项目名称,项目负责人名称模糊查询
        if(StringUtils.isNotEmpty(likeField)){
            criteria.andLikeFieldLike("(TENDER_ID like '%"+likeField+"%' or TENDER_NAME like '%"+likeField+"%' or OPERATION_PERSON_NAME like  '%"+likeField+"%')  and 1=","1","likeField");
        }
     }

生成的SQL就是这样:

select  * 
from T_TENDER_PRO_INFO 
where 
PROLEADER_DEPT_ID =''
and 
(
 TENDER_NAME like '%XX%'
 or TENDER_ID like '%XX%' 
 or PROLEADER_NAME like '%XX%'
)
and 1=1

这里的and 1=1只是为了criteria在设置时不为空,所以加了此值,否则mybatis拼接参数时报错
这样问题便完美解决了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值