在 MyBatis 中进行表关联的映射,可以通过 SQL 语句和结果映射来实现。以下是一对一和一对多关联的映射示例:
假设有两张表:users
和 user_details
,它们之间通过用户ID关联。
public class User {
private int id;
private String name;
// Other properties
private UserDetails details;
// Getter and Setter
}
public class UserDetails {
private String address;
private String phone;
// Other properties
// Getter and Setter
}
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
// Other results from users table
@Result(property = "details.address", column = "address"),
@Result(property = "details.phone", column = "phone")
// Other results from user_details table
})
@Select("SELECT u.*, d.address, d.phone FROM users u LEFT JOIN user_details d ON u.id = d.user_id WHERE u.id = #{id}")
User getUserWithDetailsById(int id);
假设有两张表:users
和 orders
,一个用户可以有多个订单。
public class User {
private int id;
private String name;
// Other properties
private List orders;
// Getter and Setter
}
public class Order {
private int orderId;
private Date orderDate;
private double amount;
// Other properties
// Getter and Setter
}
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
// Other results from users table
@Result(property = "orders", column = "id", javaType = List.class,
many = @Many(select = "getOrdersByUserId"))
})
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserWithOrdersById(int id);
@Select("SELECT * FROM orders WHERE user_id = #{userId}")
List getOrdersByUserId(int userId);
以上展示了一对一和一对多的表关联映射方式,通过 MyBatis 的结果映射机制,可以方便地处理多表关联查询,并将结果映射到 Java 对象中。
Proudly powered by WordPress