当前位置: 首页 > news >正文

使用 MyBatis XML 和 QueryWrapper 实现动态查询

本文档介绍了如何在 MyBatis 中结合 XML 配置和 MyBatis-Plus 的 QueryWrapper 来实现动态查询。

1. XML 中定义基本查询

首先,在 MyBatis XML 文件中定义一个基本的 select 查询:

<select id="selectCode" resultType="java.util.Map">
    SELECT * FROM order
</select>

2. 在 Mapper 接口中定义方法

在 Mapper 接口中定义一个方法,接受 QueryWrapper 作为参数:

package com.example.order.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.order.entity.Order;
import org.apache.ibatis.annotations.Param;
import java.util.Map;

public interface OrderMapper extends BaseMapper<Order> {
    IPage<Map<String, Object>> selectCode(Page<Map<String, Object>> page, @Param("ew") QueryWrapper<Order> queryWrapper);
}

3. 在 Service 层使用 QueryWrapper

在 Service 层中使用 QueryWrapper 来构建动态查询条件,并传递给 Mapper 方法:

package com.example.order.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.order.dtc.request.OrderQuery;
import com.example.order.entity.Order;
import com.example.order.mapper.OrderMapper;
import com.example.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Override
    public IPage<Map<String, Object>> selectCode(Page<Map<String, Object>> page, OrderQuery query) {
        QueryWrapper<Order> queryWrapper = new QueryWrapper<>();

        // Add filtering
        if (query.getFilterField() != null && query.getFilterValue() != null) {
            queryWrapper.eq(query.getFilterField(), query.getFilterValue());
        }

        // Add sorting
        if (query.getSortBy() != null) {
            if (query.isAscending()) {
                queryWrapper.orderByAsc(query.getSortBy());
            } else {
                queryWrapper.orderByDesc(query.getSortBy());
            }
        }

        return orderMapper.selectCode(page, queryWrapper);
    }
}

4. XML 中使用动态 SQL

在 XML 中,使用 whereif 标签来处理动态条件:

<select id="selectCode" resultType="java.util.Map" parameterType="com.baomidou.mybatisplus.core.conditions.Wrapper">
    SELECT * FROM order
    <where>
        <if test="ew != null">
            ${ew.sqlSegment}
        </if>
    </where>
</select>

说明

  • @Param("ew"): 在 Mapper 方法中使用 @Param("ew") 注解来传递 QueryWrapperew 是 MyBatis-Plus 约定的参数名。
  • 动态 SQL: 在 XML 中使用 ${ew.sqlSegment} 来插入 QueryWrapper 构建的 SQL 片段。
  • 灵活性: 这种方式结合了 XML 的灵活性和 QueryWrapper 的动态条件构建能力。

通过这种方式,您可以在 XML 中定义基本的查询逻辑,并在 Java 代码中使用 QueryWrapper 来动态添加查询条件和排序。

相关文章:

  • 大模型信息整理
  • JDBC事务管理与DAO模式实践
  • 加餐 —— Spring Boot 项目转 Solon 项目工具
  • 电子学会—2024年月6青少年软件编程(图形化)四级等级考试真题——魔法门
  • 【玩转MySQL数据字典】MySQL数据字典与常用操作指令
  • visual studio中解决方案和项目的关系?如何在同一个解决方案中添加项目?
  • 前端使用XLSX实现Excel导入导出
  • 第二章---电力电子器件---《电力电子技术基础》笔记
  • 【Linux】权限相关知识点
  • STM32 ST-LINK Utility 切换 NRST_MODE 后下载失败问题
  • 我又又又又又更新了~纯手工编写C++画图,有注释~~~
  • python爬虫系列课程7:ajax
  • 【资料分享】wireshark解析脚本omci.lua文件20250306版本发布(独家分享)
  • UVC for USBCamera in Android
  • TikTok Shop欧洲市场爆发,欧洲TikTok 运营网络专线成运营关键
  • 基于javaweb的SpringBoot网上水果蔬菜项目系统设计和实现(源码+文档+部署讲解)
  • 【前端】webstorm创建一个导航页面:HTML、CSS 和 JavaScript 的结合
  • Flask项目框架
  • 手写一个Tomcat
  • 2490小蓝的括号串
  • 花钱做网站需要所有权/搜狗网页版
  • 南京本地网站/成人培训机构
  • 江油网站制作/磁力蜘蛛搜索引擎
  • 网站登录模版/发外链的论坛
  • 网页设计报价怎么做/徐州新站百度快照优化
  • 筑巢做网站怎么样/一级造价工程师