Mybatis-Plus條件構(gòu)造器select方法返回指定字段方式
條件構(gòu)造器select方法返回指定字段
條件構(gòu)造器select用法
1.返回特定的幾個字段 select(字段…)
2.排除某幾個字段 select(entiyClass,predicate判斷)
3.分組聚合函數(shù) select(“聚合函數(shù)”)
搭配service的.listMaps方法,將返回的數(shù)據(jù)封裝到map中避免了多余字段的返回
實(shí)例
說明 :以下代碼中 iProjectBuildService實(shí)現(xiàn)了mybatis-plus的service接口
實(shí)例一:指定需要查詢的具體字段
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); }
實(shí)例二:排除不需要返回的字段
@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); }
實(shí)例三:返回聚合函數(shù)值
sql實(shí)現(xiàn):
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可以寫方法的實(shí)現(xiàn)邏輯,直接在這里寫好, // 其他地方調(diào)用時直接繼承自定義的 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("對象主鍵未找到,請確認(rèn)"); // 自定義異常 } for (String dirtyField : dirtyFields) { try { Field classField = tClass.getDeclaredField(dirtyField); classField.setAccessible(true); // 對象屬性,轉(zhuǎn)成數(shù)據(jù)庫字段 wrapper.set(StringUtils.toColumn(dirtyField), classField.get(entity)); } catch (Exception ignored) { } } return update(null, wrapper); } }
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring的jdbctemplate的crud的基類dao
本文主要介紹了使用spring的jdbctemplate進(jìn)行增刪改查的基類Dao的簡單寫法,需要的朋友可以參考下2014-02-02Mybatis-Plus進(jìn)階分頁與樂觀鎖插件及通用枚舉和多數(shù)據(jù)源詳解
這篇文章主要介紹了Mybatis-Plus的分頁插件與樂觀鎖插件還有通用枚舉和多數(shù)據(jù)源的相關(guān)介紹,文中代碼附有詳細(xì)的注釋,感興趣的朋友來看看吧2022-03-03微信支付java版V3驗(yàn)證數(shù)據(jù)合法性(Deom)
這篇文章主要介紹了微信支付java版V3驗(yàn)證數(shù)據(jù)合法性(Deom)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09OpenCV Java實(shí)現(xiàn)人臉識別和裁剪功能
這篇文章主要為大家詳細(xì)介紹了OpenCV Java實(shí)現(xiàn)人臉識別和裁剪功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05