1、两表关联预加载
实体类:
TestUser:
@Data
@TableName("test_user")
@NoArgsConstructor
public class TestUser {
private Long id;
private String name;
private List<TestOrder> orders;
}
TestOrder:
@TableName("test_order")
@NoArgsConstructor
public class TestOrder {
private Long id;
private String orderNo;
private Long userId;
}
controller层
@RestController
@RequestMapping("/test")
public class UserController {
@Resource
private UserService userService;
@GetMapping("/preloadList")
public List<TestUser> list() {
return userService.findAll();
}
}
plm-module
/
src/main/java/com/plm/module/demo/preload/domain
/
service层
public interface UserService {
List<TestUser> findAll();
}
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public List<TestUser> findAll() {
return userMapper.findAll();
}
}
mapper层
@Mapper
public interface UserMapper extends BaseMapper<TestUser> {
@Select("select * from test_user")
@Results(id = "userResultMap", value = {
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "orders", column = "id", many = @Many(select = "com.plm.module.demo.preload.mapper.OrderMapper.findByUserId"))
})
List<TestUser> findAll();
}
@Mapper
public interface OrderMapper {
@Select("select * from test_order where user_id=#{id}")
List<TestOrder> findByUserId(@Param("id") Long id);
}
运行结果:
[
{
"id": 1,
"name": "张三",
"orders": [
{
"id": 1,
"orderNo": "asd",
"userId": 1
},
{
"id": 2,
"orderNo": "q w we",
"userId": 1
}
]
},
{
"id": 2,
"name": "李四",
"orders": [
{
"id": 3,
"orderNo": "as",
"userId": 2
}
]
},
{
"id": 3,
"name": "王五",
"orders": [
{
"id": 4,
"orderNo": "adc",
"userId": 3
},
{
"id": 5,
"orderNo": "fff",
"userId": 3
}
]
},
{
"id": 4,
"name": "赵六",
"orders": []
}
]
2、多表关联预加载
实体类
TestUser:
@Data
@TableName("test_user")
@NoArgsConstructor
public class TestUser {
private Long id;
private String name;
private List<TestOrder> orders;
}
TestOrder:
@Data
@TableName("test_order")
@NoArgsConstructor
public class TestOrder {
private Long id;
private String orderNo;
private Long userId;
private List<TestItem> items;
}
TestItem:
@Data
@TableName("test_item")
@NoArgsConstructor
public class TestItem {
private Long id;
private String name;
private Long orderId;
}
controller层
@RestController
@RequestMapping("/test")
public class UserController {
@Resource
private UserService userService;
@GetMapping("/preloadList")
public List<TestUser> list() {
return userService.findAll();
}
}
service层
public interface UserService {
List<TestUser> findAll();
}
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public List<TestUser> findAll() {
return userMapper.findAll();
}
}
mapper层
@Mapper
public interface UserMapper extends BaseMapper<TestUser> {
@Select("select * from test_user")
@Results(id = "userResultMap", value = {
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "orders", column = "id", many = @Many(select = "com.plm.module.demo.preload.mapper.OrderMapper.findByUserId"))
})
List<TestUser> findAll();
}
@Mapper
public interface OrderMapper extends BaseMapper<TestOrder> {
@Select("select * from test_order where user_id=#{id}")
@Results(id = "orderResultMap", value = {
@Result(column = "id", property = "id"),
@Result(column = "order_no", property = "orderNo"),
@Result(column = "user_id", property = "userId"),
@Result(column = "id", property = "items", many = @Many(select = "com.plm.module.demo.preload.mapper.ItemMapper.selectItemsByOrderId")),
})
List<TestOrder> findByUserId(@Param("id") Long id);
}
@Mapper
public interface ItemMapper extends BaseMapper<TestItem> {
@Select("select * from test_item where order_id=#{id}")
List<TestItem> selectItemsByOrderId(@Param("id") Long id);
}
运行结果:
[
{
"id": 1,
"name": "张三",
"orders": [
{
"id": 1,
"orderNo": "asd",
"userId": 1,
"items": [
{
"id": 1,
"name": "ss",
"orderId": 1
},
{
"id": 2,
"name": "dd",
"orderId": 1
}
]
},
{
"id": 2,
"orderNo": "q w we",
"userId": 1,
"items": [
{
"id": 3,
"name": "ff",
"orderId": 2
}
]
}
]
},
{
"id": 2,
"name": "李四",
"orders": [
{
"id": 3,
"orderNo": "as",
"userId": 2,
"items": [
{
"id": 4,
"name": "cc",
"orderId": 3
},
{
"id": 5,
"name": "ww",
"orderId": 3
}
]
}
]
},
{
"id": 3,
"name": "王五",
"orders": [
{
"id": 4,
"orderNo": "adc",
"userId": 3,
"items": []
},
{
"id": 5,
"orderNo": "fff",
"userId": 3,
"items": []
}
]
},
{
"id": 4,
"name": "赵六",
"orders": []
}
]