mybatis plus 使用 SelectProvider left join 和 分页
时间: 2024-05-03 14:23:11 浏览: 169
1、使用 SelectProvider 进行 left join
Mybatis Plus 提供了一个 SelectProvider 类,可以动态生成 SQL 语句。在 left join 操作中,我们可以使用 SelectProvider 来实现。
例如,我们有两个表,一个是用户表 user,另一个是订单表 order。我们想要查询某个用户的所有订单信息,可以使用 left join 来实现。
首先,我们需要定义一个查询语句的模板,使用 @SelectProvider 注解来指定:
```
@SelectProvider(type = MyProvider.class, method = "selectUserOrders")
List<UserOrder> selectUserOrders(@Param("userId") Long userId);
```
其中,MyProvider 是我们定义的一个 SelectProvider 类,selectUserOrders 是其中的一个方法,用来生成查询语句。
然后,在 MyProvider 中,我们需要实现 selectUserOrders 方法,生成查询语句:
```
public String selectUserOrders(@Param("userId") Long userId) {
return new SQL(){{
SELECT("user.*, order.*");
FROM("user");
LEFT_JOIN("order ON user.id = order.user_id");
WHERE("user.id = #{userId}");
}}.toString();
}
```
在这个方法中,我们使用 SQL 类来生成查询语句。首先,使用 SELECT 方法指定要查询的字段,使用 FROM 方法指定主表,使用 LEFT_JOIN 方法来进行左连接操作,使用 WHERE 方法来指定查询条件。
2、使用分页插件进行分页查询
Mybatis Plus 提供了一个分页插件,可以方便地实现分页查询。
首先,我们需要在配置文件中开启分页插件:
```
<plugins>
<plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
<property name="dialectType" value="mysql"/>
</plugin>
</plugins>
```
然后,在查询方法中,我们可以使用 Page 类来进行分页查询:
```
Page<UserOrder> page = new Page<>(1, 10);
List<UserOrder> userOrders = userOrderMapper.selectUserOrders(page, userId);
```
其中,Page 的第一个参数是当前页码,第二个参数是每页显示的记录数。userOrderMapper 是我们定义的一个 Mapper 接口,selectUserOrders 是其中的一个方法,用来进行查询操作。
在 selectUserOrders 方法中,我们需要使用 Mybatis Plus 提供的分页参数注解 @Param 来指定分页参数:
```
List<UserOrder> selectUserOrders(@Param("page") Page<UserOrder> page, @Param("userId") Long userId);
```
然后,在 SQL 语句中,我们可以使用 Mybatis Plus 提供的分页语句来进行分页操作:
```
public String selectUserOrders(@Param("page") Page<UserOrder> page, @Param("userId") Long userId) {
return new SQL(){{
SELECT("user.*, order.*");
FROM("user");
LEFT_JOIN("order ON user.id = order.user_id");
WHERE("user.id = #{userId}");
}}.toString() + " LIMIT " + page.getOffset() + ", " + page.getSize();
}
```
在这个方法中,我们需要使用 Page 类提供的 getOffset 和 getSize 方法来获取当前分页的偏移量和每页显示的记录数,然后将它们拼接到 SQL 语句的末尾。
阅读全文