• 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<Order> orderList;
    
        //描述的是当前用户具备哪些角色
        private List<Role> roleList;
    }

    5. 配置OrderMapper.xml

       <resultMap id="orderMap" type="order">
            <!--手动指定字段与实体属性的映射关系
                column: 数据表的字段名称
                property:实体的属性名称
            -->
            <id column="oid" property="id"></id>
            <result column="ordertime" property="ordertime"></result>
            <result column="total" property="total"></result>
            <!--<result column="uid" property="user.id"></result>
            <result column="username" property="user.username"></result>
            <result column="password" property="user.password"></result>
            <result column="birthday" property="user.birthday"></result>-->
    
            <!--
                property: 当前实体(order)中的属性名称(private User user)
                javaType: 当前实体(order)中的属性的类型(User)
            -->
            <association property="user" javaType="user">
                <id column="uid" property="id"></id>
                <result column="username" property="username"></result>
                <result column="password" property="password"></result>
                <result column="birthday" property="birthday"></result>
            </association>
    
        </resultMap>
    
        <select id="findAll" resultMap="orderMap">
             SELECT *,o.id oid FROM orders o,USER u WHERE o.uid=u.id
        </select>

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

    5. 配置UserMapper.xml

        <resultMap id="userMap" type="user">
            <id column="uid" property="id"></id>
            <result column="username" property="username"></result>
            <result column="password" property="password"></result>
            <result column="birthday" property="birthday"></result>
            <!--配置集合信息
                property:集合名称
                ofType:当前集合中的数据类型
            -->
            <collection property="orderList" ofType="order">
                <!--封装order的数据-->
                <id column="oid" property="id"></id>
                <result column="ordertime" property="ordertime"></result>
                <result column="total" property="total"></result>
            </collection>
        </resultMap>
    
        <select id="findAll" resultMap="userMap">
            SELECT *,o.id oid FROM USER u,orders o WHERE u.id=o.uid
        </select>
    
        <!--#############################################################################-->
    
        <resultMap id="userRoleMap" type="user">
            <!--user的信息-->
            <id column="userId" property="id"></id>
            <result column="username" property="username"></result>
            <result column="password" property="password"></result>
            <result column="birthday" property="birthday"></result>
            <!--user内部的roleList信息-->
            <collection property="roleList" ofType="role">
                <id column="roleId" property="id"></id>
                <result column="roleName" property="roleName"></result>
                <result column="roleDesc" property="roleDesc"></result>
            </collection>
        </resultMap>
    
        <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多表配置方式:
    一对一配置:使用<resultMap>做配置
    一对多配置:使用<resultMap>+<collection>做配置
    多对多配置:使用<resultMap>+<collection>做配置

  • 相关阅读:
    nginx公网IP无法访问浏览器
    Internet接入方式
    Adobe Photoshop Lightroom 5.3和序列号
    getopt
    printf
    scanf
    cycling -avoid the vicious cycle
    ACE handle_timeout 事件重入
    Linux查看程序端口占用
    The GNU C Library
  • 原文地址:https://www.cnblogs.com/ganxiang/p/15915124.html
Copyright © 2020-2023  润新知