一对一操作:
@Select("select *,user_id as userId from tb_order where order_number=#{orderNumber}")
@Results(
{
@Result(
property = "user",
javaType = User.class,
one = @One(select = "com.yh.mapper.UserMapper.selectById"),
/*当column中的值赋值之后,查询不到id的值,使用别名在设置一个字段用于传输或者赋值*/
column = "userId"
)
}
)
List<Order> selectByOrderNumber(String orderNumber);
@Select("select * from tb_user where id=#{id}")
List<User> selectById(Integer id);
public class Order {
private Integer id;
private Long userId;
private String orderNumber;
private User user;
private List<OrderDetail> orderdetails;
}
@result中的参数介绍:
- property:代表如实体类Order中的User user中的user
- javaType:代表User类的class文件
- one:代表的是连接另一张表的sql映射
- colum:代表的是order表向user表sql传输的数据,相当于两个表的连接条件。
一对多操作:
@Select("select *,user_id as userId ,id as uid from tb_order where order_number =#{orderNumber}")
@Results(
{
@Result(
property = "orderdetails" ,javaType = List.class,
many = @Many(select = "com.yh.mapper.OrderDetailsMapper.selectByOrderId"),
column = "uid"
)
}
)
List<Order> oneToMany(String orderNumber);
@Select("select * from tb_orderdetail where order_id=#{orderId}")
List<OrderDetail> selectByOrderId(Integer orderId);
@Data
public class Order {
private Integer id;
private Long userId;
private String orderNumber;
private User user;
private List<OrderDetail> orderdetails;
}
与一对一不同的是,@resule中的one属性变为了many属性。
总结
使用简单的单表操作使用注解确实简单,但是如果复杂的多表操作,使用注解会导致更加复杂。
所以再次建议大家在使用单表操作时使用注解开发;
在复杂的多表操作时使用xml配置文件进行开发。