一、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进行多表连表查询十分灵活和简单。同时,通过灵活的条件构建,可以满足不同类型的查询需求。希望此篇文章能为大家提供一些帮助。