java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MyBatis-Plus Wrapper自定义SQL

MyBatis-Plus中使用Wrapper自定义SQL的详细步骤

作者:野犬寒鸦

在 MyBatis-Plus 中使用 Wrapper 自定义 SQL 可以灵活组合条件并复用条件逻辑,通过 ${ew.customSqlSegment} 占位符注入 Wrapper 生成的 SQL 片段,本文给大家介绍了详细步骤和示例,需要的朋友可以参考下

核心步骤

示例一:XML 方式实现自定义 SQL

1. Mapper 接口声明

public interface UserMapper extends BaseMapper<User> {
    // 使用 @Param("ew") 定义 Wrapper 参数
    List<User> selectUserList(@Param("ew") Wrapper<User> wrapper);
}

2. XML 映射文件(如 UserMapper.xml)

<select id="selectUserList" resultType="User">
    SELECT id, name, age, email 
    FROM user 
    ${ew.customSqlSegment} <!-- 自动注入 WHERE 及条件 -->
</select>

3. 使用 Wrapper 构建查询

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("name", "张")       // 模糊查询 name 包含"张"
       .gt("age", 20)            // age > 20
       .orderByDesc("create_time"); // 按创建时间倒序
 
List<User> users = userMapper.selectUserList(wrapper);

生成的 SQL:

SELECT id, name, age, email 
FROM user 
WHERE name LIKE '%张%' AND age > 20 
ORDER BY create_time DESC

示例二:注解方式实现自定义 SQL

Mapper 接口直接写 SQL

@Select("SELECT * FROM user ${ew.customSqlSegment}")
List<User> selectByWrapper(@Param("ew") Wrapper<User> wrapper);

示例三:联表查询 + Wrapper

1. Mapper 接口

List<UserVO> selectUserWithRole(@Param("ew") Wrapper<User> wrapper);

2. XML 映射文件

<select id="selectUserWithRole" resultType="UserVO">
    SELECT u.*, r.role_name 
    FROM user u
    LEFT JOIN role r ON u.role_id = r.id
    ${ew.customSqlSegment} <!-- 注入条件 -->
</select>

3. 使用 LambdaWrapper(避免硬编码字段名)

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getName, "王")     // 使用实体类方法引用
       .eq(User::getStatus, 1)        // status = 1
       .nested(i -> i.gt(User::getAge, 18).or().isNotNull(User::getEmail)); // 嵌套条件
 
List<UserVO> list = userMapper.selectUserWithRole(wrapper);

生成的 SQL:

SELECT u.*, r.role_name 
FROM user u 
LEFT JOIN role r ON u.role_id = r.id 
WHERE (
    name LIKE '%王%' 
    AND status = 1 
    AND (age > 18 OR email IS NOT NULL)
)

注意事项

wrapper.like("u.name", "张"); // XML 中表别名为 u

总结

此方案完美契合 MyBatis-Plus 设计哲学,在保留原生 MyBatis 灵活性的同时,极大简化动态 SQL 编写。

以上就是MyBatis-Plus中使用Wrapper自定义SQL的详细步骤的详细内容,更多关于MyBatis-Plus Wrapper自定义SQL的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文