排序
//查询即将结束的项目,根据结束时间排序
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拼接参数时报错
这样问题便完美解决了!