基于QueryWrapper,实现MybatisPlus多表关联查询

版权声明:请勿用于任何商业用途的文章转载,转载请说明出处!

1.dao层接口使用Select注解写SQL:

重点:@Param(“ew”) Wrapper参数是必须,因为${ew.customSqlSegment} 底层其实就是where 条件,所以为了保证Wrapper不为空,service层代码中的Wrapper至少需要有一个条件:1 = 1

@Override
    @Select("select a.code as code , b.name as name , b.barcode as barcode ,  a.ware_code as wareCode , c.name as wareName , a.qty as qty , a.oprice as oprice , a.total as total , " +
            " a.id as id , a.create_by as createBy , a.create_date as createDate , a.update_by as updateBy , a.update_date as updateDate , a.status as status , a.remarks as remarks  " +
            "from sku_stock a , goods b , warehouse c " +
            "${ew.customSqlSegment} and a.code = b.code and a.ware_code = c.code")
    IPage<SkuStock> selectPage(IPage<SkuStock> page, @Param("ew")Wrapper<SkuStock> queryWrapper);

2.service层代码示例:

service父类封装的findPage方法

/**
     * 封装findPage
     * @param entity
     * @param search  Map中的key:";"为保留关键字,拆分数组,仅支持最大长度2的数组,
     *                下标0:QueryWrapper查询条件中的列名(支持多表关联查询的表别名 + 列名方式,需要dao层接口支持)
     *                下标1: QueryWrapper中不同的查询条件,eq:等于,ge:大于等..... todo:请自行完善Mybatis eq、ne、gt、lt、ge、le等
     *                Map中的value:QueryWrapper需要查询的值
     * @param args  QueryWrapper中order by 排序数组
     * @return
     */
    public IPage<T> findPage(T entity , Map<String , Object> search , String... args){
        long current = 1L;
        long size = 10L;
        if (EmptyUtil.isNoEmpty(ReflexUtil.getFieldValue(entity , "page")) && (long) ReflexUtil.getFieldValue(entity , "page") != 0){
            current = (long) ReflexUtil.getFieldValue(entity , "page");
        }
        if (EmptyUtil.isNoEmpty(ReflexUtil.getFieldValue(entity , "limit")) && (long) ReflexUtil.getFieldValue(entity , "limit") != 0){
            size = (long) ReflexUtil.getFieldValue(entity , "limit");
        }

        QueryWrapper<T> queryWrapper;
        if (EmptyUtil.isNoEmpty(search)){
            queryWrapper = new QueryWrapper<>();
            for (Map.Entry<String , Object> entry:search.entrySet()
                 ) {
 
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus是一个基于MyBatis的增强工具,它提供了很多便捷的功能来简化开发。在MyBatis-Plus中,多表关联查询多对一可以通过使用@ManyToOne注解来实现。 首先,需要在实体类中定义多对一的关系。假设我们有两个实体类:Order和User,一个订单对应一个用户。在Order实体类中,我们可以使用@ManyToOne注解来定义多对一的关系: ```java public class Order { // 其他属性... @ManyToOne @JoinColumn(name = "user_id") private User user; // 其他方法... } ``` 在User实体类中,我们可以使用@OneToMany注解来定义一对多的关系: ```java public class User { // 其他属性... @OneToMany(mappedBy = "user") private List<Order> orders; // 其他方法... } ``` 接下来,在查询订单时,可以使用MyBatis-Plus提供的Wrapper来进行多表关联查询。例如,我们想要查询订单及其对应的用户信息,可以使用如下代码: ```java QueryWrapper<Order> wrapper = new QueryWrapper<>(); wrapper.select("order_id", "order_name", "user_id", "user_name") .leftJoin("user", "order.user_id = user.user_id") .eq("order_id", orderId); Order order = orderMapper.selectOne(wrapper); ``` 上述代码中,我们使用leftJoin方法进行左连接查询,将订单表和用户表进行关联。通过select方法指定需要查询的字段,然后通过eq方法指定查询条件。最后,使用selectOne方法执行查询操作。 这样,就可以实现多表关联查询多对一的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值