spring boot mybatis puls 查找一个表的所有数据,并带出他对应子类的总数
时间: 2023-12-06 15:45:18 浏览: 126
Springboot集成MyBatis实现查询表操作
假设有一个表`parent_table`和一个对应的子表`child_table`,并且`child_table`中有一个外键`parent_id`与`parent_table`中的主键关联,可以使用以下SQL语句查询`parent_table`中的所有数据,并带出每个`parent_table`对应的`child_table`的总数:
```sql
SELECT
pt.*,
COUNT(ct.parent_id) AS child_count
FROM
parent_table pt
LEFT JOIN child_table ct ON pt.id = ct.parent_id
GROUP BY
pt.id
```
这里使用了左连接`LEFT JOIN`,确保即使某个`parent_table`没有对应的`child_table`数据,也能查询出来,并且使用`COUNT`函数统计每个`parent_table`对应的`child_table`的总数。最后使用`GROUP BY`对`parent_table`的主键进行分组。在MyBatis Plus中,可以使用`@TableField`注解映射表字段和实体属性,使用`@TableId`注解标记实体属性为主键,使用`@TableName`注解标记表名。还可以使用`@TableLogic`注解标记逻辑删除字段,使用`@Version`注解标记乐观锁字段,等等。例如:
```java
@Data
@TableName("parent_table")
public class Parent {
@TableId(type = IdType.AUTO)
private Long id;
@TableField("name")
private String name;
@TableField(exist = false)
private Integer childCount;
}
```
其中`exist = false`表示该属性不是表字段,需要使用SQL语句中的`COUNT(ct.parent_id) AS child_count`查询出来,并且使用`@TableField(value = "child_count", exist = false)`注解映射到实体属性中。在`ParentMapper`中可以定义一个`selectParentListWithChildCount()`方法,使用MyBatis Plus提供的`@Select`和`@Results`注解实现:
```java
@Select("SELECT pt.*, COUNT(ct.parent_id) AS child_count FROM parent_table pt LEFT JOIN child_table ct ON pt.id = ct.parent_id GROUP BY pt.id")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "name", property = "name"),
@Result(column = "child_count", property = "childCount")
})
List<Parent> selectParentListWithChildCount();
```
这样就可以查询出`parent_table`中的所有数据,并带出每个`parent_table`对应的`child_table`的总数了。
阅读全文