可以使用 @SelectProvider 注解结合 Provider 类实现动态 SQL 查询指定字段。

例如,查询用户表中指定的 username 和 email 字段:

  1. 创建 Provider 类
public class UserSqlProvider {

    public String selectByUsernameAndEmail(Map<String, Object> params) {
        String username = (String) params.get("username");
        String email = (String) params.get("email");
        StringBuilder sb = new StringBuilder();
        sb.append("SELECT username, email FROM user WHERE 1=1 ");
        if (username != null) {
            sb.append("AND username = #{username} ");
        }
        if (email != null) {
            sb.append("AND email = #{email} ");
        }
        return sb.toString();
    }
}
  1. 在 UserMapper 中添加 @SelectProvider 注解
@Mapper
public interface UserMapper {

    @SelectProvider(type = UserSqlProvider.class, method = "selectByUsernameAndEmail")
    List<Map<String, Object>> selectByUsernameAndEmail(@Param("username") String username, @Param("email") String email);

}
  1. 调用方法查询指定字段
List<Map<String, Object>> userList = userMapper.selectByUsernameAndEmail("admin", null);
for (Map<String, Object> user : userList) {
    System.out.println(user.get("username") + ", " + user.get("email"));
}

原文地址: http://www.cveoy.top/t/topic/M24 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录