案例使用两张表
一张user用户表
映射关系分析
首先,站在订单的角度考虑:
一张订单对应一个用户,这是一对一
然后,站在用户的角度考虑:
一个用户可以有多个订单,这是一对多
那么SQL语句该如何写?
还记得外联接吗,left/right join
以某张表为主,取出里面所有记录,然后每条记录与另外一张表进行连接
不管能不能匹配上条件,最终都会保留;能匹配,正确保留,不匹配,其他表的字段都置空
也就是说,以哪张表为主,哪张表的记录保留的最完整,另外一张是残缺的,因为有些字段没能和主表匹配上
一对一
以订单为主所以sql语句如下
select o.* ,
u.username
from orders as o left join user as u
on o.user_id = u.id
下面放案例源码:
写两个bean
user 、orders
在一对一中,为表示两者关系,在orders中存一个user变量 表示一对一
user
public class User {
private int id ;
private String username ;
private Date birthday ;
private String sex ;
private String address ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address="
+ address + "]";
}
}
orders
public class Orders {
private int id ;
private int user_id ;
private Integer number ;
private Date createtime ;
private String note ;
private User user ;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public Integer getNumber() {
return number;
}