MyBatis多表查询

目录

1.一对一查询

1.1一对一查询的模型

2.一对多查询

2.1一对多查询的模型

3.多对多查询

3.1多对多查询的模型

4.知识小结


1.一对一查询

1.1一对一查询的模型

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

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.caoyan.mapper.OrderMapper">
  <resultMap id="orderMap" type="order">
      <!-- 手动指定字段与实体属性的映射关系
        column:数据表的字段名称
        property:实体的属性名称
     -->
     <id column="oid" property="id"/>
     <result column="ordertime" property="ordertime"/>
     <result column="total" property="total"/>
     <!-- <result column="uid" property="user.id"/>
     <result column="username" property="user.username"/>
     <result column="password" property="user.password"/>
     <result column="birthday" property="user.birthday"/> -->
     <!-- 
       property:当前实体(order)中的属性名称(private User user)
       javaType:当前实体(order)中的属性的类型(User)
      -->
      <association property="user" javaType="user">
        <id column="uid" property="id"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="birthday" property="birthday"/>
      </association>
  </resultMap>
  <select id="findAll" resultMap="orderMap">
      select *,o.id oid from orders o,user u where o.uid=u.id
  </select>
</mapper>

2.一对多查询

2.1一对多查询的模型

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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.caoyan.mapper.UserMapper">
  <resultMap id="userMap" type="user">
      <id column="uid" property="id"/>
      <result column="username" property="username"/>
      <result column="password" property="password"/>
      <result column="birthday" property="birthday"/>
      <!-- 配置集合信息
        property:集合名称
        ofType:当前集合中的数据类型
     -->
     <collection property="orderList" ofType="order">
         <!-- 封装order的数据 -->
         <id column="oid" property="id"/>
         <result column="ordertime" property="ordertime"/>
         <result column="total" property="total"/>
     </collection>
  </resultMap>
  <select id="findAll" resultMap="userMap">
    SELECT *,o.id oid FROM user u,orders o where u.id=o.uid
  </select>
</mapper>

3.多对多查询

3.1多对多查询的模型

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

 

  <resultMap id="userRoleMap" type="user">
    <!-- user的信息 -->
    <id column="userId" property="id"/>
    <result column="username" property="username"/>
    <result column="password" property="password"/>
    <result column="birthday" property="birthday"/>
    <!-- user内部的roleList信息 -->
    <collection property="roleList" ofType="role">
      <id column="roleId" property="id"/>
      <result column="roleName" property="roleName"/>
      <result column="roleDesc" property="roleDesc"/>
    </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>

4.知识小结

MyBatis多表配置方式:

  • 一对一配置:使用<resultMap>+<association>做配置
  • 一对多配置:使用<resultMap>+<collection>做配置
  • 多对多配置:使用<resultMap>+<collection>做配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caoyy686868

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值