mybatisplus的查询,分页查询,自定义多表查询,修改的几种写法

使用mybatisplus的Db类简化写法

  1. 使用静态调用的方式,执行CRUD方法,避免Spring环境下Service循环注入、简洁代码,提升效率
  2. 需要项目中已注入对应实体的BaseMapper
  3. 完整使用方式见官方测试用例:官方测试用例地址
  4. 对于参数为Wrapper的,需要在Wrapper中传入Entity或者EntityClass供寻找对应的Mapper
  5. 不建议在循环中调用,如果是批量保存,建议将数据构造好后使用 Db.saveBatch(数据) 保存

查询,修改简易写法

查询 lambdaQuery

模糊部门的名称为测试部门,并且部门层级不为2级的部门

java 复制代码
List<SysOrg> list = Db.lambdaQuery(SysOrg.class).like(SysOrg::getOrgName, "测试部门")
                    .ne(SysOrg::getOrgLevel, 2).list();
修改 lambdaUpdate

将部门的状态修改为有效,条件是部门的id为orgId

java 复制代码
 Db.lambdaUpdate(SysOrg.class).set(SysOrg::getStatus, SysOrgStatusEnum.VALID.getId())
                        .eq(SysOrg::getId, orgId).update();

如果service实现类继承了mybatisplus的serviceImpl的话,也支持如下写法:

查询:

java 复制代码
List<SysOrg> list = lambdaQuery().eq(SysOrg::getOrgName, "测试部门").ne(SysOrg::getOrgLevel, 2).list();

修改:

java 复制代码
lambdaUpdate().set(SysOrg::getOrgName, "新的测试部门的名字")
                .set(SysOrg::getOrgNameAbbr, "新的测试部门缩写")
                .eq(SysOrg::getOrgId, orgId)
                .update();

原生单表分页查询

java 复制代码
public IPage<SysOrg> getSysOrgPage(SysOrgBo bo, Integer pageNo, Integer pageSize) {
        Page<SysOrg> page = new Page<>(pageNo, pageSize);
        page.addOrder(new OrderItem("create_time", false));
        // 3 查询条件
        Page<SysOrg> page = lambdaQuery()
                .like(ObjectUtils.isNotBlank(bo.getOrgName()), SysOrg::getOrgName, bo.getOrgName())
                .in(ObjectUtils.isNotBlank(bo.getOrgId()),  SysOrg::getOrgId, bo.getOrgIds())
                .eq(ObjectUtils.isNotBlank(bo.getState()), SysOrg::getState, bo.getState())
                .page(page);
return page;	
// 在查询结果为空时,将记录设置为空列表的操作是多余的。因为Page对象在查询结果为空时,其getRecords()方法本身就应该返回一个空列表

// 写法2:
 		IPage<Entity> page = Db.page(new Page<>(1, 1), Entity.class);
        Assertions.assertEquals(2, page.getTotal());
        Assertions.assertEquals(Db.list(new Page<Entity>(1, 1), Entity.class).size(),page.getRecords().size());

        page = Db.page(new Page<>(1, 1), Wrappers.lambdaQuery(Entity.class));
        Assertions.assertEquals(1, page.getRecords().size());

        Assertions.assertEquals(Db.list(new Page<Entity>(1, 1), Wrappers.lambdaQuery(Entity.class)).size(),page.getRecords().size());

自定义分页多表查询

通过map构造查询条件
java 复制代码
 // service实现类
 @Override
    public IPage<SysOrgVo> selectCustomList(SysOrgBo bo) {
        Page<SysOrgVo> page = new Page<>(bo.getPageNo(), bo.getPageSize());
        Map<String, Object> map = getQueryParams(bo);
        Page<SysOrgVo> p = baseMapper.selectCustomList(page, map);
        if (ObjectUtils.isBlank(p.getRecords())) {
            p.setRecords(Collections.emptyList());
        } else {
          for (SysOrgVo vo : p.getRecords()) {
                	// 后置操作,如补充某个字典值,字典key
                vo.setAxx(axx);
                vo.setBxx(bxx));
            }
           
        }
        return p;
    }
 
	// 拼凑查询条件
 	private Map<String, Object> getQueryParams(SysOrgBo bo) {
        // 获取当前登录用户
        LoginUser loginUser = LoginUserUtil.getLoginUser();
        if(loginUser ==null){
        	throw new serviceException("获取登录用户信息失败");
        }
        // 2 查询条件
        Map<String, Object> map = new HashMap<>();
        map.put("userId", loginUser.getId());
        map.put("orgId", orgId);
        map.put("delFlag","1");
        map.put("orgIds",Arrays.asList(1,2,3))
        if (ObjectUtils.isNotBlank(bo.getOrgName()) {
            map.put("orgName", "%" + bo.getOrgName()+ "%");
        }
        if (ObjectUtils.isNotBlank(bo.getOrgCode())) {
            map.put("orgCode", bo.getOrgCode());
        }
        return map;
    }
    
    // mapper.java
        Page<SysOrgBo> selectCustomList(Page<SysOrgBo> page, @Param("params") Map<String, Object> params);
        
    // mapper.xml
         <select id="selectCustomList" resultType="org.jeecg.modules.sys.vo.SysOrgVo" parameterType="java.util.HashMap">
	        select
	        	sysorg
	        from
	       sys_org a
	        left join 字典表1 b on b.org_id = a.id
	        where
	        a.del_flag = 0
	        and b.del_flag = 0
	        <if test="params.orgCode!= null  and params.orgCode!= ''"> and a.org_code= #{params.orgCode}</if>
	        <if test="params.orgName!= null  and params.orgName!= ''"> and a.org_name like #{params.orgName}</if>
	        <if test="ids!=null and ids.size>0">
            and t.ID in
            <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
	        order by a.create_time desc
    </select>
通过mybatisplus的queryWrapper构造查询条件
java 复制代码
// service实现类
QueryWrapper<SysOrg> qw= new QueryWrapper<>();
qw.eq("t.del_flag", CommonConstant.DEL_FLAG_0);
qw.orderByAsc("t.depart_order");
qw.in("t.org_code", ids.split(SymbolConstant.COMMA));
qw.and(q->q.isNull(true,"t.parent_id").or().eq(true,"t.parent_id",""));

List<SysOrgVo> list = departMapper.selectCustomList(qw);

// mapper.java
	List<SysOrgVo> selectCustomList(@org.apache.ibatis.annotations.Param(Constants.WRAPPER) Wrapper<SysOrg> queryWrapper);

// mapper.xml
  select t.*, soeb.XXX
        from sys_org t
                 LEFT JOIN sys_org_ext_business soeb on t.id = soeb.org_id
            ${ew.customSqlSegment}
直接返回查询结果的某个字段
java 复制代码
  String name = Db.getObj(Wrappers.lambdaQuery(Entity.class).eq(Entity::getId, 1L), Entity::getName);
  Assertions.assertEquals("ruben", name);
相关推荐
九皇叔叔5 天前
【06】SpringBoot3 MybatisPlus 修改(Mapper)
java·spring boot·mybatis·mybatisplus
九皇叔叔8 天前
【02】SpringBoot3 MybatisPlus 加入日志功能
java·mysql·mybatis·日志·mybatisplus
子非鱼92114 天前
MyBatisPlus快速上手
数据库·spring boot·mybatisplus
DCTANT20 天前
【原创】使用更优雅的方式改造MyBatisPlus逻辑删除插件
spring boot·后端·mysql·kotlin·mybatis·mybatisplus
回忆是昨天里的海1 个月前
Spring boot接入视图时的问题
mysql·mybatisplus·视图
咘噜biu2 个月前
多租户动态数据源插件dynamic-datasource简介
java·mybatisplus·动态数据源·多租户
阿拉斯攀登2 个月前
MyBatis-Plus 全面介绍 & Spring Boot 集成实战
java·spring boot·mybatisplus·mp
LSL666_2 个月前
mybatisplus入门案例
数据库·mysql·mybatisplus
fanruitian2 个月前
springboot-mybatisplus-demo
spring boot·后端·mybatis·mybatisplus
草原印象2 个月前
Spring Boot Spring MVC MyBatis MyBatis Plus框架编写项目实战案例
spring boot·spring·mybatis·springmvc·mybatisplus