下面是详细讲解“springboot + mybatis-plus实现多表联合查询功能(注解方式)”的完整攻略。
1. 简介
Mybatis-plus是一个强大的 ORM 框架,它可以极大地提高我们开发的效率,并且具有更好的性能表现。在多表联合查询的场景中,mybatis-plus的注解方式可以帮助我们快速实现。
2. 实现步骤
2.1. 添加依赖
在pom.xml文件中,添加相应的依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
2.2. 实体类设计
首先我们需要设计实体类。这里以几个表之间的联合查询为例,假设我们有三个表:
- User表,存储用户信息
- Order表,存储订单信息
- Goods表,存储商品信息
为了方便演示,我们定义以上三个表的实体类。
public class User {
private Long id;
private String name;
private Integer age;
// getter和setter
}
public class Order {
private Long id;
private Long userId;
private Long goodsId;
// getter和setter
}
public class Goods {
private Long id;
private String name;
private Double price;
// getter和setter
}
2.3. 定义Mapper接口
定义Mapper接口,在接口方法上使用Mybatis-plus提供的注解,该注解的参数就是对应的SQL语句。
@Mapper
public interface MyMapper {
@Select("SELECT u.*, g.*, o.* FROM user AS u INNER JOIN order AS o ON u.id = o.user_id INNER JOIN goods AS g ON g.id = o.goods_id WHERE u.id = #{id}")
List<Map<String,Object>> selectMultiTableByUserId(Long id);
}
2.4. 编写 Service 层代码
编写 Service 层代码,模块化的方式,每个功能对应一个方法,方便管理。
@Service
public class MyService {
@Autowired
private MyMapper myMapper;
public List<Map<String,Object>> selectMultiTableByUserId(Long id) {
return myMapper.selectMultiTableByUserId(id);
}
}
2.5. 编写 Controller 层代码
编写Controller层代码,提供Restful API接口。
@RestController
@RequestMapping("/api")
public class MyController {
@Autowired
private MyService myService;
@GetMapping("/query")
public List<Map<String,Object>> queryMultiTableByUserId(@RequestParam Long id) {
return myService.selectMultiTableByUserId(id);
}
}
至此,我们的多表联合查询的功能已经实现了。
3. 示例说明
为了更好的说明,这里我们提供两个示例,分别是查询用户的订单信息和查询订单的商品信息。
3.1. 查询用户的订单信息
查询用户的订单信息,需要联合查询user、order和goods表,根据用户id获取用户在订单中的信息和订单中商品的信息。
假设我们已经在User表中插入了一条记录:
User{id=1, name='amy', age=21}
在Order表中插入了两条记录:
Order{id=1, userId=1, goodsId=2}
Order{id=2, userId=1, goodsId=3}
在Goods表中插入了两条记录:
Goods{id=2, name='Apple', price=5.50}
Goods{id=3, name='Banana', price=2.80}
此时我们可以查询用户的订单信息:
@GetMapping("/order")
public List<Map<String,Object>> queryOrderByUserId(@RequestParam Long id) {
return myService.selectMultiTableByUserId(id);
}
查询结果为:
[
{
"id": 1,
"name": "amy",
"age": 21,
"id": 1,
"user_id": 1,
"goods_id": 2,
"id": 2,
"name": "Apple",
"price": 5.5
},
{
"id": 1,
"name": "amy",
"age": 21,
"id": 2,
"user_id": 1,
"goods_id": 3,
"id": 3,
"name": "Banana",
"price": 2.8
}
]
可以看到,每条记录包含了用户的信息、订单的信息和商品的信息。
3.2. 查询订单的商品信息
查询订单的商品信息,需要联合查询order和goods表,根据订单id获取商品的信息。
@Mapper
public interface MyMapper {
@Select("SELECT * FROM order AS o INNER JOIN goods AS g ON g.id = o.goods_id WHERE o.id = #{id}")
List<Map<String,Object>> selectGoodsByOrderId(Long id);
}
查询结果为:
[
{
"id": 1,
"goods_id": 2,
"goods.id": 2,
"name": "Apple",
"price": 5.5
}
]
可以看到,每条记录包含了订单和商品的信息。
4. 总结
通过以上步骤,我们可以成功地实现多表联合查询的功能。Mybatis-plus提供了方便的注解方式,让我们开发更加高效。同时也要注意SQL语句的书写,如果SQL语句复杂,可以使用Mybatis-plus提供的wrapper封装SQL语句,让SQL语句更加简洁易懂。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot + mybatis-plus实现多表联合查询功能(注解方式) - Python技术站