Ibatis组合键关联查询

在使用Ibatis时,会经常遇到关联查询,一般有两种解决方案:

  1. 使用代码进行关联查询
  2. 使用Ibatis配置文件进行关联查询

使用代码进行关联查询不作解释,本次主要是针对Ibatis配置文件进行关联查询进行探究,如发现有问题或不当之处还请不吝赐教!

对于Ibatis配置文件进行关联查询,下面举一个例子进行辅助描述:

假设有这样一个需求:某一网站页面需要展示文章,文章有两种不同的类别,分别为A1、A2,在每篇文章后都会跟随一些相关的商品,同一商品可关联任意类别文章。

分析该需求可得知,文章一张表,相关商品一张表,相关商品和文章的关联在一张关联表中,因此当文章去查找相关商品时,就无法单单根据文章的主键id去查询,而是要根据关联表中相关商品的id和相关商品的从属类别(A1、A2)来进行判断。

相关代码如下:

文章DO:

 1   class Article{
 2         /**
 3          * 主键id
 4          */
 5         private Long id;
 6         /**
 7          * 文章标题
 8          */
 9         private String title;
10         /**
11          * 文章类别
12          */
13         private Integer type;
14         /**
15          * 文章商品关联集合
16          */
17         private List<articleCommodityRel> articleCommmodityRels;18   }

文章商品关联DO:

 1    class articleCommodityRel{
 2         /**
 3          * 主键id
 4          */
 5         private Long id;
 6         /**
 7          * 商品id
 8          */
 9         private Long commodityId;
10         /**
11          * 文章类别
12          */
13         private Integer articleType;
14     }

为简单起见,省略相关商品DO以及文章商品关联sqlmapping,其中文章商品关联sqlmapping中根据商品id关联查询相关商品,即查询到一条关联记录,该条记录就会携带一条相关商品记录,具体不再赘述。

我们知道,如果是只有一种文章对应多种商品,只需要根据文章主键id即可查询,对应sqlmapping如下:

1 <resultMap class="Article" id="baseResult">
2     <result property="id" column="id" />
3     <result property="articleCommmodityRels" column="id" select="commdityAss.findById"/>4 </resultMap>

那么遇到上述情况时:需要传递多个参数进行关联查询。又该如何书写呢?

在Ibatis中,有一个组合键的概念,利用它即可达到我们的目的,首先将结果放出来:

1 <resultMap class="Article" id="baseResult">
2     <result property="id" column="id" />
3     <result property="type" column="type" />
4     <result property="articleCommodityRels" column="{id=id,type=type}" select="commodityAss.findByIdAndType"/>
5 </resultMap>    

没错,只是将result的column属性由column="id"改为column="{id=id,type=type}"即可,这样Ibatis就会将这两个字段对应的值传递给commodityAss.findByIdAndType对应的sql语句,从而实现了组合键查询,其具体形式为:{param1=column1,param2=column2,…,paramN=columnN}。

其中需要注意的是,param1..N是可以不用写的,只要对应查询语句的变量即可,但建议写上,因为这样即保证了可读性又保证了对应的参数值的匹配正确性。

时间: 2024-12-16 13:27:22

Ibatis组合键关联查询的相关文章

mybatis一对一关联查询——(八)

1.需求 查询所有订单信息,关联查询下单用户信息. 注意: 因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单. 2.  方法一:resultType 使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息: 2.1     sql语句 确定查询的主表:订单表 确定查询的关联表:用户表 关联查询使用内链接?还是外链接? 由于orders表中有一个外键(

Spring+SpringMVC+MyBatis深入学习及搭建(六)——MyBatis关联查询(转发同上)

原地址:http://www.cnblogs.com/shanheyongmu/p/7122520.html 1.商品订单数据模型 1.1数据模型分析思路 (1)每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当于你学习系统需求(功能)的过程. (2)每张表重要的字段设置 非空字段.外键字段 (3)数据库级别表与表之间的关系 外键关系 (4)表与表之间的业务关系 在分析表与表之间的业务关系时,一定要建立在某个业务意义基础上去分析. 1.2属性模型分析 2.一对一查询 2.1需求 查询订

外键关联非主键id时-hbm.xml配置,及其分页查询DaoImpl

表关联时,外键关联非主键id时-hbm.xml配置: (由于hibernate默认为关联主键查询,故需要配置相关hql语句的属性) <many-to-one name="areas" class="com.hnqy.entity.Areas" fetch="select" property-ref="areaid" foreign-key="areaid"> <column name=&q

Mybatis高级查询之关联查询

3 关联查询 做查询之前,先修改几个配置.mapper.xml是在mybatis-config.xml中指定,那么我们每增加一个mapper都要增加一个配置,很麻烦.为了简化配置.需要将mapper接口和mapper.xml放到同一个文件下,并且接口和xml文件命名一致.使用mybatis的自动扫描:.这样,当我们新增接口的时候,直接创建接口和对应xml文件就可以了: <mappers> <!--<mapper resource="com.test.mapper.dao/

7.MyBatis 关联查询(一对一)

1 关联查询映射     1.1 分析数据模型         思路 : 每张表记录的数据内容 每张表重要的字段(主键,外键,非空字段) 表与表之间的关系(外键关系) 表与表之间的业务关系(建立在某个业务意义基础上去分析) 如图:     1.2 一对一查询 有三种实现方法: resultType resultMap中的association嵌套查询 resultMap中的嵌套结果 需求: 进行订单查询,包括用户的姓名和地址信息  SQL语句: SELECT orders.id,orders.u

MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射

先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出现了如下错误:Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.Integer' 因为出现了这个问题,

框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)

知识点: 批量导入(ocupload插件,pinyin4J /POI解析Excel(apache POI) /区域分页查询 /Combobox下拉框 /分区组合条件分页查询(ajax) /分区数据导出(Excel下载) BOS项目笔记第4天 1.    区域批量导入功能 *Ajax不支持文件上传. *上传并且不刷新上传页面原理: Target到一个0,0,0的隐藏iframe里,造成一个没有刷新的假象 <form target="myIframe" action="ab

【Mybatis】Mybatis关联查询一对一和一对多的实现

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文主要讲了使用Mybatis实现关联查询,分为一对一和一对多两种情况,最后并对ResultMap进行一个简要说明. 一.创建表.分析 下面是两表,一个是顾客表,一个是车票表.一个顾客可以对应多张车票,但是一张车票只能对应一个顾客 t_customer:顾客表,一个顾客可以对应多张车票 t_ticket:车票表,一张车票只能对应一个顾客 1.创建数据表及插入初始数据 创建数据表 use te

mybatis中的关联查询

1>在实体映射层中引入关联对象 package com.jinglin.hotelsup.model; import java.io.Serializable; public class Goodsinfo implements Serializable{ private Integer goodsid; private Integer companyid; private Integer goodstypeid; private Integer unitid; private String c