MyBatis Plus 使用${ew.customSqlSegment}别名问题

问题说明

因为需要连表查询所以使用到了MyBatis Plus的${ew.customSqlSegment},如果连接的表中有相同的字段肯定需要使用别名,但是这个拼接的条件无法加别名,官网也无法解决这个问题
在这里插入图片描述

解决方案

其实解决方案很简单但只适用稍微简单一点的sql,只需要外面嵌套一层查询

原sql语句

SELECT po.*
FROM PAY_ORDER po
LEFT JOIN PAY_STATION_CONFIG psc ON psc.SITE_CODE = po.SITE_CODE
${ew.customSqlSegment}
封装后的sql语句
select * FROM
(
    SELECT po.*
    FROM PAY_ORDER po
    LEFT JOIN PAY_STATION_CONFIG psc ON psc.SITE_CODE = po.SITE_CODE
)
${ew.customSqlSegment}

如果遇到语句有group by或者更复杂的sql,只能想办法去掉sql查询的别名

### 关于 EasyQuery `${ew}` 语法的使用说明 `${ew}` 是 MyBatis-Plus 中的一个动态 SQL 片段占位符,主要用于简化复杂的查询条件构建过程。以下是关于其使用的详细介绍: #### 动态 SQL 的基本概念 MyBatis-Plus 提供了一种灵活的方式来处理动态 SQL 查询,其中 `QueryWrapper` 和 `UpdateWrapper` 是核心工具类[^1]。这些工具类通过封装查询逻辑,使得开发者可以更方便地操作数据库。 #### 常见的 `${ew}` 占位符及其功能 1. **`${ew.sqlSegment}`** - 表示查询条件部分。 - 它会在服务层拼接查询条件时自动解析并替换为实际的 SQL 条件语句。 - 当涉及多表联查时,如果查询条件是基于联查字段,则需要在字段前显式指定别名。 示例代码如下: ```sql @Select("SELECT * FROM table_a WHERE ${ew.sqlSegment}") List<TableA> selectByCondition(@Param(Constants.WRAPPER) QueryWrapper<TableA> wrapper); ``` 2. **`${ew.customSqlSegment}`** - 自定义 SQL 片段,在前面会自动添加 `WHERE` 或其他关键字。 - 主要用于复杂场景下的自定义条件组装。 示例代码如下: ```sql @Select("SELECT * FROM table_b ${ew.customSqlSegment}") List<TableB> customSelect(@Param(Constants.WRAPPER) QueryWrapper<TableB> wrapper); ``` 3. **`${ew.sqlSelect}`** - 控制查询字段的选择范围。 - 开发者可以通过调用 `queryWrapper.select(fields...)` 方法来限定返回的具体字段列表。 示例代码如下: ```sql @Select("SELECT ${ew.sqlSelect} FROM table_c") List<Map<String, Object>> selectFields(@Param(Constants.WRAPPER) QueryWrapper<?> wrapper); ``` 4. **`${ew.sqlSet}`** - 专门用于更新操作中的 SET 部分。 - 自动生成赋值语句片段,适用于批量更新场景。 示例代码如下: ```xml <update id="updateById"> UPDATE ${tableName} SET ${ew.sqlSet} ${ew.customSqlSegment}; </update> ``` #### 实际应用案例分析 假设有一个需求:根据用户输入动态生成一条 SELECT 查询语句,并支持多条件过滤以及字段选择控制。 ```java // 构建 QueryWrapper 对象 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.like("name", "John").ge("age", 18); // 调用 Mapper 接口方法执行查询 List<User> users = userMapper.selectUsers(queryWrapper); ``` 对应的 XML 映射文件可能如下所示: ```xml <select id="selectUsers" resultType="User"> SELECT ${ew.sqlSelect} FROM users WHERE ${ew.sqlSegment} </select> ``` 以上实现中,`queryWrapper.select(...)` 可以用来限制返回字段;而 `like()` 和 `ge()` 则会被转换成相应的 SQL 条件[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值