Mybatis-plus多表查询

如题有一个用户表,有一个订单表,此时你想查询用户的时候把他附属的订单也查到 一对多

user pojo

package com.suse.entity;

import com.baomidou.mybatisplus.annotation.TableField;

import java.util.List;


public class User {
    private Integer id;
    private String userName;
    private String password;
    //你查询需要这个list order你就需要把这个属性添加上去
    @TableField(exist = false)
    private List<Order> orders;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public List<Order> getOrders() {
        return orders;
    }

    public void setOrders(List<Order> orders) {
        this.orders = orders;
    }
}

user mapper

package com.suse.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.suse.entity.User;
import org.apache.ibatis.annotations.*;

import java.util.List;
@Mapper
public interface UserMapper extends BaseMapper<User> {
//    查询用户与所有的订单
    @Select("select * from tb_user")
    //结果集映射:我从数据库中拿到的数据怎么给对象赋值
    @Results(
            {
                    @Result(column = "id",property = "id"),//属性值id赋值
                    @Result(column = "user_name",property = "userName"),
                    @Result(column = "password",property = "password"),
                    //MP允许你调用另一个mapper的方法,将这个id传给OrderMapper的selectOrderByUid(),这样就可以得到所有的订
                    @Result(column = "id",property = "orders",javaType =List.class,
                    many = @Many(select = "com.suse.mapper.OrderMapper.selectByUid"))//因为是一对多的,所以使用@Many,里面写调用那个mapper的哪个方法
                    //javaType指定orders的类型
            }
    )
    List<User> selectAllUserAndOrders();
}

pojo order

package com.suse.entity;

public class Order {
    private Integer id;

    private  String orderTime;

    private  Integer total;

    private Integer uid;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getOrderTime() {
        return orderTime;
    }

    public void setOrderTime(String orderTime) {
        this.orderTime = orderTime;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }
}

order mapper

package com.suse.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.suse.entity.Order;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface OrderMapper extends BaseMapper<Order> {
    @Select("select * from tb_order where uid = #{uid}")
    List<Order> selectByUid(int uid);
}

如题有一个用户表,有一个订单表,此时你想查询订单的时候将用户也查到 一对一

order pojo

package com.suse.entity;

import com.baomidou.mybatisplus.annotation.TableField;

public class Order {
    private Integer id;

    private  String orderTime;

    private  Integer total;

    private Integer uid;

    @TableField(exist = false)
    private User user;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getOrderTime() {
        return orderTime;
    }

    public void setOrderTime(String orderTime) {
        this.orderTime = orderTime;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

order mapper

package com.suse.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.suse.entity.Order;
import com.suse.entity.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface OrderMapper extends BaseMapper<Order> {
    @Select("select * from tb_order where uid = #{uid}")
    List<Order> selectByUid(int uid);
    @Select("select * from tb_order")
    @Results({
            @Result(column = "id",property = "id"),
            @Result(column = "order_time",property = "orderTime"),
            @Result(column = "total",property = "total"),
            @Result(column = "uid",property = "user",javaType = User.class,one =@One(
                    select = "com.suse.mapper.UserMapper.getUserById"
            ))
    })
    List<Order> selectAllOrderAndUser();
}


usermapper添加

@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Select("select * from tb_user where id = #{uid}")
    List<User> getUserById(int uid);
    }

条件查询

 @GetMapping("/find")
    public List<User> findByCond(){
        QueryWrapper<User> qw = new QueryWrapper<>();
        qw.eq("user_name","luck");
        return  userMapper.selectList(qw);
    }

分页查询

往往数据库中有很多条数据,不可能一次将数据都放出来,仅仅展示只定条数,剩下的用户点击下一条才会显示出来

spring-boot配置类


@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    return interceptor;
}
}

controller

 @GetMapping("/findByPage")
    public IPage findByPAGE(){
        //起始值与每页的条数
        Page<User> page = new Page<>(0,2);
        IPage iPage = userMapper.selectPage(page, null);   //MP自带的分页查询
        return iPage;
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值