QueryWrapper、LambdaQueryWrapper、QueryChainWrapper、LambdaQueryChainWrapper比较

Wrapper使用示例

以这条SQL做演示:

SELECT id,order_msg FROM my_mysql.order WHERE order_msg = '57x' // x 代表序号
  • QueryWrapper

    QueryWrapper<OrderEntity> queryWrapper = new QueryWrapper<OrderEntity>().select("id","order_msg").eq("order_msg","571");
    orderMapper.selectOne(queryWrapper); // SELECT id,order_msg FROM my_mysql.order WHERE (order_msg = '571')
    
  • LambdaQueryWrapper

    // LambdaQueryWrapper // queryWrapper.lambda() 可以转换成此种 wrapper
    LambdaQueryWrapper<OrderEntity> lambdaQueryWrapper = new LambdaQueryWrapper<OrderEntity>().select(OrderEntity::getId, OrderEntity::getOrderMsg).eq(OrderEntity::getOrderMsg,"572");
    orderMapper.selectOne(lambdaQueryWrapper); // SELECT id,order_msg FROM my_mysql.order WHERE (order_msg = '572')
    
  • QueryChainWrapper

    QueryChainWrapper<OrderEntity> queryChainWrapper = new QueryChainWrapper<>(orderMapper).select("id", "order_msg").eq("order_msg","573");
    queryChainWrapper.one(); // SELECT id,order_msg FROM my_mysql.order WHERE (order_msg = '573')
    
  • LambdaQueryChainWrapper

    LambdaQueryChainWrapper<OrderEntity> lambdaQueryChainWrapper = new LambdaQueryChainWrapper<>(orderMapper).select(OrderEntity::getId, OrderEntity::getOrderMsg).eq(OrderEntity::getOrderMsg,"574");
    lambdaQueryChainWrapper.one(); // SELECT id,order_msg FROM my_mysql.order WHERE (order_msg = '574')
    

总结

  • QueryWrapper 和 lambdaQueryWrapper 需要将 封装的wrapper 提供给 orderMapper,调用orderMapper的方法,才可以使用。

  • QueryChainWrapper 和 LambdaQueryChainWrapper 可以直接链式调用数据执行操作的方法

  • 带 lambda 的 wrapper 可以使用lambda表达式,选择列,设置列值,反之不带lambda的就需要手动指定列名

个人使用总结最佳案例

  • 简单SQL:

    使用此种方式需要注意字段策略 FieldStrategy

    OrderEntity orderQry = new OrderEntity().setDealMsg("575");
    LambdaQueryWrapper<OrderEntity> wrapper = new LambdaQueryWrapper<>(orderQry).select(OrderEntity::getId, OrderEntity::getOrderMsg);
    orderMapper.selectOne(wrapper); // SELECT id,order_msg FROM my_mysql.order WHERE deal_msg='575'
    
  • 复杂SQL,例如嵌套SQL,直接写XML,在本人较长期的使用过程中,通过Java方法写复杂SQL,看起来不直观,且很费劲。

    例如这种情况:

    select * from table_a where a_id in (
    	select b_id from table_b where b_id in (1,2,3)
    )
    

PS

如果帮助到你的话,点个赞鼓励下,欢迎加入我的置顶博客的javaweb交流群,不搞带课推广,让我们一起向诗靠拢。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值