Mybatis-plus 多條件查詢及分頁

半路接手一個項目,DAO用的是Mybatis-plus,多個模塊都有多條件查詢,先測試之前寫的API,發(fā)現(xiàn)根本不是多條件查詢,只能匹配其中一個,看了源代碼,"這TM是什么?"

        if(null != enterpriseFilterServiceDTO.getCompanyId() && !enterpriseFilterServiceDTO.getCompanyId().trim().isEmpty()) {
            Supplier supplier = supplierService.getBaseMapper().selectOne(new QueryWrapper<Supplier>().lambda().eq(Supplier::getSupplierId, enterpriseFilterServiceDTO.getCompanyId()));
            if(null == enterpriseFilterServiceDTO.getCompanyName())
                lambdaQueryWrapper.eq(ServiceDetail::getName, supplier.getName());
        }
        else if(null != enterpriseFilterServiceDTO.getCreatedDate())
            lambdaQueryWrapper.eq(ServiceDetail::getCreateTime, enterpriseFilterServiceDTO.getCreatedDate());
        else if(null != enterpriseFilterServiceDTO.getCompanyName() && !enterpriseFilterServiceDTO.getCompanyName().trim().isEmpty())
            lambdaQueryWrapper.eq(ServiceDetail::getName, enterpriseFilterServiceDTO.getCompanyName());
        else if(null != enterpriseFilterServiceDTO.getStatus())
            lambdaQueryWrapper.eq(ServiceDetail::getDeleted, enterpriseFilterServiceDTO.getStatus().equalsIgnoreCase("上架")?0:1);
        else if(null != enterpriseFilterServiceDTO.getServiceType() && !enterpriseFilterServiceDTO.getServiceType().trim().isEmpty())
            lambdaQueryWrapper.eq(ServiceDetail::getTypeId, typeIdMap.get(enterpriseFilterServiceDTO.getServiceType()));
        else if(null == enterpriseFilterServiceDTO.getServiceType()) {
            for(Integer typeId : typeIdMap.values()) {
                lambdaQueryWrapper.or().eq(ServiceDetail::getTypeId, typeId);
            }
        }

改吧

1. 新建Mapper,

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zltz.univ.core.model.CourseFilter;
import com.zltz.univ.core.model.CourseForList;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface CourseSelectMapper {
    //`Page<T> page 分頁用的
    List<CourseForList> findCoursesInfo(Page<CourseForList> page,CourseFilter courseFilter);
}

2. resources/mapping/ 寫xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.zltz.univ.core.mapper.CourseSelectMapper">          //mapper類
    <resultMap id="ResultMap" type="com.zltz.univ.core.model.CourseForList"/> //返回類型
    <select id="findCoursesInfo" resultMap="ResultMap"
            parameterType="com.zltz.univ.core.model.CourseFilter">             //傳參類型
        SELECT
        id,
        category_id,
        name,
        course_status,
        price,
        course_capacity,
        start_time
        FROM zltz_courses
        WHERE
            deleted = 0
        <if test="courseFilter.id !=null">
             and id like CONCAT('%',#{courseFilter.id},'%')
        </if>
        <if test="courseFilter.categoryId!=null">
             and category_id = #{courseFilter.categoryId}
        </if>
        <if test = "courseFilter.startDate!=null">
             and date_format(start_time,'%Y-%m-%d') = str_to_date(#{courseFilter.startDate},'%Y-%m-%d')
        </if>
        <if test = "courseFilter.name !=null">
            and name like CONCAT('%',#{courseFilter.name},'%')
        </if>
        <if test ="courseFilter.courseStatus!=null">
            and course_status = #{courseFilter.courseStatus}
        </if>
        <if test = "courseFilter.minPrice!=null">
            and price between #{courseFilter.minPrice} and #{courseFilter.maxPrice}
        </if>
    </select>
</mapper>

3. service 中調(diào)用

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

    @Autowired
    private CourseSelectMapper courseSelectMapper;
  
     public BaseResponse listAllCourses(CourseFilterDTO courseFilterDTO, Integer page, Integer limit) {
        List<Category> categoryList = categoryService.listAllCategoryByType(courseParentType);
        CourseFilter courseFilter = transformParameters(courseFilterDTO);

        //查詢分頁 
        Page<CourseForList> p = new Page<>(page,limit);
        p.setRecords(courseSelectMapper.findCoursesInfo(p,courseFilter));

        Map<Integer, String> categoryMap = CategoryUtil.getIdTypeMap(categoryList);
        Map<Integer, String> statusMap = CategoryUtil.getStatusMap(courseStatus);
        return new CommonListPageResponse(true, null, CourseUtil.convertTo_2(p.getRecords(), categoryMap, statusMap), p.getTotal(), p.getSize(),p.getCurrent());
    }
    

另外

一開始嘗試使用pagehelper分頁插件,直接報錯.
通過一下方式嘗試解決.
mybatis-plus分頁和pagehelper沖突(java.lang.NoSuchMethodError: net.sf.jsqlparser.statement.select.Plain)
可以解決沖突,但是分頁失效沒解決,我太菜了,文末的interceptor設(shè)置,我沒做到在yml文件中完成.所以最后還是去學了Mybatis-plus的分頁.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容