xml 配置方式实现复杂映射回顾
实现复杂映射我们之前可以在映射文件中通过配置来实现,使用注解开发后,我们可以通过 @Results
注解,@Result
注解,@One
注解和 @Many
注解组合完成复杂关系的配置。
注解 | 说明 |
---|---|
@Results |
代替的是标签 ,该注解中可以使用单个的 @Result 注解,也可以使用 @Result 集合。 使用方式: @Results({@Result(), @Result()}) 或者 @Results(@Result()) |
@Result |
代替了 标签和 标签 @Result 中的属性介绍 column:数据库中的列名 property:要装配的属性名 one:需要使用 @One 注解( @Result(one=@One)() )many:需要使用 @Many 注解( @Result(many=@many)() ) |
@One(一对一) | 代替了 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。 @One 注解属性介绍 select:指定用来多表查询的 sqlmapper 使用格式: @Result(column="", property="", one=(select="")) |
@Many(多对一) | 代替了 标签,是多表查询的关键,在注解中用来指定子查询返回对象集合。 使用格式: @Result(property="", column="", many=@many(select="")) |
一对一查询
一对一查询的模型
用户表和订单表的关系为,一个用户有多个订单,一共订单只属于一个用户
一对一查询需求:查询一个订单,与此同时查询该订单对应的用户
@startuml !include https://unpkg.com/plantuml-style-c4@latest/core.puml ' uncomment the following line and comment the first to use locally '!include core.puml left to right direction class orders { ordertime: varchar(255) total: double uid: int(11) id: int(11) } class user { username: varchar(50) password: varchar(50) birthday: varchar(50) id: int(11) } orders -[#595959,plain]-^ user : "uid:id" @enduml
一对一查询的语句
对应的 sql 语句
select * from orders;
select * from user where id=查询出订单的uid;
查询结果如下:
id | ordertime | total | uid | id | username | password | birthday |
---|---|---|---|---|---|---|---|
1 | 2019-12-12 | 3000 | 1 | 1 | lucy | 123 | 2019-12-12 |
2 | 2019-12-12 | 4000 | 1 | 1 | lucy | 123 | 2019-12-12 |
3 | 2019-12-12 | 5000 | 2 | 1 | lucy | 123 | 2019-12-12 |
1 | 2019-12-12 | 3000 | 1 | 2 | tom | 123 | 2019-12-12 |
创建 User 和 Order 实体
/**
* 订单
*
* @name: Order
* @author: terwer
* @date: 2022-03-17 17:42
**/
public class Order {
private Integer id;
private String orderTime;
private Double total;
// 代表当前订单属于哪一个用户
private User user;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderTime() {
return orderTime;
}
public void setOrderTime(String orderTime) {
this.orderTime = orderTime;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
this.total = total;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Order{" +
"id=" + id +
", orderTime='" + orderTime + '\'' +
", total=" + total +
", user=" + user +
'}';
}
}
/**
* 用户
*
* @name: User
* @author: terwer
* @date: 2022-05-25 13:25
**/
public class User {
private Integer id;
private String username;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
'}';
}
}
创建 IOrderMapper 接口
/**
* 订单映射
*
* @name: IUserMapper
* @author: terwer
* @date: 2022-03-17 17:54
**/
public interface IOrderMapper {
public List<Order> findOrderAndUser();
}
使用注解配置接口
/**
* 订单映射
*
* @name: IUserMapper
* @author: terwer
* @date: 2022-03-17 17:54
**/