条件构造器select方法返回指定字段
代号:猿a 人气:14条件构造器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> { /** * 目前仅支持主键/属性为 id的更新 * @param dirtyFields: 指定更新的属性 */ 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); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容