您的位置:

Mybatisplus连表查询指南

一、mybatisplus连表查询结果集封装

Mybatisplus通过使用@Entity注解来标识实体类的主表,使用@TableField注解来标识实体类中的外键关联字段,从而实现连表查询的结果集封装。例如:

@Entity
@Table(name = "user_info")
public class UserInfo {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String username;
    private String nickname;
    @TableField(exist = false)
    private List<Order> orders;
}

@Entity
@Table(name = "order")
public class Order {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String orderNo;
    private Double orderAmt;
    private Long userId;
}

在这里,UserInfo和Order是两个实体类,通过在UserInfo中使用@TableField(exist = false)注解来标识实体类中的外键关联字段,实现了与Order的多表关联查询。

二、mybatisPlus连表查询

在使用mybatisPlus进行多表关联查询时,可以使用Wrapper来构建查询条件,也可以自定义sql来实现查询。例如:

使用Wrapper构建查询条件:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test");
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

使用自定义sql语句查询:

@Select("SELECT * FROM user_info ui INNER JOIN order o ON ui.id = o.userid WHERE ui.username = #{username}")
List<UserInfo> selectUserInfoByUsername(@Param("username") String username);

三、mybatis查询表结构

使用mybatis-plus进行多表关联查询时,查询表结构非常重要,一般使用select *方式查询表结构。例如:

SELECT *
FROM information_schema.COLUMNS
WHERE TABLE_NAME = 'user_info'
UNION ALL
SELECT *
FROM information_schema.COLUMNS
WHERE TABLE_NAME = 'order';

四、mybatisplus多条件查询

使用mybatis-plus进行多条件查询时,可以使用Wrapper来构建查询条件,例如:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test")
        .ge("age", 18)
        .le("age", 30);
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

五、mybatisplus多表查询分页

使用mybatis-plus进行多表查询时,分页查询是非常常见和必要的。通过以下代码可以实现多表查询分页:

IPage<UserInfo> page = new Page<>(1, 10);
QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test");
IPage<UserInfo> userInfoIPage = userInfoMapper.selectPage(page, wrapper);

六、mybatisplus多表关联查询

使用mybatis-plus进行多表关联查询时,可以使用Wrapper来构建关联查询条件,例如:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("ui.username", "test")
        .eq("o.orderNo", "123456")
        .inSql("ui.id", "SELECT o.userId FROM order o WHERE o.orderNo = '123456'");

wrapper.select("ui.*", "o.*")
        .leftJoin("order o", "ui.id = o.userId");
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

七、mybatisplus联表查询

使用mybatis-plus进行联表查询时,可以通过在Wrapper中使用table()方法来指定需要联表查询的表,例如:

QueryWrapper<Order> wrapper = new QueryWrapper<>();
wrapper.select("o.*", "ui.nickname")
        .eq("o.orderNo", "123456")
        .eq("ui.username", "test")
        .table("order o")
        .leftJoin("user_info ui", "o.userId = ui.id");
List<Order> orderList = orderMapper.selectList(wrapper);

八、mybatisplus查询列表

使用mybatis-plus查询列表时,需要根据实际需求来选择使用Wrapper构建查询条件或是使用自定义sql语句查询。例如:

使用Wrapper构建查询条件:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test");
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

使用自定义sql语句查询:

@Select("SELECT * FROM user_info WHERE username = #{username}")
List<UserInfo> selectUserInfoByUsername(@Param("username") String username);

九、mybatisplus查询语句选取

使用mybatis-plus进行查询时,需要根据具体的业务需求来选择使用哪种查询语句,例如:

使用select x from table where y = ? and z = ?方式查询:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.select("id", "username")
        .eq("username", "test")
        .eq("age", 20);
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

使用select * from table where y = ? and z = ?方式查询:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test")
        .eq("age", 20);
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

通过以上分析,我们可以看出,使用mybatisplus进行多表连表查询十分灵活和简单。同时,通过灵活的条件构建,可以满足不同类型的查询需求。希望此篇文章能为大家提供一些帮助。