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

目录
  • 条件构造器select方法返回指定字段
    • 条件构造器select用法
    • 实例
    • 问题解决
  • Mybatis-Plus修改指定字段
    • 通用解决方案

条件构造器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);
    }
}

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

(0)

相关推荐

  • mybatis-plus条件构造器的操作代码

    目录 条件构造器 Wrapper中基本比较操作 模糊查询 逻辑查询 select 排序 条件构造器 在MP中,Wrapper接口的实现类关系如下: 在MP查询中,还可以使用lambda方式查询,降低数据库列表写错的风险. Wrapper中基本比较操作 操作方法 方法说明 eq 等于 = ne 不等于 <> gt 大于 > ge 大于等于 >= lt 小于 < le 小于等于 <= between BETWEEN 值1 AND 值2 notBetween NOT BETW

  • Mybatis-Plus Wrapper条件构造器超详细使用教程

    目录 Wrapper条件构造器 1 queryWrapper构造器 1.1 组装删改查条件 1.2 条件优先级 1.3 实现子查询 2 updateWrapper构造器 2.1 升级修改方法(无需创建对象) 2.2 实际开发时的应用 3 lambdaXxxWrapper构造器 3.1 lambdaQueryWrapper构造器 3.2 lambdaUpdateWrapper构造器 Wrapper条件构造器 条件构造器wrapper就是用来封装CRUD方法参数条件的一个接口,其底层有很多的子类,最

  • Mybatis Plus使用条件构造器增删改查功能的实现方法

    java后端层级结构 Controller 接口层 接口层比较好理解,它是面向web网络的接口,使用http格式去调用 /** * 图文课程管理Controller */ @RestController @RequestMapping("/driver/imageCourse") public class TImageCourseController extends BaseController { @Autowired private ITImageCourseService tIm

  • 关于MyBatis plus条件构造器的逐条详解

    目录 条件构造器 说明 警告 说明 allEq 个别参数说明 eq 实例 ne gt ge lt le between notBetween like notLike likeLeft likeRight isNull isNotNull in 例 例 notIn inSql notInSql groupBy orderByAsc 实例 orderByDesc orderBy having func or and nested apply-拼接SQL 实例 last exists notExis

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

    目录 条件构造器select方法返回指定字段 条件构造器select用法 实例 问题解决 Mybatis-Plus修改指定字段 通用解决方案 条件构造器select方法返回指定字段 条件构造器select用法 1.返回特定的几个字段 select(字段…) 2.排除某几个字段 select(entiyClass,predicate判断) 3.分组聚合函数 select(“聚合函数”) 搭配service的.listMaps方法,将返回的数据封装到map中避免了多余字段的返回 实例 说明 :以下代

  • mybatis plus条件构造器queryWrapper、updateWrapper

    注明:上篇文章介绍了springboot+mybatis-plus通用CRUD的用法,这篇文章我们来介绍一下mybatis-plus强大的条件构造器.mybatis-plus的版本为最新版3.0.3 .条件构造器咱们讲述queryWrapper和updateWrapper的用法.关系.以及强大之处. 首先在这里写下官方文档的链接位置,官方文档说的很详细.如果还想知道在项目中的具体用法请往下看. 一.条件构造器关系介绍 介绍 : 1.上图绿色框为抽象类abstract 2.蓝色框为正常class类

  • django自带serializers序列化返回指定字段的方法

    django orm 有个defer方法,指定模型排除的字段. 如下返回的Queryset, 排除'username', 'id'. users=models.UserInfo.objects.defer('username','id') 或users=models.UserInfo.objects.filter(...).defer('username','id') 再如下,使用django自带serializers进行序列,发现序列化的数据仍存在'username', 'id'这两个字段.

  • mybatis 加载配置文件的方法(两种方式)

    一. 使用sqlSessionFactory 的 mapperLocations 进行加载, <!-- SessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" scope="singleton"> <property name="dataSource" ref=

  • 利用MyBatis实现条件查询的方法汇总

    SQL映射文件 Mybatis真正强大的是在于它的SQL映射语句,也是它的流弊之处. 它的功能强大,SQL映射文件的配置却比较简单. 使用SQL映射文件可以减少50%以上的代码量. Mybatis专注于SQL,对于开发人员来说可极大限度地进行SQL调优,以保证性能,下面是SQL映射文件的几个顶级元素配置 1.mapper 它是映射文件的根节点,只有一个属性就是 namespace(命名空间)它的作用是区分不同的mapper,里面的参数是全局唯一的,绑定DAO层接口,即面向接口编程 namespa

  • Mybatis Plus条件构造器ConditionConstructor用法实例解析

    理解: 原来叫条件构造器,我一直以为都是封装条件对象 即SQL的查询条件,不过都一样. 其目的是因为的实际的需求灵活多变,而我们的SQL的筛选条件也需要跟着变化, 但是有一些固定的字段固定的方式可以保证不变化,那么方法的参数的确定尤为重要 从单一的一个ID,一个String的属性,到一个类型的对象,最后到规范的接口 就是逐渐把可能的情况不断的抽象化,更具有泛用意义 Wrapper的常用方法: eq方法,名称是equals的缩写,两个参数,一个是数据库表字段的名称,一个是表字段值 userQuer

  • JavaScript中用getDate()方法返回指定日期的教程

    按照本地时间的javascript date.getDate()方法返回月份的一天,在指定日期.由getDate返回的值是1到31之间的整数. 语法 Date.getDate() 下面是参数的详细信息: NA 返回值: 返回今天的日期和时间 例子: <html> <head> <title>JavaScript getDate Method</title> </head> <body> <script type="te

  • SpringBoot+JPA 分页查询指定列并返回指定实体方式

    目录 SpringBoot+JPA分页查询指定列并返回指定实体 SpringBoot JPA实现自定义语句分页查询 SpringBoot+JPA分页查询指定列并返回指定实体 用习惯Mybatis,没用过jpa 真是各种踩坑了 脑壳疼,一个分页弄老半天,原来就一句话的事情,唉 先来说说正常的JPA如何操作 实体类对应表来创建,举个例子 @Entity @Table(name = "td_user") public class TdUser extends BaseModel { priv

  • SpringBoot+JPA 分页查询指定列并返回指定实体方式

    目录 SpringBoot JPA分页查询指定列并返回指定实体 实体类对应表来创建,举个例子 SpringBoot JPA实现自定义语句分页查询 1.JPA持久层 InvoiceRepository.java 2.服务层 SpringBoot JPA分页查询指定列并返回指定实体 用习惯Mybatis,没用过jpa 真是各种踩坑了 脑壳疼,一个分页弄老半天,原来就一句话的事情,唉 先来说说正常的JPA如何操作 实体类对应表来创建,举个例子 @Entity @Table(name = "td_use

随机推荐