MyBatisPlus——Wrapper

Wrapper体系

在这里插入图片描述

QueryWrapper

使用字符串表示列名,通过字符串拼接的方式构建查询条件
再将 wrapper 作为条件参数,写入BaseMapper提供的查找方法中(或其他数据库方法)

        QueryWrapper<QueryEntity> wrapper = new QueryWrapper<>();
        wrapper.select("user.username","user.userId");
        //wrapper.like("user.username","张三");
        wrapper.eq("user.username","张三");
        List<ResultEntity> list = QueryMapperDao.selectList(wrapper);
  • 优点:更灵活,支持复杂查询操作和 SQL 片段拼接。
  • 缺点:类型不安全、可读性较差。
LambdaQueryWrapper

逻辑上与QueryWrapper相同,只是使用Lambda表达式表示列名,通过Lambda表达式的方式构建查询条件

        LambdaQueryWrapper<QueryEntity> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.select(QueryEntity::getUserId , QueryEntity::getUsername);
        queryWrapper.like(QueryEntity::getUsername,params.get("name"));
        //queryWrapper.eq(QueryEntity::getUsername,params.get("name"));
        List<ResultEntity> list = QueryMapperDao.selectList(queryWrapper);
  • 优点:类型安全、易读性高,可以直接使用实体类的属性和方法。
  • 缺点:在某些复杂查询操作下可能不支持。
wrapper常用方法

在这里插入图片描述

注意点1
  • 在写 select() 方法时注意
    如果要查询多个字段 ,要将字段放在同一个括号中,以逗号分隔
        //分开书写时,select会被覆盖,最后传递的只有getUsername一个条件
        //queryWrapper.select(SysUserEntity::getUserId);
        //queryWrapper.select(SysUserEntity::getUsername);
        queryWrapper.select(SysUserEntity::getUserId , SysUserEntity::getUsername);
注意点2——${ew.customSqlSegment}

${ew.customSqlSegment}条件占位符 , 其中就有内置 where 关键字

在自定义SQL语句时 ${ew.customSqlSegment}where 不可共存

注意3 : 自定义SQL语句——联合查询

以下提供三种方式

  • Mapper文件中定义SQl语句——join on+ 条件占位符
        //Service层
        QueryWrapper<SysGoodsEntity> wrapper = new QueryWrapper<>();
        wrapper.eq("u.username","qqq");
        List<SysGoodsEntity> list = sysGoodsDao.userAndGoods(wrapper);
         
        //Dao层
        List<SysGoodsEntity> userAndGoods(@Param("ew") QueryWrapper<SysGoodsEntity> queryWrapper);
    // Mapper文件中
        SELECT g.*
        FROM sys_goods as g
        left join  sys_user as u
        on g.buyers = u.username
         ${ew.customSqlSegment}
  • Mapper文件中定义SQl语句—— 参数占位符
        //Service层
        List<SysGoodsEntity> list = sysGoodsDao.userAndGoods("qqq");
         
        //Dao层
        List<SysGoodsEntity> userAndGoods(String name);
    // Mapper文件中
    SELECT g.*
    FROM sys_goods as g , sys_user as u
    WHERE g.buyers = u.username
    AND u.username= #{name}
  • @select 注解 ——join on
        //Service层
        QueryWrapper<SysGoodsEntity> wrapper = new QueryWrapper<>();
        wrapper.like("u.username","man");
        List<SysGoodsEntity> list = sysGoodsDao.userAndGoodsSelect(wrapper);
         
        //Dao层
        @Select("SELECT g.* FROM sys_goods as g left join sys_user as u  on g.buyers = u.username ${ew.customSqlSegment}")
        List<SysGoodsEntity> userAndGoodsSelect(@Param("ew") Wrapper<SysGoodsEntity> queryWrapper);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值