Mybatis多表查询之一对多
一对一查询(多对一查询)
需求:
查询所有账户信息,关联查询下单用户信息
注意:
因为一个账户信息只能供,某个用户使用,所以从查询账户信息出发关联查询用户是一对一查询,如果从用户信息出发查询用户下的账户信息则是一对多查询,因为一个用户可以有多个账户。
mybatis中的多表查询:
示例:用户和账号
一个用户可以有多个账号
一个账号只能属于一个用户(多个账户也可以属于同一个用户)
步骤:
1.建立两张表:用户表,账户表。
让用户表和账户表之间具备一对多的关系。
需要使用外键在账户表中添加
2.建立两个实体类:用户实体类和账户实体类
让用户和账户的实体类能够体现出一对多的关系
3.建立两个配制文件
用户的配置文件
账户的配置文件
4.实现配置
当我们查询用户时,可以得到用户下所包含的账户信息。
当我们查询用户时,可以同时得到账户的所属用户信息。
定义账户信息的实体类
public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", uid=" + uid +
", money=" + money +
'}';
}
}
编写Sql语句
实现查询账户信息时,也要查询账户所对应的用户信息。
select account2.*,user.username,user.address from account2,user where account2.uid=user.id;
在MySql中测试的查询结果如下:
![](https://img-blog.csdnimg.cn/img_convert/209e48efbaf7db5a170f33396514edd9.png)
定义AccountUser类
为了能够封装上面的SQL语句的查询结果,定义AccountCustomer类中要包含账户信息同时还要包含用户信息,所以我们要在定义AccountUser类时可以继承User类。
public class AccountUser extends Account{
private String username;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return super.toString()+" AccountUser{" +
"username='" + username + '\'' +
", address='" + address + '\'' +
'}';
}
}
定义账户的持久层Dao接口
public interface IAccountDao {
//查询所有账户,同时还要获取到当前用账户的所属用户信息
List<AccountUser> findAll();
//查询所有账户,并且带有用户名称和用户地址信息