使用MyBatis XML和QueryWrapper實(shí)現(xiàn)動(dòng)態(tài)查詢
本文檔介紹了如何在 MyBatis 中結(jié)合 XML 配置和 MyBatis-Plus 的 QueryWrapper 來(lái)實(shí)現(xiàn)動(dòng)態(tài)查詢。
1. XML 中定義基本查詢
首先,在 MyBatis XML 文件中定義一個(gè)基本的 select 查詢:
<select id="selectCode" resultType="java.util.Map">
SELECT * FROM order
</select>
2. 在 Mapper 接口中定義方法
在 Mapper 接口中定義一個(gè)方法,接受 QueryWrapper 作為參數(shù):
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 來(lái)構(gòu)建動(dòng)態(tài)查詢條件,并傳遞給 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 中使用動(dòng)態(tài) SQL
在 XML 中,使用 where 和 if 標(biāo)簽來(lái)處理動(dòng)態(tài)條件:
<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>
說(shuō)明
@Param("ew"): 在 Mapper 方法中使用@Param("ew")注解來(lái)傳遞QueryWrapper,ew是 MyBatis-Plus 約定的參數(shù)名。- 動(dòng)態(tài) SQL: 在 XML 中使用
${ew.sqlSegment}來(lái)插入QueryWrapper構(gòu)建的 SQL 片段。 - 靈活性: 這種方式結(jié)合了 XML 的靈活性和
QueryWrapper的動(dòng)態(tài)條件構(gòu)建能力。
通過(guò)這種方式,您可以在 XML 中定義基本的查詢邏輯,并在 Java 代碼中使用 QueryWrapper 來(lái)動(dòng)態(tài)添加查詢條件和排序。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基于二維數(shù)組實(shí)現(xiàn)的數(shù)獨(dú)問(wèn)題示例
這篇文章主要介紹了Java基于二維數(shù)組實(shí)現(xiàn)的數(shù)獨(dú)問(wèn)題,涉及java針對(duì)數(shù)組的遍歷、計(jì)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
SpringBoot配置類注解@Configuration, @Bean用法解讀
本文通過(guò)對(duì)比@Component和@Configuration,解釋了Spring框架的依賴注入(DI)方式,并介紹了@Configuration和@Bean的方法的用法、特點(diǎn)和區(qū)別,舉了驗(yàn)證碼生成器的例子,介紹了@Configuration如何集中管理Bean的創(chuàng)建邏輯,替代了傳統(tǒng)的XML配置2026-05-05
解決maven中只有Lifecycle而Dependencies和Plugins消失的問(wèn)題
這篇文章主要介紹了maven中只有Lifecycle而Dependencies和Plugins消失的問(wèn)題及解決方法,本文通過(guò)圖文的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-07-07
Java學(xué)習(xí)-打印1-1000以內(nèi)的水仙花數(shù)代碼實(shí)例
這篇文章主要介紹了Java打印1-1000以內(nèi)的水仙花數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Spring Boot + Jpa(Hibernate) 架構(gòu)基本配置詳解
本篇文章主要介紹了Spring Boot + Jpa(Hibernate) 架構(gòu)基本配置詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Springboot項(xiàng)目配置阿里云SSL證書的實(shí)現(xiàn)步驟
本文詳細(xì)介紹了SpringBoot項(xiàng)目中配置HTTPS,包括證書申請(qǐng)、下載及安裝過(guò)程,及設(shè)置HTTP自動(dòng)重定向至HTTPS,確保網(wǎng)站數(shù)據(jù)傳輸?shù)陌踩?感興趣的可以了解一下2025-08-08
如何使用 Shell 腳本查看多個(gè)服務(wù)器的端口是否打開的方法
這篇文章主要介紹了如何使用 Shell 腳本來(lái)查看多個(gè)服務(wù)器的端口是否打開的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06

