MyBatis中的表关联查询实现示例

Mybatis中的一对多对象关联查询查询

模拟情景,商品与商品详情:一件商品可以对应多个商品详情信息,即从商品➡商品详情方向看,属于一对多。 在一对多关系中,需要在属于一的一方的实体类中添加多的一方的集合,一般为List<>类型

 //(省去了get和set的方法)
 public class Goods {
  private Integer goodsId ;
  private String title ;
  private String subTitle ;
  private Float originalCost ;
  private Float currentPrice ;
  private Float discount ;
  private Integer isFreeDelivery ;
  private Integer categoryId ;
  //在一对多关系中,在一方添加多的一方的集合
  private List<GoodsDetail> goodsDetailLists ;
}

在"一方"实体类对应的xml 文件中,添加配置信息

<!--  OneToMany对象关联查询
    resultMap可用于说明一对多或者多对一的映射逻辑
    id 是resultMap属性引用的标志
    type 指向One的实体(Goods)
-->
  <resultMap id="rmGoods1" type="com.imooc.mybatis.entity.Goods">
<!--    映射goods对象的主键到goods_id字段-->
    <id column="goods_id" property="goodsId"></id>
<!--
    collection的含义是,在
    sql语句得到结果后,对所有Goods对象遍历得到goods_id字段值,
    并代入到goodsDetail命名空间的selectByGoodsId的sql中执行查询
    将得到的“商品详情”集合赋值给goodsDetailsList对象
-->
    <collection property="goodsDetailLists" select="goodsDetail.selectByGoodsId"
          column="goods_id"></collection>
  </resultMap>
  <select id="selectOneToMany" resultMap="rmGoods1">
    select * from t_goods limit 0 , 1
  </select>

在“多方”对应的xml文件中添加

<mapper namespace="goodsDetail">
  <select id="selectByGoodsId" parameterType="Integer"
      resultType="com.imooc.mybatis.entity.GoodsDetail">
    select * from t_goods_detail where goods_id = #{value}
  </select>
</mapper>

至此,关于商品到商品详情的一对多查询配置就完成了。

测试

 //OneToMany
  @Test
  public void selectOneToMany(){
    SqlSession sqlSession = null ;
    try{
      sqlSession = MybatisUtils.openSession() ;
      List<Goods> list = sqlSession.selectList("goods.selectOneToMany");
      for (Goods g : list){
      //输出商品和该商品的详情信息数量
        System.out.println(g.getTitle() + ":" + g.getGoodsDetailLists().size());
      }
    }catch (Exception e){
      e.printStackTrace();
    }finally {
      MybatisUtils.closeSession(sqlSession);
    }
  }

Mybatis多对一对象关联查询

在上诉情景中,商品详情➡商品即为多对一的关系
在多对一关系中,需要在多的一方的实体类中添加一的一方的实体对象

public class GoodsDetail {
  private Integer gdId ;
  private Integer goodsId ;
  private String gdPicUrl ;
  private Integer gdOrder ;
  //多对一:在多的一方添加一的一方的实体
  private Goods goods ;
}

在多的一方xml文件中添加

<!--  多对一关系-->
  <resultMap id="rmGoodsDetail" type="com.imooc.mybatis.entity.GoodsDetail">
    <id column="gd_id" property="gdId"></id>
    <result column="goods_id" property="goodsId"></result>
    <!-- goods.selectById 为goods.xml根据主键id查找goods信息。-->
    <association property="goods" select="goods.selectById" column="goods_id"></association>
  </resultMap>
  <select id="selectManyToOne" resultMap="rmGoodsDetail">
    select * from t_goods_detail limit 0 , 1
  </select>

测试

/**
   * 多对一对象关联映射
   * */
  @Test
  public void selectManyToOne(){
    SqlSession sqlSession = null ;
    try{
      sqlSession = MybatisUtils.openSession() ;
      List<GoodsDetail> list = sqlSession.selectList("goodsDetail.selectManyToOne");
      for (GoodsDetail gd : list){
        System.out.println(gd.getGdPicUrl() + ":" + gd.getGoods().getTitle());
      }
    }catch (Exception e){
      e.printStackTrace();
    }finally {
      MybatisUtils.closeSession(sqlSession);
    }
  }

到此这篇关于MyBatis中的表关联查询实现示例的文章就介绍到这了,更多相关MyBatis 表关联查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mybatis多表关联查询的实现(DEMO)

    概要 本节要实现的是多表关联查询的简单demo.场景是根据id查询某商品分类信息,并展示该分类下的商品列表. 一.Mysql测试数据 新建表Category(商品分类)和Product(商品),并插入几条测试数据. create table Category ( Id int not null auto_increment, Name varchar(80) null, constraint pk_category primary key (Id) ); INSERT INTO category

  • Spring boot2基于Mybatis实现多表关联查询

    模拟业务关系: 一个用户user有对应的一个公司company,每个用户有多个账户account. spring boot 2的环境搭建见上文:spring boot 2整合mybatis 一.mysql创表和模拟数据sql CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `company_id` int(11) NOT NULL, PRI

  • MyBatis中的表关联查询实现示例

    Mybatis中的一对多对象关联查询查询 模拟情景,商品与商品详情:一件商品可以对应多个商品详情信息,即从商品➡商品详情方向看,属于一对多. 在一对多关系中,需要在属于一的一方的实体类中添加多的一方的集合,一般为List<>类型 //(省去了get和set的方法) public class Goods { private Integer goodsId ; private String title ; private String subTitle ; private Float origin

  • Yii2中多表关联查询hasOne hasMany的方法

    表positionContent id position_id content_title content_id is_recommend list_sort update_time create_time 10 14 大成成长 160910 1 1 2017-02-09 11:51:56 2017-02-09 11:51:56 11 15 创新成长 160910 1 1 2017-02-09 11:52:08 2017-02-09 11:52:08 position表 id name titl

  • MongoDB中多表关联查询($lookup)的深入讲解

    一.  聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $project 指定输出文档里的字段. $match 选择要处理的文档,与fine()类似. $limit 限制传递给下一步的文档数量. $skip 跳过一定数量的文档. $unwind 扩展数组,为每个数组入口生成一个输出文档. $group 根据key来分组文档. $sort 排序文档. $geoNear

  • Spring Data JPA 实现多表关联查询的示例代码

    多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询后的结果,这里介绍第二种方式. 一.一对一映射 实体 UserInfo :用户. 实体 Address:家庭住址. 这里通过外键的方式(一个实体通过外键关联到另一个实体的主键)来实现一对一关联. 实体类 1.实体类 UserInfo.java package com.johnfnash.learn.domain; import java.io.Ser

  • Yii2中使用join、joinwith多表关联查询

    表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name customer_id book_id) 图书表 (id book_name author_id) 作者表 (id author_name) 模型定义 下面是这4个个模型的定义,只写出其中的关联 Customer class Customer extends \yii\db\ActiveRecord { // 这是获取客户的订单,由上面我们

  • 基于Mybatis Plus实现多表分页查询的示例代码

    注意:Mybatis Plus 3.0.7 版本才开始用[自定义sql]+[QueryWrapper],低版本不能使用,还是老实写SQL进行条件拼接 1.源码分析 在Wrapper<T>接口中就有如下方法 /** * 获取自定义SQL 简化自定义XML复杂情况 * 使用方法:自定义sql + ${ew.customSqlSegment} * 1.逻辑删除需要自己拼接条件 (之前自定义也同样) * 2.不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦) * 3.用法 ${e

  • mybatis主从表关联查询,返回对象带有集合属性解析

    目录 主从表关联查询,返回对象带有集合属性 VersionResult为接收返回数据对象 UpdateRecordEntity为从表数据 mapper.xml写法,这个是关键 sql查询语句 执行sql返回的数据 页面调取接口 mybatis关联查询(对象嵌套对象) 一种是用关联另一个resultMap的形式 一种联合查询(一对一)的实现 主从表关联查询,返回对象带有集合属性 昨天有同事让我帮着看一个问题,mybatis主从表联合查询,返回的对象封装集合属性.我先将出现的问题记录一下,然后再讲处

  • 使用AOP+反射实现自定义Mybatis多表关联查询

    目录 一.需求 二.核心代码 MapTo DoMap IDualMapper DualMapper DoMapAspect 三.使用方法 SysUser SysRole SysPermission SysUserService DoMapTests 测试数据 测试结果 一.需求 目前使用的ORM框架是Mybatis Plus,是Mybatis的增强框架,基础的CRUD的方法都集成了,开发起来很是方便.但是项目中总是需要多表关联查询. Mybatis的多表关联有两种 一.在Mapper中使用@Re

  • thinkphp中的多表关联查询的实例详解

    thinkphp中的多表关联查询的实例详解 在进行后端管理系统的编程的时候一般会使用框架来进行页面的快速搭建,我最近使用比较多的就是thinkphp框架,thinkphp框架的应用其实就是把前端和后端进行分割管理,前端用户登录查询系统放在thinkphp中的home文件夹中进行管理,后端管理系统放在thinkphp中的admin文件夹中进行管理.对了,在使用thinkphp框架的时候是是要用到mvc架构的,mvc架构就是model(数据模型).view(视图).controller(控制器)的结

随机推荐