Generating MyBatis-Plus Query Wrappers with Annotations

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.util.CollectionUtils;

import java.util.List;

// Assuming User and QueryUserParam classes are defined elsewhere.
// Example User class:
// class User {
//     private Long id;
//     private String name;
//     private Integer age;
//     private Long roleId;
//     // getters and setters
// }

public class UserService {

    private UserMapper userMapper; // Assume UserMapper is injected

    public List<User> findUsers(QueryUserParam queryParam) {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();

        // Traditional Wrapper Construction:
        wrapper.in(!CollectionUtils.isEmpty(queryParam.getRoleIdList()), User::getRoleId, queryParam.getRoleIdList());
        wrapper.le(queryParam.getMaxAge() != null, User::getAge, queryParam.getMaxAge());
        wrapper.like(StringUtils.hasText(queryParam.getNameKeyword()), User::getName, queryParam.getNameKeyword());
        // ... other conditions

        return userMapper.selectList(wrapper);
    }

    public List<User> findUsersWithAnnotation(QueryUserParam queryParam) {
        // Using annotation-wrapper to generate the wrapper:
        // Option 1: Implement AnnotationWrapper in QueryUserParam
        // List<User> users = userMapper.selectList(queryParam.lambdaWrapper());

        // Option 2: Use WrapperGenerator
        LambdaQueryWrapper<User> wrapper = WrapperGenerator.generateWrapper(queryParam);
        return userMapper.selectList(wrapper);
    }
}

// Example QueryUserParam class utilizing annotation-wrapper:
// import com.github.nanyouqiaoM.annotationwrapper.annotation.Wrapper;
// import com.github.nanyouqiaoM.annotationwrapper.enums.SqlType;
// import com.github.nanyouqiaoM.annotationwrapper.interfaces.AnnotationWrapper;
// import lombok.AccessLevel;
// import lombok.Data;
// import lombok.experimental.FieldDefaults;
// import java.util.List;

// @Data
// @FieldDefaults(level = AccessLevel.PRIVATE)
// public class QueryUserParam implements AnnotationWrapper {
//     /**
//      * Primary Key ID
//      */
//     @Wrapper(SqlType.EQ)
//     Long id;

//     /**
//      * Name
//      */
//     @Wrapper(SqlType.LIKE)
//     String nameKeyword;

//     /**
//      * Age
//      */
//     @Wrapper(value = SqlType.LE, column = "age")
//     Integer maxAge;

//     /**
//      * Email
//      */
//     @Wrapper(SqlType.EQ)
//     String email;

//     /**
//      * Role ID
//      */
//     @Wrapper(SqlType.IN)
//     List<Long> roleIdList;
// }

// Add Maven dependencies:
/*
<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.github.NanyouqiaoM</groupId>
    <artifactId>annotation-wrapper</artifactId>
    <version>1.1</version>
    <!-- Exclude mybatis-plus if already included in your project -->
    <!--
    <exclusions>
        <exclusion>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
        </exclusion>
    </exclusions>
    -->
</dependency>
*/

Tags: java mybatis-plus Annotation Wrapper Generation Code Generation

Posted on Sat, 03 Oct 2026 16:07:50 +0000 by Supernovas