文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis-Plus条件构造器select方法返回指定字段方式

2024-04-02 19:55

关注

条件构造器select方法返回指定字段

条件构造器select用法

1.返回特定的几个字段 select(字段…)

2.排除某几个字段 select(entiyClass,predicate判断)

3.分组聚合函数 select(“聚合函数”)

搭配service的.listMaps方法,将返回的数据封装到map中避免了多余字段的返回

实例

说明 :以下代码中 iProjectBuildService实现了mybatis-plus的service接口

实例一:指定需要查询的具体字段

public AjaxResult listAll(ProjectBuild projectBuild) {
    //只返回了id和name两个字段    
    List<Map<String,Object>> list = this.iProjectBuildService.listMaps(
           Wrappers.lambdaQuery(projectBuild).select(ProjectBuild::getBuildId,ProjectBuild::getBuildName)
           .orderByAsc(ProjectBuild::getBuildId)
           // 以上select表示要返回的字段,
    );
    return AjaxResult.success(list);
}

实例二:排除不需要返回的字段

@Test
public void selectByQueryWrapper8(){
    QueryWrapper<Employee> queryWrapper=new QueryWrapper();
 
    queryWrapper.lambda()
             .select(Employee.class,fieldInfo->!fieldInfo.getColumn().equals("birthday")&&!fieldInfo.getColumn().equals("gender"))
             .gt(Employee::getSalary,3500)
             .like(Employee::getName,"小");
    List<Employee> employeeList = employeeMapper.selectList(queryWrapper);
    System.out.println(employeeList);
}

实例三:返回聚合函数值

sql实现:

SELECT departmentId,AVG(salary) AS avg_salary FROM t_employee GROUP BY department_id;
@Test
public void selectByQueryWrapper9(){
    QueryWrapper<Employee> queryWrapper=new QueryWrapper();
  
    queryWrapper.select("department_id","AVG(salary) AS avg_salary")
             .groupBy("department_id");
    List<Employee> employeeList = employeeMapper.selectList(queryWrapper);
}

问题解决

问题描述: map中的key没有使用驼峰命名

解决方法: 使用hutool工具包中的 MapUtil.toCamelCaseMap(map);

//处理map中key未驼峰命名
list = list.stream().map(MapUtil::toCamelCaseMap).collect(Collectors.toList());

Mybatis-Plus修改指定字段

通用解决方案

以此做法为例,如果需要多条件匹配,可以自行添加方法处理

// 继承原来的公共mapper
// java8 interface可以写方法的实现逻辑,直接在这里写好,
// 其他地方调用时直接继承自定义的 mapper
public interface CustomBaseMapper<T> extends BaseMapper<T> {
 
    
    default int updateById(@Param("et") T entity, List<String> dirtyFields) {
        Class<?> tClass = entity.getClass();
        UpdateWrapper<T> wrapper = new UpdateWrapper<>();
        try {
            Object id = ObjectUtils.getAttrVal(entity, "id"); // 获取对象的主键值
            wrapper.eq("id", id);
        } catch (NoSuchFieldException | IllegalAccessException e) {
            throw new RuntimeException("对象主键未找到,请确认"); // 自定义异常
        }
 
        for (String dirtyField : dirtyFields) {
            try {
                Field classField = tClass.getDeclaredField(dirtyField);
                classField.setAccessible(true);
                // 对象属性,转成数据库字段
                wrapper.set(StringUtils.toColumn(dirtyField), classField.get(entity));
            } catch (Exception ignored) {
            }
        }
        return update(null, wrapper);
    } 
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯