美文网首页
使用Example及Example[Criteria]

使用Example及Example[Criteria]

作者: Yluozi | 来源:发表于2021-05-12 15:19 被阅读0次

mybatis-generator会为每个字段产生Criterion,为底层的mapper.xml创建动态sql。如果表的字段比较多,产生的example类会十分庞大。理论上通过example类可以构造你想到的任何筛选条件。在mybatis-generator中加以配置,配置数据表的生成操作就可以自动生成example了。

它提供了一套sql操作的相关拼接方法
如:select * from user where name={#user.name} and sex={#user.sex} order by age asc;

example.setOrderByClause(“age asc"); //升序
 example.setDistinct(false); //不去重
 if(!StringUtils.isNotBlank(user.getName())){
 Criteria.andNameEqualTo(user.getName());
 }
 if(!StringUtils.isNotBlank(user.getSex())){
 Criteria.andSexEqualTo(user.getSex());
 }
 List<User> userList=userMapper.selectByExample(example);

开发时为更灵活实现查询功能,前端vue拼接一套自设的json对象为后端解析,创建PageRequest 对象如下:

package net.xxx.knmarket.model.util;


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.List;

/**
 * @author xxx
 * 分页查询请求模型类
 */
@ApiModel(description = "分页查询请求模型")
public class PageRequest {

    @ApiModelProperty(value = "页码", example = "1", required = true)
    int pageNo;
    @ApiModelProperty(value = "每页返回记录条数", example = "10", required = true)
    int pageSize;
    @ApiModelProperty(value = "排序字段")
    String orderBy;
    @ApiModelProperty(value = "查询字段")
    String query;
    @ApiModelProperty(value = "查询条件")
    String condition;
    @ApiModelProperty(value = "查询类型")
    String type;

    @ApiModelProperty(value = "queryList查询条件")
    List<Querys> querys;


    public void setType(String type) {
        this.type = type;
    }
    public String getCondition() {
        return condition;
    }

    public void setCondition(String condition) {
        this.condition = condition;
    }

    public String getQuery() {
        return query;
    }

    public void setQuery(String query) {
        this.query = query;
    }

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public String getOrderBy() {
        return orderBy;
    }

    public void setOrderBy(String orderBy) {
        this.orderBy = orderBy;
    }

    public List<Querys> getQuerys() {
        return querys;
    }
    public String getType() {
        return type;
    }

    public void setQuerys(List<Querys> querys) {
        this.querys = querys;
    }
}

package net.xxx.knmarket.model.util;


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.List;

/**
 * @author xxx
 * Querys对象
 */
@ApiModel(description = "分页查询Querys对象模型")
public class Querys {

    @ApiModelProperty(value = "查询字段")
    String query;
    @ApiModelProperty(value = "查询条件")
    String condition;
    @ApiModelProperty(value = "查询条件")
    String condition2;
    @ApiModelProperty(value = "查询类型")
    String type;
    @ApiModelProperty(value = "查询关系")
    String relate;

    public String getCondition2() {
        return condition2;
    }

    public void setCondition2(String condition2) {
        this.condition2 = condition2;
    }

    public String getQuery() {
        return query;
    }

    public void setQuery(String query) {
        this.query = query;
    }

    public String getCondition() {
        return condition;
    }

    public void setCondition(String condition) {
        this.condition = condition;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getRelate() {
        return relate;
    }

    public void setRelate(String relate) {
        this.relate = relate;
    }
}

项目实例:

    @PostMapping("/")
    @ApiOperation(value="翻页查询供应商信息")
    public Result pageListByPage(@Valid @RequestBody PageRequest pageRequest) {
        //添加分页及排序
        PageHelper.startPage(pageRequest.getPageNo(), pageRequest.getPageSize(), pageRequest.getOrderBy());
        //创建对象
        Example example = new Example(SupplierBaseinfo.class);
        Example.Criteria criteria = example.createCriteria();
        //为对象赋值
        if (pageRequest.getQuerys()!= null&&pageRequest.getQuerys()!=null && !pageRequest.getQuerys().isEmpty()){
            pageRequest.getQuerys().forEach(item->{
                if(item.getRelate().equals("and")){
                    switch (item.getType()){
                        case "=":
                            criteria.andEqualTo(item.getQuery(),item.getCondition());
                            break;
                        case "between":
                            criteria.andBetween(item.getQuery(),item.getCondition(),item.getCondition2());
                            break;
                        case "like":
                            criteria.andLike(item.getQuery(),"%" + item.getCondition() + "%");
                            break;
                        default:
                            criteria.andEqualTo(item.getQuery(),item.getCondition());
                            break;
                    }
                }
                if(item.getRelate().equals("or")){
                    switch (item.getType()){
                        case "=":
                            criteria.orEqualTo(item.getQuery(),item.getCondition());
                            break;
                        case "between":
                            criteria.orBetween(item.getQuery(),item.getCondition(),item.getCondition2());
                            break;
                        case "like":
                            criteria.orLike(item.getQuery(),"%" + item.getCondition() + "%");
                            break;
                        default:
                            criteria.orEqualTo(item.getQuery(),item.getCondition());
                            break;
                    }
                }
            });
        }
        //查询
        List<SupplierBaseinfo> supplierBaseinfos = this.supplierBaseinfoMapper.selectByExample(example);
        return ResultFactory.buildResult(CommonCode.SUCCESS, new PageInfo(supplierBaseinfos));
    }


Criteria包含一个Cretiron的集合,每一个Criteria对象内包含的Cretiron之间是由AND连接的,是逻辑与的关系。


image.png

Ecample包中提供相关拼接sql方法。

相关文章

网友评论

      本文标题:使用Example及Example[Criteria]

      本文链接:https://www.haomeiwen.com/subject/hltvcltx.html