数据准备
注意订单表不要直接取名order会与SQL关键字冲突
编写实体类
简单对应order_t表加上get、set即可,主键id最好用Integer类型
接下来首先来实现查询用户的时候把其所有订单查出来
给user实体类加上要它表查询的属性 orders
指定非表中数据【exist=false】,生成get、set
一定要生成get、set,否则Result中的orders拿不到selectByUid方法的返回值【没有set方法】
,前端也拿不到【没有get方法】
这里的@Resuts等于是做了一个拼接
编写Mapper类
UserMapper
package cn.itsp.demo.mapper;
import cn.itsp.demo.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserMapper extends BaseMapper<User> {
//查询用户,根据用户id查询信息
@Select("select * from user where id = #{id}")
User selectById(int id);
//查询用户及用户下所有订单
@Select("select * from user")
@Results(
{
@Result(column = "id", property = "id"),
@Result(column = "username", property = "username"),
@Result(column = "password", property = "password"),
@Result(column = "birth", property = "birth"),
@Result(column = "address", property = "address"),
@Result(column = "id", property = "orders", javaType = List.class,
//id会作为cn.itsp.demo.mapper.OrderMapper下selectByUid方法的参数【uid】,返回一个List<Order>
many = @Many(select = "cn.itsp.demo.mapper.OrderMapper.selectByUid")
)
}
)
List<User> selectAllUserAndOrders();
}
OrderMapper
package cn.itsp.demo.mapper;
import cn.itsp.demo.entity.Order;
import cn.itsp.demo.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface OrderMapper {
@Select("select * from order_t where uid = #{id}")
List<Order> selectByUid(int uid);
//查询所有订单,同时查询订单用户
@Select("select * from order_t")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "order_time", property = "order_time"),
@Result(column = "total", property = "total"),
@Result(column = "uid", property = "user", javaType = User.class,
//uid会作为cn.itsp.demo.mapper.UserMapper下selectById方法的参数,返回一个User
one = @One(select = "cn.itsp.demo.mapper.UserMapper.selectById")
)
})
List<Order> selectAllOrderAndUser();
}
UserController添加url映射并调用相关方法
测试
接下来实现查询订单的时候把其用户一起查出来
在订单实体类中加入要它表查询的user属性
用uid作为UserMapper中selectById方法的参数,拿到uid对应user
OrderController添加映射并调用orderMapper中对应方法
测试
另外,因为UserMapper继承了BaseMapper,其中是有selectById方法的
所以可以不写,效果相同
附上个人对@Results的解读
正因为返回值类型是一个装Order对象的List,而我们的Order类中是有uid这个属性的,这里并没有对uid属性给值,故方法返回值中uid=null
小优化
uid为null的问题解决了