首页 > 编程语言 >MyBatis关联查询基础 | Java

MyBatis关联查询基础 | Java

时间:2022-10-29 10:44:31浏览次数:60  
标签:Java column 用户 查询 public Result MyBatis property id

mybatis关系映射

1.用户与订单的关系

  • 一个用户有多个订单,一个订单只属于一个用户

    • 查询一个用户的所有订单

      属于一对多查询示例

      public interface UserMapper {
          @Select("select * from user")
          @Result({
              @Result(id=true, column="id", property="id"),
              @Result(column="username", property="username"),
              @Result(column="password", property="password"),
              @Result(
                  property="orderList",
                  column="id",
                  javaType=List.class,
                  many=@Many(select="com.miaokela.mapper.OrderMapper.findByUid")  // 通过订单Mapper查询当前用户id对应的订单信息
              )
          })
          public List<User> findAllUserAndOrder();  // 查询所有用户以及用户下的订单
      }
      

      根据用户ID查询所有订单的Mapper

      public interface OrderMapper {
          @Select("select * from order where uid=#{uid}")
          public List<Order> findByUid(int uid);
      }
      
      • 用户模型

        public class User {
            private int id;
            private String username;
            private String password;
            private Date birthday;
        }
        
      • 订单模型

        public class Order {
            private int id;
            private Date ordertime;
            private double total;
        
            // 属于哪个用户
            private User user;
        }
        
      • xml的通过resultMap实现mapper接口,查询所有用户以及用户下的订单

        <resultMap id="userMap" type="com.miaokela.domain.User">
            <id column="id" property="id"/>
            <result column="username" property="username"/>
            <result column="password" property="password"/>
            <result column="birthday" property="birthday"/>
            <collection property="orderList" ofType="com.miaokela.domain.Order">
                <id column="id" property="id"/>
                <result column="ordertime" property="ordertime"/>
                <result column="total" property="total"/>
            </collection>
        </resultMap>
        
    • 查询订单信息以及关联用户(一个)信息

      • 两张表分开查

        属于多对一查询示例

        public interface OrderMapper {
            @Select("select * from order")
            @Result({
                @Result(id=true, column="id", property="id"),
                @Result(column="ordertime", property="ordertime"),
                @Result(column="total", property="total"),
                @Result(
                    property="user",
                    column="uid",
                    one=@One(select="com.miaokela.mapper.UserMapper.findById")  // 通过用户Mapper查询当前订单id对应的用户信息
                )
            })
            public List<Order> findAllOrderAndUser();  // 查询所有订单以及订单下的用户
        }
        

        根据用户ID查询用户信息的Mapper

        public interface UserMapper {
            @Select("select * from user where id=#{id}")
            public User findById(int id);
        }
        
        • xml的方式实现mapper接口,查询订单信息以及对应用户的信息
          <resultMap id="orderMap" type="com.miaokela.domain.Order">
              <id column="id" property="id"/>
              <result column="ordertime" property="ordertime"/>
              <result column="total" property="total"/>
              <association property="user" column="uid" select="com.miaokela.mapper.UserMapper.findById"/>
          </resultMap>
          
      • 两张表一起查

        属于多对一查询示例

        public interface OrderMapper {
            @Select("select o.*, u.username, u.password, u.birthday from order o, user u where o.uid=u.id")
            @Result({
                @Result(id=true, column="id", property="id"),
                @Result(column="ordertime", property="ordertime"),
                @Result(column="total", property="total"),
                @Result(column="uid", property="uid"),
                @Result(column="username", property="user.username"),
                @Result(column="password", property="user.password"),
            })
            public List<Order> findAll();  // 查询所有订单以及订单下的用户信息
        }
        
        • xml的方式实现mapper接口,两张表一起查
          <resultMap id="orderMap" type="com.miaokela.domain.Order">
              <id column="id" property="id"/>
              <result column="ordertime" property="ordertime"/>
              <result column="total" property="total"/>
              <result column="uid" property="uid"/>
              <result column="username" property="user.username"/>
              <result column="password" property="user.password"/>
          </resultMap>
          
  • 一个用户有多个角色,一个角色可以属于多个用户

    查询一个用户信息以及其属于的所有角色
    属于多对多查询示例,操作等同于一对多查询

    public interface UserMapper {
        @Select("select * from user")
        @Result({
            @Result(id=true, column="id", property="id"),
            @Result(column="username", property="username"),
            @Result(column="password", property="password"),
            @Result(
                property="roleList",
                column="id",
                javaType=List.class,
                many=@Many(select="com.miaokela.mapper.RoleMapper.findByUid")  // 通过角色Mapper查询当前用户id对应的角色信息
            )
        })
        public List<User> findAllUserAndRole();  // 查询所有用户以及用户下的角色
    }
    

    根据用户ID查询所有角色的Mapper

    // 用户关联的角色表信息: 通过第三张表的roleId和userId分别关联到role和user表中的id的条件,查询出角色表的数据
    public interface RoleMapper {
        @Select("select * from user_role ur, role r where ur.roleId=r.id and ur.userId=#{uid}")
        public List<Role> findByUid(int uid);
    }
    
    • 用户模型

      public class User {
          ...
          private List<Role> roleList;
      }
      
    • xml的方式实现mapper接口,查询用户信息以及对应角色的信息

      <resultMap id="userMap" type="com.miaokela.domain.User">
          <id column="id" property="id"/>
          <result column="username" property="username"/>
          <result column="password" property="password"/>
          <collection property="roleList" ofType="com.miaokela.domain.Role">
              <id column="id" property="id"/>
              <result column="roleName" property="roleName"/>
              <result column="roleDesc" property="roleDesc"/>
          </collection>
      </resultMap>
      

标签:Java,column,用户,查询,public,Result,MyBatis,property,id
From: https://www.cnblogs.com/miaokela/p/16838215.html

相关文章

  • 前端项目实战105-isCompoundKey查询
    ["id"]76search_manufacture_sizeconstisCompoundKey=(primaryKey:PrimaryKey):Boolean=>{returnprimaryKey.length>1;}判断数组长度是否大于1返回值Boole......
  • 力扣1773(java&python)-统计匹配检索规则的物品数量(简单)
    题目:给你一个数组items,其中 items[i]=[typei,colori,namei],描述第i件物品的类型、颜色以及名称。另给你一条由两个字符串 ruleKey和ruleValue表示的检索规......
  • Java多线程(6):锁与AQS(上)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 在Java面试中,有一类高频问题会经常问到(火箭式问题):Java有几种锁?都是干嘛的?我想对于面试经验较为丰富的人,这个问题极有可......
  • xxqJava-Blog2
    一、前言(1)题目集四之凸四边形的计算:此次的题目集基于第三次作业三角形的判断又做了很大的提升。(2)题目集五:凸五边形的计算,这次题目集两道题可以算是是一道题,我猜老师觉得......
  • linq查询
    最开始的对象查询是用foreach来遍历输出List<string>fruits=newList<string>(){"苹果","香蕉","西瓜","香瓜"};//{}对象集合初始化器,没有构造函数的初始化C......
  • idea中新建文件,文字改变,Java编码规范,CMD中的注意事项
    Java程序运行机制:1.编译制——C,C++解释制——网页-——Java先编译再解释新建文件src——右键第一个——第一个——name:HelloHello代码:publicclassHello{publ......
  • JAVA PTA第二次总结
    前言(1)前言:经过了前面的作业感觉后面的作业都没有像前面的那么折磨,可能已经习惯了折磨的感觉,写起来特别顺手。(2)设计与分析:7-2点线形系列4-凸四边形的计算用户输入一......
  • Mybatis 之 自定义插件 yyyy-MM
    请结合上一篇>>> MP插件原理  <<<  以及  >>>  Mybatis插件原理 <<< 进行查看查看 使用场景:在写一些与月份为单位的场景中,如:薪资系统(月薪制)1、Ja......
  • Spring整合Mybatis
    spring中整合mybatis一先添加spring框架1.创建一个maven项目2.在pom.xml中添加springjar包<!--Spring--><dependency><groupId>org.springframework</groupI......
  • Mybatis 之 自定义别名处理插件
    请结合上一篇>>> MP插件原理  <<<  以及  >>>  Mybatis插件原理 <<< 进行查看查看 MP开发中,遇到的问题,动态的Wrapper产生的SQL中,主要出现在组合......