Mybatis多表查询


1. 一对一查询的模型
用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户
一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

2. 一对一查询的语句
对应的sql语句:select * from orders o,user u where o.uid=u.id;
查询的结果如下:

3. 创建Order和User实体

public class Order {
  private int id;
  private Date ordertime;
  private double total;
  // 代表当前订单从属于哪一个客户
  private User user;
}
public class User {

    private int id;
    private String username;
    private String password;
    private Date birthday;

    //描述的是当前用户存在哪些订单
    private List orderList;

    //描述的是当前用户具备哪些角色
    private List roleList;
}

5. 配置OrderMapper.xml

   "orderMap" type="order">
        
        "oid" property="id">
        "ordertime" property="ordertime">
        "total" property="total">
        

        
        "user" javaType="user">
            "uid" property="id">
            "username" property="username">
            "password" property="password">
            "birthday" property="birthday">
        

    

    <select id="findAll" resultMap="orderMap">
         SELECT *,o.id oid FROM orders o,USER u WHERE o.uid=u.id
    select>

一对多查询的模型
用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户
一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单

5. 配置UserMapper.xml

    "userMap" type="user">
        "uid" property="id">
        "username" property="username">
        "password" property="password">
        "birthday" property="birthday">
        
        "orderList" ofType="order">
            
            "oid" property="id">
            "ordertime" property="ordertime">
            "total" property="total">
        
    

    <select id="findAll" resultMap="userMap">
        SELECT *,o.id oid FROM USER u,orders o WHERE u.id=o.uid
    select>

    

    "userRoleMap" type="user">
        
        "userId" property="id">
        "username" property="username">
        "password" property="password">
        "birthday" property="birthday">
        
        "roleList" ofType="role">
            "roleId" property="id">
            "roleName" property="roleName">
            "roleDesc" property="roleDesc">
        
    

    <select id="findUserAndRoleAll" resultMap="userRoleMap">
        SELECT * FROM USER u,sys_user_role ur,sys_role r WHERE u.id=ur.userId AND ur.roleId=r.id
    select>

多对多查询的模型
用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用
多对多查询的需求:查询用户同时查询出该用户的所有角色

知识小结
MyBatis多表配置方式:
一对一配置:使用做配置
一对多配置:使用+做配置
多对多配置:使用+做配置