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中避免了多余字段的返回
實例
說明 :以下代碼中 iProjectBuildService實現(xiàn)了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);
}實例三:返回聚合函數(shù)值
sql實現(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可以寫方法的實現(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("對象主鍵未找到,請確認"); // 自定義異常
}
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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud配置服務(wù)端的ConfigServer設(shè)置安全認證
這篇文章主要為大家介紹了SpringCloud配置服務(wù)端的ConfigServer設(shè)置安全認證,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
使用IDEA配置Tomcat和連接MySQL數(shù)據(jù)庫(JDBC)詳細步驟
這篇文章主要介紹了使用IDEA配置Tomcat和連接MySQL數(shù)據(jù)庫(JDBC)詳細步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問題
這篇文章主要介紹了關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
Java實現(xiàn)HTTP請求的4種方式總結(jié)
這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)HTTP請求的4種方式,在java開發(fā)中,經(jīng)常遇到需要調(diào)用第三方提供的接口服務(wù)的需求,文中給出了詳細的代碼示例,需要的朋友可以參考下2023-08-08
EditPlus運行java時從鍵盤輸入數(shù)據(jù)的操作方法
這篇文章主要介紹了EditPlus運行java時從鍵盤輸入數(shù)據(jù)的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
springboot3.X 無法解析parameter參數(shù)問題分析
本文介紹了Spring Boot 3.2.1版本中調(diào)用接口時出現(xiàn)的參數(shù)解析問題,該錯誤是由Spring新版本加強的錯誤校驗和報錯提示導致的,在Spring 6.1之后,官方要求URL中的傳參必須使用`@PathVariable`聲明用于接收的變量,而不能省略`@RequestParam`注解,感興趣的朋友一起看看吧2025-03-03

